Santos, Jose Renato G (Jose Renato Santos)
2005-Apr-09 03:15 UTC
RE: [Xen-devel] [PATCH] [1/3] Xenoprof: Enabling performance profiling in Xen
Here is part 1 of the patches for Xenoprof>> 1) xenoprof-1.0-xen-2.0.5.patch: >> - Patch for XenJose Renato Santos HP Labs _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Keir Fraser
2005-Apr-11 15:24 UTC
Re: [Xen-devel] [PATCH] [1/3] Xenoprof: Enabling performance profiling in Xen
Is the nmi_sanity_check() needed? We shouldn''t lose NMIs: even if we take one while doing NMI processing, we sholuld retake the NMI as soon as the first one IRETs. There used to be a problem whereby the Xen NMI handler would bail if it detected it had interrupted Xen at an unfortunate time. I guess the code in xenoprof was probably added to deal with this situation. If so then it is no longer needed -- I fix up in a more generic way now (reschedule the NMI automatically). Apart from that I guess this is mostly just oprofile source files pulled out of Linux? Is there much/any other Xen-specific code in the patch? -- Keir> > Here is part 1 of the patches for Xenoprof > > >> 1) xenoprof-1.0-xen-2.0.5.patch: > >> - Patch for Xen > > Jose Renato Santos > HP Labs > xenoprof-1.0-xen-2.0.5.patch > _______________________________________________ > Xen-devel mailing list > Xen-devel@lists.xensource.com > http://lists.xensource.com/xen-devel-=- MIME -=- This is a multi-part message in MIME format. ------_=_NextPart_001_01C53CB2.59CE8456 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Here is part 1 of the patches for Xenoprof>> 1) xenoprof-1.0-xen-2.0.5.patch: >> - Patch for XenJose Renato Santos HP Labs ------_=_NextPart_001_01C53CB2.59CE8456 Content-Type: application/octet-stream; name="xenoprof-1.0-xen-2.0.5.patch" Content-Transfer-Encoding: base64 Content-Description: xenoprof-1.0-xen-2.0.5.patch Content-Disposition: attachment; filename="xenoprof-1.0-xen-2.0.5.patch" ZGlmZiAtUE5hdXIgeGVuLTIuMC41L3hlbi9hcmNoL3g4Ni9hcGljLmMgeGVuLTIuMC41LXByb2Yv eGVuL2FyY2gveDg2L2FwaWMuYwotLS0geGVuLTIuMC41L3hlbi9hcmNoL3g4Ni9hcGljLmMJMjAw NS0wMy0xMCAxMTo1MjoxNS4wMDAwMDAwMDAgLTA4MDAKKysrIHhlbi0yLjAuNS1wcm9mL3hlbi9h cmNoL3g4Ni9hcGljLmMJMjAwNS0wNC0wNiAwOToyNzoxMy4wMDAwMDAwMDAgLTA3MDAKQEAgLTcy NCw2ICs3MjQsOSBAQAogCiB1bnNpZ25lZCBpbnQgYXBpY190aW1lcl9pcnFzIFtOUl9DUFVTXTsK IAorZXh0ZXJuIGludCBubWlfcHJvZmlsaW5nX3N0YXJ0ZWQ7CitleHRlcm4gaW50IG5taV9zYW5p dHlfY2hlY2soc3RydWN0IHhlbl9yZWdzICogcmVncywgaW50IGNwdSk7CisKIHZvaWQgc21wX2Fw aWNfdGltZXJfaW50ZXJydXB0KHN0cnVjdCB4ZW5fcmVncyAqIHJlZ3MpCiB7CiAgICAgYWNrX0FQ SUNfaXJxKCk7CkBAIC03MzEsNiArNzM0LDEyIEBACiAgICAgYXBpY190aW1lcl9pcnFzW3NtcF9w cm9jZXNzb3JfaWQoKV0rKzsKICAgICBwZXJmY19pbmNyYyhhcGljX3RpbWVyKTsKIAorICAgIC8q ICB3ZSBtYXkgbG9zZSBOTUkgc2FtcGxlcyBmb3Igc2V2ZXJhbCByZWFzb25zLgorCUhlcmUsIHdl IHByb3RlY3QgYWdhaW5zdCB0aGF0IGJ5IGRvaW5nIGFuIG5taSBzYW5pdHkKKwljaGVjayBldmVy eSB0aW1lciBpbnRlcnJ1cHQgb24gZXZlcnkgcHJvY2Vzc29yICovCisgICAgaWYgKG5taV9wcm9m aWxpbmdfc3RhcnRlZCkKKwlubWlfc2FuaXR5X2NoZWNrKHJlZ3MsIHNtcF9wcm9jZXNzb3JfaWQo KSk7CisKICAgICByYWlzZV9zb2Z0aXJxKEFDX1RJTUVSX1NPRlRJUlEpOwogfQogCmRpZmYgLVBO YXVyIHhlbi0yLjAuNS94ZW4vYXJjaC94ODYvTWFrZWZpbGUgeGVuLTIuMC41LXByb2YveGVuL2Fy Y2gveDg2L01ha2VmaWxlCi0tLSB4ZW4tMi4wLjUveGVuL2FyY2gveDg2L01ha2VmaWxlCTIwMDUt MDMtMTAgMTE6NTI6MTMuMDAwMDAwMDAwIC0wODAwCisrKyB4ZW4tMi4wLjUtcHJvZi94ZW4vYXJj aC94ODYvTWFrZWZpbGUJMjAwNS0wNC0wNyAwOTowNDoxMy4wMDAwMDAwMDAgLTA3MDAKQEAgLTEy LDcgKzEyLDEwIEBACiAKIE9CSlMgOj0gJChzdWJzdCAkKFRBUkdFVF9TVUJBUkNIKS9hc20tb2Zm c2V0cy5vLCwkKE9CSlMpKQogCitPQkpTICs9IG9wcm9maWxlL29wcm9maWxlLm8KKwogZGVmYXVs dDogJChUQVJHRVQpCisJbWFrZSAtQyBvcHJvZmlsZQogCiAkKFRBUkdFVCk6ICQoVEFSR0VUKS1z eW1zIGJvb3QvbWtlbGYzMgogCS4vYm9vdC9ta2VsZjMyICQoVEFSR0VUKS1zeW1zICQoVEFSR0VU KSAweDEwMDAwMApAQCAtMzAsMTEgKzMzLDE1IEBACiBib290L21rZWxmMzI6IGJvb3QvbWtlbGYz Mi5jCiAJJChIT1NUQ0MpICQoSE9TVENGTEFHUykgLW8gJEAgJDwKIAorb3Byb2ZpbGUvb3Byb2Zp bGUubzoKKwkkKE1BS0UpIC1DIG9wcm9maWxlCisKIGNsZWFuOgogCXJtIC1mICoubyAqLnMgKn4g Y29yZSBib290LyoubyBib290Lyp+IGJvb3QvY29yZSBib290L21rZWxmMzIKIAlybSAtZiB4ODZf MzIvKi5vIHg4Nl8zMi8qfiB4ODZfMzIvY29yZQogCXJtIC1mIHg4Nl82NC8qLm8geDg2XzY0Lyp+ IHg4Nl82NC9jb3JlCiAJcm0gLWYgbXRyci8qLm8gbXRyci8qfiBtdHJyL2NvcmUKKwlybSAtZiBv cHJvZmlsZS8qLm8KIAogZGVsZXRlLXVuZnJlc2gtZmlsZXM6CiAJIyBub3RoaW5nCmRpZmYgLVBO YXVyIHhlbi0yLjAuNS94ZW4vYXJjaC94ODYvbWljcm9jb2RlLmMgeGVuLTIuMC41LXByb2YveGVu L2FyY2gveDg2L21pY3JvY29kZS5jCi0tLSB4ZW4tMi4wLjUveGVuL2FyY2gveDg2L21pY3JvY29k ZS5jCTIwMDUtMDMtMTAgMTE6NTI6MTMuMDAwMDAwMDAwIC0wODAwCisrKyB4ZW4tMi4wLjUtcHJv Zi94ZW4vYXJjaC94ODYvbWljcm9jb2RlLmMJMjAwNS0wNC0wNiAwOToyNzoxMy4wMDAwMDAwMDAg LTA3MDAKQEAgLTg3LDEzICs4Nyw2IEBACiAjZGVmaW5lIHZtYWxsb2MoX3MpIHhtYWxsb2MoX3Mp CiAjZGVmaW5lIHZmcmVlKF9wKSB4ZnJlZShfcCkKICNkZWZpbmUgbnVtX29ubGluZV9jcHVzKCkg c21wX251bV9jcHVzCi1zdGF0aWMgaW5saW5lIGludCBvbl9lYWNoX2NwdSgKLSAgICB2b2lkICgq ZnVuYykgKHZvaWQgKmluZm8pLCB2b2lkICppbmZvLCBpbnQgcmV0cnksIGludCB3YWl0KQotewot ICAgIGludCByZXQgPSBzbXBfY2FsbF9mdW5jdGlvbihmdW5jLCBpbmZvLCByZXRyeSwgd2FpdCk7 Ci0gICAgZnVuYyhpbmZvKTsKLSAgICByZXR1cm4gcmV0OwotfQogCiAjaWYgMAogTU9EVUxFX0RF U0NSSVBUSU9OKCJJbnRlbCBDUFUgKElBLTMyKSBNaWNyb2NvZGUgVXBkYXRlIERyaXZlciIpOwpk aWZmIC1QTmF1ciB4ZW4tMi4wLjUveGVuL2FyY2gveDg2L25taS5jIHhlbi0yLjAuNS1wcm9mL3hl bi9hcmNoL3g4Ni9ubWkuYwotLS0geGVuLTIuMC41L3hlbi9hcmNoL3g4Ni9ubWkuYwkyMDA1LTAz LTEwIDExOjUyOjEzLjAwMDAwMDAwMCAtMDgwMAorKysgeGVuLTIuMC41LXByb2YveGVuL2FyY2gv eDg2L25taS5jCTIwMDUtMDQtMDYgMDk6Mjc6MTMuMDAwMDAwMDAwIC0wNzAwCkBAIC01LDYgKzUs MTAgQEAKICAqCiAgKiAgU3RhcnRlZCBieSBJbmdvIE1vbG5hciA8bWluZ29AcmVkaGF0LmNvbT4K ICAqCisgKiBNb2RpZmllZCBieSBBcmF2aW5kIE1lbm9uIGZvciBzdXBwb3J0aW5nIG9wcm9maWxl CisgKiBUaGVzZSBtb2RpZmljYXRpb25zIGFyZToKKyAqIENvcHlyaWdodCAoQykgMjAwNSBIZXds ZXR0LVBhY2thcmQgQ28uCisgKgogICogIEZpeGVzOgogICogIE1pa2FlbCBQZXR0ZXJzc29uCTog QU1EIEs3IHN1cHBvcnQgZm9yIGxvY2FsIEFQSUMgTk1JIHdhdGNoZG9nLgogICogIE1pa2FlbCBQ ZXR0ZXJzc29uCTogUG93ZXIgTWFuYWdlbWVudCBmb3IgbG9jYWwgQVBJQyBOTUkgd2F0Y2hkb2cu CkBAIC0zNCw2ICszOCwyOCBAQAogCiBleHRlcm4gaW50IGxvZ2ljYWxfcHJvY19pZFtdOwogCisv KgorICogbGFwaWNfbm1pX293bmVyIHRyYWNrcyB0aGUgb3duZXJzaGlwIG9mIHRoZSBsYXBpYyBO TUkgaGFyZHdhcmU6CisgKiAtIGl0IG1heSBiZSByZXNlcnZlZCBieSBzb21lIG90aGVyIGRyaXZl ciwgb3Igbm90CisgKiAtIHdoZW4gbm90IHJlc2VydmVkIGJ5IHNvbWUgb3RoZXIgZHJpdmVyLCBp dCBtYXkgYmUgdXNlZCBmb3IKKyAqICAgdGhlIE5NSSB3YXRjaGRvZywgb3Igbm90CisgKgorICog VGhpcyBpcyBtYWludGFpbmVkIHNlcGFyYXRlbHkgZnJvbSBubWlfYWN0aXZlIGJlY2F1c2UgdGhl IE5NSQorICogd2F0Y2hkb2cgbWF5IGFsc28gYmUgZHJpdmVuIGZyb20gdGhlIEkvTyBBUElDIHRp bWVyLgorICovCitzdGF0aWMgc3BpbmxvY2tfdCBsYXBpY19ubWlfb3duZXJfbG9jayA9IFNQSU5f TE9DS19VTkxPQ0tFRDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbGFwaWNfbm1pX293bmVyOworI2Rl ZmluZSBMQVBJQ19OTUlfV0FUQ0hET0cgICAgICAoMTw8MCkKKyNkZWZpbmUgTEFQSUNfTk1JX1JF U0VSVkVEICAgICAgKDE8PDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgCisvKiBubWlfYWN0aXZlOgorICogKzE6IHRoZSBsYXBpYyBOTUkgd2F0 Y2hkb2cgaXMgYWN0aXZlLCBidXQgY2FuIGJlIGRpc2FibGVkCisgKiAgMDogdGhlIGxhcGljIE5N SSB3YXRjaGRvZyBoYXMgbm90IGJlZW4gc2V0IHVwLCBhbmQgY2Fubm90CisgKiAgICAgYmUgZW5h YmxlZAorICogLTE6IHRoZSBsYXBpYyBOTUkgd2F0Y2hkb2cgaXMgZGlzYWJsZWQsIGJ1dCBjYW4g YmUgZW5hYmxlZAorICovCitpbnQgbm1pX2FjdGl2ZTsKKwogI2RlZmluZSBLN19FVk5UU0VMX0VO QUJMRQkoMSA8PCAyMikKICNkZWZpbmUgSzdfRVZOVFNFTF9JTlQJCSgxIDw8IDIwKQogI2RlZmlu ZSBLN19FVk5UU0VMX09TCQkoMSA8PCAxNykKQEAgLTczLDkgKzk5LDkgQEAKICAqLwogI2RlZmlu ZSBNU1JfUDRfSVFfQ09VTlRFUjAJMHgzMEMKICNkZWZpbmUgTVNSX1A0X0lRX0NPVU5URVIxCTB4 MzBECi0jZGVmaW5lIE1TUl9QNF9JUV9DQ0NSMAkJMHgzNkMKLSNkZWZpbmUgTVNSX1A0X0lRX0ND Q1IxCQkweDM2RAotI2RlZmluZSBNU1JfUDRfQ1JVX0VTQ1IwCTB4M0I4IC8qIEVTQ1Igbm8uIDQg Ki8KKy8vI2RlZmluZSBNU1JfUDRfSVFfQ0NDUjAJCTB4MzZDCisvLyNkZWZpbmUgTVNSX1A0X0lR X0NDQ1IxCQkweDM2RAorLy8jZGVmaW5lIE1TUl9QNF9DUlVfRVNDUjAJMHgzQjggLyogRVNDUiBu by4gNCAqLwogI2RlZmluZSBQNF9OTUlfQ1JVX0VTQ1IwIFwKICAgICAoUDRfRVNDUl9FVkVOVF9T RUxFQ1QoMHgzRil8UDRfRVNDUl9PUzB8UDRfRVNDUl9VU1IwfCBcCiAgICAgIFA0X0VTQ1JfT1Mx fFA0X0VTQ1JfVVNSMSkKQEAgLTEzMSw2ICsxNTcsNjkgQEAKICAqIE9yaWdpbmFsIGNvZGUgd3Jp dHRlbiBieSBLZWl0aCBPd2Vucy4KICAqLwogCitzdGF0aWMgdm9pZCBkaXNhYmxlX2xhcGljX25t aV93YXRjaGRvZyh2b2lkKQoreworICAgICAgICBpZiAobm1pX2FjdGl2ZSA8PSAwKQorICAgICAg ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgc3dpdGNoIChib290X2NwdV9kYXRhLng4Nl92ZW5k b3IpIHsKKyAgICAgICAgY2FzZSBYODZfVkVORE9SX0FNRDoKKyAgICAgICAgICAgICAgICB3cm1z cihNU1JfSzdfRVZOVFNFTDAsIDAsIDApOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg ICBjYXNlIFg4Nl9WRU5ET1JfSU5URUw6CisgICAgICAgICAgICAgICAgc3dpdGNoIChib290X2Nw dV9kYXRhLng4NikgeworICAgICAgICAgICAgICAgIGNhc2UgNjoKKyAgICAgICAgICAgICAgICAg ICAgICAgIHdybXNyKE1TUl9QNl9FVk5UU0VMMCwgMCwgMCk7CisgICAgICAgICAgICAgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDE1OgorCQkJaWYgKGxvZ2ljYWxfcHJv Y19pZFtzbXBfcHJvY2Vzc29yX2lkKCldID09IDApCisJCQl7CisgICAgICAgICAgICAgICAgICAg ICAgICAJd3Jtc3IoTVNSX1A0X0lRX0NDQ1IwLCAwLCAwKTsKKwkgICAgICAgICAgICAgICAgICAg ICAgICB3cm1zcihNU1JfUDRfQ1JVX0VTQ1IwLCAwLCAwKTsKKwkJCX0gZWxzZSB7CisJCQkJd3Jt c3IoTVNSX1A0X0lRX0NDQ1IxLCAwLCAwKTsJCisJCQl9CisgICAgICAgICAgICAgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgIH0KKyAgICAgICAgbm1pX2FjdGl2ZSA9IC0xOworICAgICAgICAvKiB0ZWxsIGRvX25taSgp IGFuZCBvdGhlcnMgdGhhdCB3ZSdyZSBub3QgYWN0aXZlIGFueSBtb3JlICovCisgICAgICAgIG5t aV93YXRjaGRvZyA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIGVuYWJsZV9sYXBpY19ubWlfd2F0Y2hk b2codm9pZCkKK3sKKyAgICAgICAgaWYgKG5taV9hY3RpdmUgPCAwKSB7CisgICAgICAgICAgICAg ICAgbm1pX3dhdGNoZG9nID0gTk1JX0xPQ0FMX0FQSUM7CisgICAgICAgICAgICAgICAgc2V0dXBf YXBpY19ubWlfd2F0Y2hkb2coKTsKKyAgICAgICAgfQorfQorCitpbnQgcmVzZXJ2ZV9sYXBpY19u bWkodm9pZCkKK3sKKyAgICAgICAgdW5zaWduZWQgaW50IG9sZF9vd25lcjsKKyAgICAgICAgc3Bp bl9sb2NrKCZsYXBpY19ubWlfb3duZXJfbG9jayk7CisgICAgICAgIG9sZF9vd25lciA9IGxhcGlj X25taV9vd25lcjsKKyAgICAgICAgbGFwaWNfbm1pX293bmVyIHw9IExBUElDX05NSV9SRVNFUlZF RDsKKyAgICAgICAgc3Bpbl91bmxvY2soJmxhcGljX25taV9vd25lcl9sb2NrKTsKKyAgICAgICAg aWYgKG9sZF9vd25lciAmIExBUElDX05NSV9SRVNFUlZFRCkKKyAgICAgICAgICAgICAgICByZXR1 cm4gLUVCVVNZOworICAgICAgICBpZiAob2xkX293bmVyICYgTEFQSUNfTk1JX1dBVENIRE9HKQor ICAgICAgICAgICAgICAgIGRpc2FibGVfbGFwaWNfbm1pX3dhdGNoZG9nKCk7CisgICAgICAgIHJl dHVybiAwOworfQorCit2b2lkIHJlbGVhc2VfbGFwaWNfbm1pKHZvaWQpCit7CisgICAgICAgIHVu c2lnbmVkIGludCBuZXdfb3duZXI7CisgICAgICAgIHNwaW5fbG9jaygmbGFwaWNfbm1pX293bmVy X2xvY2spOworICAgICAgICBuZXdfb3duZXIgPSBsYXBpY19ubWlfb3duZXIgJiB+TEFQSUNfTk1J X1JFU0VSVkVEOworICAgICAgICBsYXBpY19ubWlfb3duZXIgPSBuZXdfb3duZXI7CisgICAgICAg IHNwaW5fdW5sb2NrKCZsYXBpY19ubWlfb3duZXJfbG9jayk7CisgICAgICAgIGlmIChuZXdfb3du ZXIgJiBMQVBJQ19OTUlfV0FUQ0hET0cpCisgICAgICAgICAgICAgICAgZW5hYmxlX2xhcGljX25t aV93YXRjaGRvZygpOworfQorCiBzdGF0aWMgdm9pZCBfX3BtaW5pdCBjbGVhcl9tc3JfcmFuZ2Uo dW5zaWduZWQgaW50IGJhc2UsIHVuc2lnbmVkIGludCBuKQogewogICAgIHVuc2lnbmVkIGludCBp OwpAQCAtMjU1LDYgKzM0NCw4IEBACiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuOwogICAg IH0KKyAgICBsYXBpY19ubWlfb3duZXIgPSBMQVBJQ19OTUlfV0FUQ0hET0c7CisgICAgbm1pX2Fj dGl2ZSA9IDE7CiAgICAgbm1pX3BtX2luaXQoKTsKIH0KIApAQCAtMzE5LDMgKzQxMCw3IEBACiAg ICAgICAgIH0KICAgICB9CiB9CisKK0VYUE9SVF9TWU1CT0wocmVzZXJ2ZV9sYXBpY19ubWkpOwor RVhQT1JUX1NZTUJPTChyZWxlYXNlX2xhcGljX25taSk7CisKZGlmZiAtUE5hdXIgeGVuLTIuMC41 L3hlbi9hcmNoL3g4Ni9vcHJvZmlsZS9NYWtlZmlsZSB4ZW4tMi4wLjUtcHJvZi94ZW4vYXJjaC94 ODYvb3Byb2ZpbGUvTWFrZWZpbGUKLS0tIHhlbi0yLjAuNS94ZW4vYXJjaC94ODYvb3Byb2ZpbGUv TWFrZWZpbGUJMTk2OS0xMi0zMSAxNjowMDowMC4wMDAwMDAwMDAgLTA4MDAKKysrIHhlbi0yLjAu NS1wcm9mL3hlbi9hcmNoL3g4Ni9vcHJvZmlsZS9NYWtlZmlsZQkyMDA1LTA0LTA2IDA5OjI3OjEz LjAwMDAwMDAwMCAtMDcwMApAQCAtMCwwICsxLDM0IEBACisKK2luY2x1ZGUgJChCQVNFRElSKS9S dWxlcy5taworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCisjIEZMQUdT IGlzIGlkZW50aWNhbCB0byBDRkxBR1MgZXhjZXB0IGZvciAtV2Vycm9yICAgICAgICAgICAgICAg ICAgICAgICAgICAgIAorRkxBR1MgIDo9IC1ub3N0ZGluYyAtZm5vLWJ1aWx0aW4gLWZuby1jb21t b24gLWZuby1zdHJpY3QtYWxpYXNpbmcKK0ZMQUdTICArPSAtaXdpdGhwcmVmaXggaW5jbHVkZSAt V2FsbCAtcGlwZQorRkxBR1MgICs9IC1JJChCQVNFRElSKS9pbmNsdWRlIC1Xbm8tcG9pbnRlci1h cml0aCAtV3JlZHVuZGFudC1kZWNscworCitpZmVxICgkKG9wdGltaXplKSx5KQorRkxBR1MgICs9 IC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlcgorZWxzZQoreDg2XzMyL3VzZXJjb3B5Lm86IENGTEFH UyArPSAtTzEKK2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIyBQcmV2 ZW50IGZsb2F0aW5nLXBvaW50IHZhcmlhYmxlcyBmcm9tIGNyZWVwaW5nIGludG8gWGVuLgorRkxB R1MgICs9IC1tc29mdC1mbG9hdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK2lm ZXEgKCQoVEFSR0VUX1NVQkFSQ0gpLHg4Nl8zMikKK0ZMQUdTICArPSAtbTMyIC1tYXJjaD1pNjg2 CitMREZMQUdTIDo9IC0tb2Zvcm1hdCBlbGYzMi1pMzg2CitlbmRpZgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAKK2lmZXEgKCQoVEFSR0VUX1NVQkFSQ0gpLHg4Nl82NCkKK0ZMQUdT ICArPSAtbTY0IC1tbm8tcmVkLXpvbmUgLWZwaWMgLWZuby1yZW9yZGVyLWJsb2NrcworRkxBR1Mg ICs9IC1mbm8tYXN5bmNocm9ub3VzLXVud2luZC10YWJsZXMKK2VuZGlmCisKK2RlZmF1bHQ6ICQo T0JKUykgCisJJChMRCkgJChMREZMQUdTKSAtciAtbyBvcHJvZmlsZS5vICQoT0JKUykKKwkKKyUu bzogJS5jICQoSERSUykgTWFrZWZpbGUKKwkkKENDKSAkKEZMQUdTKSAtYyAkPCAtbyAkQAorCmRp ZmYgLVBOYXVyIHhlbi0yLjAuNS94ZW4vYXJjaC94ODYvb3Byb2ZpbGUvI01ha2VmaWxlIyB4ZW4t Mi4wLjUtcHJvZi94ZW4vYXJjaC94ODYvb3Byb2ZpbGUvI01ha2VmaWxlIwotLS0geGVuLTIuMC41 L3hlbi9hcmNoL3g4Ni9vcHJvZmlsZS8jTWFrZWZpbGUjCTE5NjktMTItMzEgMTY6MDA6MDAuMDAw MDAwMDAwIC0wODAwCisrKyB4ZW4tMi4wLjUtcHJvZi94ZW4vYXJjaC94ODYvb3Byb2ZpbGUvI01h a2VmaWxlIwkyMDA1LTA0LTA2IDA5OjUzOjUzLjAwMDAwMDAwMCAtMDcwMApAQCAtMCwwICsxLDM0 IEBACisKK2luY2x1ZGUgJChCQVNFRElSKS9SdWxlcy5taworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIAorCisjIEZMQUdTIGlzIGlkZW50aWNhbCB0byBDRkxBR1MgZXhjZXB0 IGZvciAtV2Vycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorRkxBR1MgIDo9IC1ub3N0 ZGluYyAtZm5vLWJ1aWx0aW4gLWZuby1jb21tb24gLWZuby1zdHJpY3QtYWxpYXNpbmcKK0ZMQUdT ICArPSAtaXdpdGhwcmVmaXggaW5jbHVkZSAtV2FsbCAtcGlwZQorRkxBR1MgICs9IC1JJChCQVNF RElSKS9pbmNsdWRlIC1Xbm8tcG9pbnRlci1hcml0aCAtV3JlZHVuZGFudC1kZWNscworCitpZmVx ICgkKG9wdGltaXplKSx5KQorRkxBR1MgICs9IC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlcgorZWxz ZQoreDg2XzMyL3VzZXJjb3B5Lm86IENGTEFHUyArPSAtTzEKK2VuZGlmCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIAorIyBQcmV2ZW50IGZsb2F0aW5nLXBvaW50IHZhcmlhYmxlcyBm cm9tIGNyZWVwaW5nIGludG8gWGVuLgorRkxBR1MgICs9IC1tc29mdC1mbG9hdAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAKK2lmZXEgKCQoVEFSR0VUX1NVQkFSQ0gpLHg4Nl8zMikK K0ZMQUdTICArPSAtbTMyIC1tYXJjaD1pNjg2CitMREZMQUdTIDo9IC0tb2Zvcm1hdCBlbGYzMi1p Mzg2CitlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK2lmZXEgKCQoVEFS R0VUX1NVQkFSQ0gpLHg4Nl82NCkKK0ZMQUdTICArPSAtbTY0IC1tbm8tcmVkLXpvbmUgLWZwaWMg LWZuby1yZW9yZGVyLWJsb2NrcworRkxBR1MgICs9IC1mbm8tYXN5bmNocm9ub3VzLXVud2luZC10 YWJsZXMKK2VuZGlmCisKK2RlZmF1bHQ6ICQoT0JKUykgCisJJChMRCkgJChMREZMQUdTKSAtciAt byBvcHJvZmlsZS5vICQoT0JKUykKKwkKKyUubzogJS5jICQoSERSUykgTWFrZWZpbGUKKwkkKEND KSAkKEZMQUdTKSAtYyAkPCAtbyAkQAorCmRpZmYgLVBOYXVyIHhlbi0yLjAuNS94ZW4vYXJjaC94 ODYvb3Byb2ZpbGUvbm1pX2ludC5jIHhlbi0yLjAuNS1wcm9mL3hlbi9hcmNoL3g4Ni9vcHJvZmls ZS9ubWlfaW50LmMKLS0tIHhlbi0yLjAuNS94ZW4vYXJjaC94ODYvb3Byb2ZpbGUvbm1pX2ludC5j CTE5NjktMTItMzEgMTY6MDA6MDAuMDAwMDAwMDAwIC0wODAwCisrKyB4ZW4tMi4wLjUtcHJvZi94 ZW4vYXJjaC94ODYvb3Byb2ZpbGUvbm1pX2ludC5jCTIwMDUtMDQtMDcgMTY6NDA6MjAuMDAwMDAw MDAwIC0wNzAwCkBAIC0wLDAgKzEsNDMxIEBACisvKioKKyAqIEBmaWxlIG5taV9pbnQuYworICoK KyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBS ZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIEpvaG4gTGV2b24gPGxldm9uQG1v dmVtZW50YXJpYW4ub3JnPgorICoKKyAqIE1vZGlmaWVkIGJ5IEFyYXZpbmQgTWVub24gZm9yIFhl bgorICogVGhlc2UgbW9kaWZpY2F0aW9ucyBhcmU6CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgSGV3 bGV0dC1QYWNrYXJkIENvLgorICovCisKKyNpbmNsdWRlIDx4ZW4vZXZlbnQuaD4KKyNpbmNsdWRl IDx4ZW4vdHlwZXMuaD4KKyNpbmNsdWRlIDx4ZW4vZXJybm8uaD4KKyNpbmNsdWRlIDx4ZW4vaW5p dC5oPgorI2luY2x1ZGUgPHB1YmxpYy94ZW4uaD4KKyNpbmNsdWRlIDxhc20vbm1pLmg+CisjaW5j bHVkZSA8YXNtL21zci5oPgorI2luY2x1ZGUgPGFzbS9hcGljLmg+CisgCisjaW5jbHVkZSAib3Bf Y291bnRlci5oIgorI2luY2x1ZGUgIm9wX3g4Nl9tb2RlbC5oIgorIAorc3RhdGljIHN0cnVjdCBv cF94ODZfbW9kZWxfc3BlYyBjb25zdCAqIG1vZGVsOworc3RhdGljIHN0cnVjdCBvcF9tc3JzIGNw dV9tc3JzW05SX0NQVVNdOworc3RhdGljIHVuc2lnbmVkIGxvbmcgc2F2ZWRfbHZ0cGNbTlJfQ1BV U107CisKKyNkZWZpbmUgVklSUV9CSVRNQVNLX1NJWkUJKE1BWF9PUFJPRl9ET01BSU5TLzMyICsg MSkKKworZXh0ZXJuIGludCBhY3RpdmVfZG9tYWluc1tNQVhfT1BST0ZfRE9NQUlOU107CitleHRl cm4gdW5zaWduZWQgaW50IGFkb21haW5zOworCitleHRlcm4gc3RydWN0IGRvbWFpbiAqIHByaW1h cnlfcHJvZmlsZXI7CitleHRlcm4gc3RydWN0IGRvbWFpbiAqIGFkb21haW5fcHRyc1tNQVhfT1BS T0ZfRE9NQUlOU107CitleHRlcm4gdW5zaWduZWQgbG9uZyB2aXJxX292Zl9wZW5kaW5nW1ZJUlFf QklUTUFTS19TSVpFXTsKKworZXh0ZXJuIGludCBpc19hY3RpdmUoc3RydWN0IGRvbWFpbiAqZCk7 CitleHRlcm4gaW50IGFjdGl2ZV9pZChzdHJ1Y3QgZG9tYWluICpkKTsKK2V4dGVybiBpbnQgaXNf cGFzc2l2ZShzdHJ1Y3QgZG9tYWluICpkKTsKK2V4dGVybiBpbnQgaXNfcHJvZmlsZWQoc3RydWN0 IGRvbWFpbiAqZCk7CisKKworaW50IG5taV9wcm9maWxpbmdfc3RhcnRlZCA9IDA7CisKK2ludCBh Y3RpdmVfdmlycV9jb3VudCA9IDA7CitpbnQgcGFzc2l2ZV92aXJxX2NvdW50ID0gMDsKK2ludCBv dGhlcl92aXJxX2NvdW50ID0gMDsKK2ludCBvdGhlcl9pZCA9IC0xOworaW50IHhlbl9jb3VudCA9 IDA7CitpbnQgZG9tX2NvdW50ID0gMDsgCitpbnQgb3ZmID0gMDsKKworaW50IG5taV9jYWxsYmFj ayhzdHJ1Y3QgeGVuX3JlZ3MgKiByZWdzLCBpbnQgY3B1KQoreworCWludCB4ZW5fbW9kZSA9IDA7 CisKKwlvdmYgPSBtb2RlbC0+Y2hlY2tfY3RycyhjcHUsICZjcHVfbXNyc1tjcHVdLCByZWdzKTsK Kwl4ZW5fbW9kZSA9IFJJTkdfMChyZWdzKTsKKwlpZiAob3ZmKSB7CisJCWlmICh4ZW5fbW9kZSkK KwkJCXhlbl9jb3VudCsrOworCQllbHNlCisJCQlkb21fY291bnQrKzsKKworCQlpZiAoaXNfYWN0 aXZlKGN1cnJlbnQpKSB7CisJCS8qIFRoaXMgaXMgbGlnaHRseSBpbmNvcnJlY3QuIElmIHdlIGRv IG5vdCBkZWxpdmVyIAorCQkJT1ZGIHZpcnR1YWwgaW50ZXJydXB0cyBpbiBhIHN5bmNocm9ub3Vz IAorCQkJbWFubmVyLCBhIHByb2Nlc3Mgc3dpdGNoIG1heSBoYXBwZW4gaW4gdGhlIGRvbWFpbiAK KwkJCWJldHdlZW4gdGhlIHBvaW50IHRoZSBzYW1wbGUgd2FzIGNvbGxlY3RlZCBhbmQgCisJCQl0 aGUgcG9pbnQgYXQgd2hpY2ggYSBWSVJRIHdhcyBkZWxpdmVyZWQuIEhvd2V2ZXIsIAorCQkJaXQg aXMgbm90IHNhZmUgdG8gY2FsbCBzZW5kX2d1ZXN0X3ZpcnEgZnJvbSB0aGlzIAorCQkJTk1JIGNv bnRleHQsIGl0IG1heSBsZWFkIHRvIGEgZGVhZGxvY2sgc2luY2UgTk1JcyBhcmUgCisJCQl1bm1h c2thYmxlLiBPbmUgb3B0aW1pemF0aW9uIHRoYXQgd2UgY2FuIGRvIGlzIAorCQkJdGhhdCBpZiB0 aGUgc2FtcGxlIG9jY3VycyB3aGlsZSBkb21haW4gY29kZSBpcyAKKwkJCXJ1bm5uZywgd2Uga25v dyB0aGF0IGl0IGlzIHNhZmUgdG8gY2FsbCAKKwkJCXNlbmRfZ3Vlc3RfdmlycSwgc2luY2Ugd2Ug a25vdyBubyBYZW4gY29kZSAKKwkJCWlzIHJ1bm5pbmcgYXQgdGhhdCB0aW1lLgorCQkJSG93ZXZl ciwgdGhpcyBtYXkgZGlzdG9ydCB0aGUgc2FtcGxlIGRpc3RyaWJ1dGlvbiwKKwkJCWJlY2F1c2Ug d2UgbWF5IGxvc2UgbW9yZSBYZW4gbW9kZSBzYW1wbGVzLiovCisJCQlhY3RpdmVfdmlycV9jb3Vu dCsrOworCQkJaWYgKCF4ZW5fbW9kZSkgeworCQkJCXNlbmRfZ3Vlc3RfdmlycShjdXJyZW50LCBW SVJRX1BNQ19PVkYpOworCQkJCWNsZWFyX2JpdChhY3RpdmVfaWQoY3VycmVudCksICZ2aXJxX292 Zl9wZW5kaW5nWzBdKTsKKwkJCX0gZWxzZSAKKwkJCQlzZXRfYml0KGFjdGl2ZV9pZChjdXJyZW50 KSwgJnZpcnFfb3ZmX3BlbmRpbmdbMF0pOworCQkJcHJpbWFyeV9wcm9maWxlci0+c2hhcmVkX2lu Zm8tPmFjdGl2ZV9zYW1wbGVzKys7CisJCX0KKwkJZWxzZSBpZiAoaXNfcGFzc2l2ZShjdXJyZW50 KSkgeworCQkJc2V0X2JpdChhY3RpdmVfaWQocHJpbWFyeV9wcm9maWxlciksICZ2aXJxX292Zl9w ZW5kaW5nWzBdKTsKKwkJCXBhc3NpdmVfdmlycV9jb3VudCsrOworCQkJcHJpbWFyeV9wcm9maWxl ci0+c2hhcmVkX2luZm8tPnBhc3NpdmVfc2FtcGxlcysrOworCQl9CisJCWVsc2UgeworCQkJb3Ro ZXJfdmlycV9jb3VudCsrOworCQkJb3RoZXJfaWQgPSBjdXJyZW50LT5pZDsKKwkJCXByaW1hcnlf cHJvZmlsZXItPnNoYXJlZF9pbmZvLT5vdGhlcl9zYW1wbGVzKys7CisJCX0KKwl9CisJcmV0dXJu IDE7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfbXNycyh2b2lkKQoreworCWludCBpOworCWZvciAo aSA9IDA7IGkgPCBOUl9DUFVTOyArK2kpIHsKKwkJeGZyZWUoY3B1X21zcnNbaV0uY291bnRlcnMp OworCQljcHVfbXNyc1tpXS5jb3VudGVycyA9IE5VTEw7CisJCXhmcmVlKGNwdV9tc3JzW2ldLmNv bnRyb2xzKTsKKwkJY3B1X21zcnNbaV0uY29udHJvbHMgPSBOVUxMOworCX0KK30KKyAKK3N0YXRp YyBpbnQgYWxsb2NhdGVfbXNycyh2b2lkKQoreworCWludCBzdWNjZXNzID0gMTsKKwlzaXplX3Qg Y29udHJvbHNfc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgb3BfbXNyKSAqIG1vZGVsLT5udW1fY29udHJv bHM7CisJc2l6ZV90IGNvdW50ZXJzX3NpemUgPSBzaXplb2Yoc3RydWN0IG9wX21zcikgKiBtb2Rl bC0+bnVtX2NvdW50ZXJzOworCisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IE5SX0NQVVM7ICsr aSkgeworCQkvL2lmICghY3B1X29ubGluZShpKSkKKwkJaWYgKCF0ZXN0X2JpdChpLCAmY3B1X29u bGluZV9tYXApKQorCQkJY29udGludWU7CisKKwkJY3B1X21zcnNbaV0uY291bnRlcnMgPSB4bWFs bG9jKGNvdW50ZXJzX3NpemUpOworCQlpZiAoIWNwdV9tc3JzW2ldLmNvdW50ZXJzKSB7CisJCQlz dWNjZXNzID0gMDsKKwkJCWJyZWFrOworCQl9CisJCWNwdV9tc3JzW2ldLmNvbnRyb2xzID0geG1h bGxvYyhjb250cm9sc19zaXplKTsKKwkJaWYgKCFjcHVfbXNyc1tpXS5jb250cm9scykgeworCQkJ c3VjY2VzcyA9IDA7CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAoIXN1Y2Nlc3MpCisJCWZyZWVf bXNycygpOworCisJcmV0dXJuIHN1Y2Nlc3M7Cit9CisKK3N0YXRpYyB2b2lkIG5taV9jcHVfc2F2 ZV9yZWdpc3RlcnMoc3RydWN0IG9wX21zcnMgKiBtc3JzKQoreworCXVuc2lnbmVkIGludCBjb25z dCBucl9jdHJzID0gbW9kZWwtPm51bV9jb3VudGVyczsKKwl1bnNpZ25lZCBpbnQgY29uc3QgbnJf Y3RybHMgPSBtb2RlbC0+bnVtX2NvbnRyb2xzOyAKKwlzdHJ1Y3Qgb3BfbXNyICogY291bnRlcnMg PSBtc3JzLT5jb3VudGVyczsKKwlzdHJ1Y3Qgb3BfbXNyICogY29udHJvbHMgPSBtc3JzLT5jb250 cm9sczsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBucl9jdHJzOyArK2kp IHsKKwkJcmRtc3IoY291bnRlcnNbaV0uYWRkciwKKwkJCWNvdW50ZXJzW2ldLnNhdmVkLmxvdywK KwkJCWNvdW50ZXJzW2ldLnNhdmVkLmhpZ2gpOworCX0KKyAKKwlmb3IgKGkgPSAwOyBpIDwgbnJf Y3RybHM7ICsraSkgeworCQlyZG1zcihjb250cm9sc1tpXS5hZGRyLAorCQkJY29udHJvbHNbaV0u c2F2ZWQubG93LAorCQkJY29udHJvbHNbaV0uc2F2ZWQuaGlnaCk7CisJfQorfQorCitzdGF0aWMg dm9pZCBubWlfc2F2ZV9yZWdpc3RlcnModm9pZCAqIGR1bW15KQoreworCWludCBjcHUgPSBzbXBf cHJvY2Vzc29yX2lkKCk7CisJc3RydWN0IG9wX21zcnMgKiBtc3JzID0gJmNwdV9tc3JzW2NwdV07 CisJbW9kZWwtPmZpbGxfaW5fYWRkcmVzc2VzKG1zcnMpOworCW5taV9jcHVfc2F2ZV9yZWdpc3Rl cnMobXNycyk7Cit9CisKK2ludCBubWlfcmVzZXJ2ZV9jb3VudGVycyh2b2lkKQoreworCWlmICgh YWxsb2NhdGVfbXNycygpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIFdlIHdhbGsgYSB0aGlu IGxpbmUgYmV0d2VlbiBsYXcgYW5kIHJhcGUgaGVyZS4KKwkgKiBXZSBuZWVkIHRvIGJlIGNhcmVm dWwgdG8gaW5zdGFsbCBvdXIgTk1JIGhhbmRsZXIKKwkgKiB3aXRob3V0IGFjdHVhbGx5IHRyaWdn ZXJpbmcgYW55IE5NSXMgYXMgdGhpcyB3aWxsCisJICogYnJlYWsgdGhlIGNvcmUgY29kZSBob3Jy aWZpY2FsbHkuCisJICovCisJLyogRG9uJ3Qgd2UgbmVlZCB0byBkbyB0aGlzIG9uIGFsbCBDUFVz PyovCisJaWYgKHJlc2VydmVfbGFwaWNfbm1pKCkgPCAwKSB7CisJCWZyZWVfbXNycygpOworCQly ZXR1cm4gLUVCVVNZOworCX0KKwkvKiBXZSBuZWVkIHRvIHNlcmlhbGl6ZSBzYXZlIGFuZCBzZXR1 cCBmb3IgSFQgYmVjYXVzZSB0aGUgc3Vic2V0CisJICogb2YgbXNycyBhcmUgZGlzdGluY3QgZm9y IHNhdmUgYW5kIHNldHVwIG9wZXJhdGlvbnMKKwkgKi8KKwlvbl9lYWNoX2NwdShubWlfc2F2ZV9y ZWdpc3RlcnMsIE5VTEwsIDAsIDEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBubWlf Y3B1X3NldHVwKHZvaWQgKiBkdW1teSkKK3sKKwlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgp OworCXN0cnVjdCBvcF9tc3JzICogbXNycyA9ICZjcHVfbXNyc1tjcHVdOworCW1vZGVsLT5zZXR1 cF9jdHJzKG1zcnMpOworfQorCitpbnQgbm1pX3NldHVwX2V2ZW50cyh2b2lkKQoreworCW9uX2Vh Y2hfY3B1KG5taV9jcHVfc2V0dXAsIE5VTEwsIDAsIDEpOworCXJldHVybiAwOworfQorCitpbnQg bm1pX2VuYWJsZV92aXJxKCkKK3sKKwlzZXRfbm1pX2NhbGxiYWNrKG5taV9jYWxsYmFjayk7CisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG5taV9jcHVfc3RhcnQodm9pZCAqIGR1bW15KQor eworCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJc3RydWN0IG9wX21zcnMgY29uc3Qg KiBtc3JzID0gJmNwdV9tc3JzW2NwdV07CisJc2F2ZWRfbHZ0cGNbY3B1XSA9IGFwaWNfcmVhZChB UElDX0xWVFBDKTsKKwlhcGljX3dyaXRlKEFQSUNfTFZUUEMsIEFQSUNfRE1fTk1JKTsKKwltb2Rl bC0+c3RhcnQobXNycyk7Cit9CisKK2ludCBubWlfc3RhcnQodm9pZCkKK3sKKwlvbl9lYWNoX2Nw dShubWlfY3B1X3N0YXJ0LCBOVUxMLCAwLCAxKTsKKwlubWlfcHJvZmlsaW5nX3N0YXJ0ZWQgPSAx OworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBubWlfY3B1X3N0b3Aodm9pZCAqIGR1bW15 KQoreworCXVuc2lnbmVkIGludCB2OworCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJ c3RydWN0IG9wX21zcnMgY29uc3QgKiBtc3JzID0gJmNwdV9tc3JzW2NwdV07CisJbW9kZWwtPnN0 b3AobXNycyk7CisKKwkvKiByZXN0b3JpbmcgQVBJQ19MVlRQQyBjYW4gdHJpZ2dlciBhbiBhcGlj IGVycm9yIGJlY2F1c2UgdGhlIGRlbGl2ZXJ5CisJICogbW9kZSBhbmQgdmVjdG9yIG5yIGNvbWJp bmF0aW9uIGNhbiBiZSBpbGxlZ2FsLiBUaGF0J3MgYnkgZGVzaWduOiBvbgorCSAqIHBvd2VyIG9u IGFwaWMgbHZ0IGNvbnRhaW4gYSB6ZXJvIHZlY3RvciBuciB3aGljaCBhcmUgbGVnYWwgb25seSBm b3IKKwkgKiBOTUkgZGVsaXZlcnkgbW9kZS4gU28gaW5oaWJpdCBhcGljIGVyciBiZWZvcmUgcmVz dG9yaW5nIGx2dHBjCisJICovCisJaWYgKCEoYXBpY19yZWFkKEFQSUNfTFZUUEMpICYgQVBJQ19E TV9OTUkpCisJCXx8IChhcGljX3JlYWQoQVBJQ19MVlRQQykgJiBBUElDX0xWVF9NQVNLRUQpKSB7 CisJCXByaW50aygibm1pX3N0b3A6IEFQSUMgbm90IGdvb2QgJXBcbiIsIGFwaWNfcmVhZChBUElD X0xWVFBDKSk7CisJCW1kZWxheSg1MDAwKTsKKwl9CisJdiA9IGFwaWNfcmVhZChBUElDX0xWVEVS Uik7CisJYXBpY193cml0ZShBUElDX0xWVEVSUiwgdiB8IEFQSUNfTFZUX01BU0tFRCk7CisJYXBp Y193cml0ZShBUElDX0xWVFBDLCBzYXZlZF9sdnRwY1tjcHVdKTsKKwlhcGljX3dyaXRlKEFQSUNf TFZURVJSLCB2KTsKK30KKyAKK3ZvaWQgbm1pX3N0b3Aodm9pZCkKK3sKKwlubWlfcHJvZmlsaW5n X3N0YXJ0ZWQgPSAwOworCW9uX2VhY2hfY3B1KG5taV9jcHVfc3RvcCwgTlVMTCwgMCwgMSk7CisJ YWN0aXZlX3ZpcnFfY291bnQgPSAwOworCXBhc3NpdmVfdmlycV9jb3VudCA9IDA7CisJb3RoZXJf dmlycV9jb3VudCA9IDA7CisJeGVuX2NvdW50ID0gMDsKKwlkb21fY291bnQgPSAwOworfQorCitl eHRlcm4gdW5zaWduZWQgaW50IHJlYWRfY3RyKHN0cnVjdCBvcF9tc3JzIGNvbnN0ICogY29uc3Qg bXNycywgaW50IGN0cik7CisKK3ZvaWQgbm1pX3Nhbml0eV9jaGVjayhzdHJ1Y3QgeGVuX3JlZ3Mg KnJlZ3MsIGludCBjcHUpCit7CisJaW50IGk7CisJaW50IG1hc2tlZCA9IDA7CisKKwkvKiBXZSBt YXkgaGF2ZSBtaXNzZWQgc29tZSBOTUkgaW50ZXJydXB0cyBpZiB3ZSB3ZXJlIGFscmVhZHkgCisJ CWluIGFuIE5NSSBjb250ZXh0IGF0IHRoYXQgdGltZS4gSWYgdGhpcyBoYXBwZW5zLCB0aGVuIAor CQl0aGUgY291bnRlcnMgYXJlIG5vdCByZXNldCBhbmQgaW4gdGhlIGNhc2Ugb2YgUDQsIHRoZSAK KwkJQVBJQyBMVlQgZGlzYWJsZSBtYXNrIGlzIHNldC4gSW4gYm90aCBjYXNlcyB3ZSBlbmQgdXAg CisJCWxvc2luZyBzYW1wbGVzLiBPbiBQNCwgdGhpcyBjb25kaXRpb24gY2FuIGJlIGRldGVjdGVk IAorCQlieSBjaGVja2luZyB0aGUgQVBJQyBMVlQgbWFzay4gQnV0IGluIFA2LCB3ZSBuZWVkIHRv IAorCQlleGFtaW5lIHRoZSBjb3VudGVycyBmb3Igb3ZlcmZsb3cuIFNvLCBldmVyeSB0aW1lciAK KwkJaW50ZXJydXB0LCB3ZSBjaGVjayB0aGF0IGV2ZXJ5dGhpbmcgaXMgT0sgKi8KKworCWlmIChh cGljX3JlYWQoQVBJQ19MVlRQQykgJiBBUElDX0xWVF9NQVNLRUQpCisJCW1hc2tlZCA9IDE7CisK KwlubWlfY2FsbGJhY2socmVncywgY3B1KTsKKworCWlmIChvdmYgJiYgbWFza2VkKSB7CisJCWlm IChpc19hY3RpdmUoY3VycmVudCkpCisJCQljdXJyZW50LT5zaGFyZWRfaW5mby0+bm1pX3Jlc3Rh cnRzKys7CisJCWVsc2UgaWYgKGlzX3Bhc3NpdmUoY3VycmVudCkpCisJCQlwcmltYXJ5X3Byb2Zp bGVyLT5zaGFyZWRfaW5mby0+bm1pX3Jlc3RhcnRzKys7CisJfQorCisJLyppZiAoamlmZmllcyAl MTAwMCA9PSAwKSB7CQorCQlwcmludGsoImNwdSAlZDogc2FtcGxlIGNvdW50ICVkICVkICVkIGF0 ICV1XG4iLCBjcHUsIGFjdGl2ZV92aXJxX2NvdW50LCBwYXNzaXZlX3ZpcnFfY291bnQsIG90aGVy X3ZpcnFfY291bnQsIGppZmZpZXMpOworCQlwcmludGsoIm90aGVyIHRhc2sgaWQgJWRcbiIsIG90 aGVyX2lkKTsKKwkJcHJpbnRrKCIlZCBpbiB4ZW4sICVkIGluIGRvbWFpblxuIiwgeGVuX2NvdW50 LCBkb21fY291bnQpOworCQlwcmludGsoImNvdW50ZXJzICVwICVwXG4iLCByZWFkX2N0cigmY3B1 X21zcnNbY3B1XSwgMCksIHJlYWRfY3RyKCZjcHVfbXNyc1tjcHVdLCAxKSk7CisJfSovCisJCisK Kwlmb3IgKGkgPSAwOyBpIDwgYWRvbWFpbnM7IGkrKykKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2Jp dChpLCAmdmlycV9vdmZfcGVuZGluZ1swXSkpIHsKKwkJCXNlbmRfZ3Vlc3RfdmlycShhZG9tYWlu X3B0cnNbaV0sIFZJUlFfUE1DX09WRik7CisJCX0KK30KKwordm9pZCBubWlfZGlzYWJsZV92aXJx KHZvaWQpCit7CisJdW5zZXRfbm1pX2NhbGxiYWNrKCk7Cit9IAorCitzdGF0aWMgdm9pZCBubWlf cmVzdG9yZV9yZWdpc3RlcnMoc3RydWN0IG9wX21zcnMgKiBtc3JzKQoreworCXVuc2lnbmVkIGlu dCBjb25zdCBucl9jdHJzID0gbW9kZWwtPm51bV9jb3VudGVyczsKKwl1bnNpZ25lZCBpbnQgY29u c3QgbnJfY3RybHMgPSBtb2RlbC0+bnVtX2NvbnRyb2xzOyAKKwlzdHJ1Y3Qgb3BfbXNyICogY291 bnRlcnMgPSBtc3JzLT5jb3VudGVyczsKKwlzdHJ1Y3Qgb3BfbXNyICogY29udHJvbHMgPSBtc3Jz LT5jb250cm9sczsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBucl9jdHJs czsgKytpKSB7CisJCXdybXNyKGNvbnRyb2xzW2ldLmFkZHIsCisJCQljb250cm9sc1tpXS5zYXZl ZC5sb3csCisJCQljb250cm9sc1tpXS5zYXZlZC5oaWdoKTsKKwl9CisgCisJZm9yIChpID0gMDsg aSA8IG5yX2N0cnM7ICsraSkgeworCQl3cm1zcihjb3VudGVyc1tpXS5hZGRyLAorCQkJY291bnRl cnNbaV0uc2F2ZWQubG93LAorCQkJY291bnRlcnNbaV0uc2F2ZWQuaGlnaCk7CisJfQorfQorIAor c3RhdGljIHZvaWQgbm1pX2NwdV9zaHV0ZG93bih2b2lkICogZHVtbXkpCit7CisJaW50IGNwdSA9 IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlzdHJ1Y3Qgb3BfbXNycyAqIG1zcnMgPSAmY3B1X21zcnNb Y3B1XTsKKwlubWlfcmVzdG9yZV9yZWdpc3RlcnMobXNycyk7Cit9CisgCit2b2lkIG5taV9yZWxl YXNlX2NvdW50ZXJzKHZvaWQpCit7CisJb25fZWFjaF9jcHUobm1pX2NwdV9zaHV0ZG93biwgTlVM TCwgMCwgMSk7CisJcmVsZWFzZV9sYXBpY19ubWkoKTsKKwlmcmVlX21zcnMoKTsKK30KKworc3Ry dWN0IG9wX2NvdW50ZXJfY29uZmlnIGNvdW50ZXJfY29uZmlnW09QX01BWF9DT1VOVEVSXTsKKwor c3RhdGljIGludCBfX2luaXQgcDRfaW5pdCh2b2lkKQoreworCV9fdTggY3B1X21vZGVsID0gY3Vy cmVudF9jcHVfZGF0YS54ODZfbW9kZWw7CisKKwlpZiAoY3B1X21vZGVsID4gMykKKwkJcmV0dXJu IDA7CisKKyNpZm5kZWYgQ09ORklHX1NNUAorCW1vZGVsID0gJm9wX3A0X3NwZWM7CisJcmV0dXJu IDE7CisjZWxzZQorCS8vc3dpdGNoIChzbXBfbnVtX3NpYmxpbmdzKSB7CisJaWYgKGNwdV9oYXNf aHQpIAorCXsKKwkgIG1vZGVsID0gJm9wX3A0X2h0Ml9zcGVjOworCSAgcmV0dXJuIDE7CisJfQor CWVsc2UKKwl7CisJICBtb2RlbCA9ICZvcF9wNF9zcGVjOworCSAgcmV0dXJuIDE7CisJfQorI2Vu ZGlmCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBfX2luaXQgcHByb19pbml0KHZvaWQp Cit7CisJX191OCBjcHVfbW9kZWwgPSBjdXJyZW50X2NwdV9kYXRhLng4Nl9tb2RlbDsKKworCWlm IChjcHVfbW9kZWwgPiAweGQpCisJCXJldHVybiAwOworCisJbW9kZWwgPSAmb3BfcHByb19zcGVj OworCXJldHVybiAxOworfQorCitpbnQgbm1pX2luaXQoaW50ICpudW1fZXZlbnRzLCBpbnQgKmlz X3ByaW1hcnkpCit7CisJX191OCB2ZW5kb3IgPSBjdXJyZW50X2NwdV9kYXRhLng4Nl92ZW5kb3I7 CisJX191OCBmYW1pbHkgPSBjdXJyZW50X2NwdV9kYXRhLng4NjsKKwlpbnQgcHJpbSA9IDA7Cisg CisJaWYgKCFjcHVfaGFzX2FwaWMpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKHByaW1hcnlf cHJvZmlsZXIgPT0gTlVMTCkgeworCQlwcmltYXJ5X3Byb2ZpbGVyID0gY3VycmVudDsKKwkJcHJp bSA9IDE7CisJfQorCisJaWYgKHByaW1hcnlfcHJvZmlsZXIgIT0gY3VycmVudCkKKwkJZ290byBv dXQ7CisKKwlzd2l0Y2ggKHZlbmRvcikgeworCQljYXNlIFg4Nl9WRU5ET1JfSU5URUw6CisJCQlz d2l0Y2ggKGZhbWlseSkgeworCQkJCS8qIFBlbnRpdW0gSVYgKi8KKwkJCQljYXNlIDB4ZjoKKwkJ CQkJaWYgKCFwNF9pbml0KCkpCisJCQkJCQlyZXR1cm4gLUVOT0RFVjsKKwkJCQkJYnJlYWs7CisJ CQkJLyogQSBQNi1jbGFzcyBwcm9jZXNzb3IgKi8KKwkJCQljYXNlIDY6CisJCQkJCWlmICghcHBy b19pbml0KCkpCisJCQkJCQlyZXR1cm4gLUVOT0RFVjsKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVs dDoKKwkJCQkJcmV0dXJuIC1FTk9ERVY7CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJ CXJldHVybiAtRU5PREVWOworCX0KK291dDoKKwlpZiAoY29weV90b191c2VyKCh2b2lkICopbnVt X2V2ZW50cywgKHZvaWQgKikmbW9kZWwtPm51bV9jb3VudGVycywgc2l6ZW9mKGludCkpKQorCQly ZXR1cm4gLUVGQVVMVDsKKwlpZiAoY29weV90b191c2VyKCh2b2lkICopaXNfcHJpbWFyeSwgKHZv aWQgKikmcHJpbSwgc2l6ZW9mKGludCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldHVybiAw OworfQorCmRpZmYgLVBOYXVyIHhlbi0yLjAuNS94ZW4vYXJjaC94ODYvb3Byb2ZpbGUvb3BfY291 bnRlci5oIHhlbi0yLjAuNS1wcm9mL3hlbi9hcmNoL3g4Ni9vcHJvZmlsZS9vcF9jb3VudGVyLmgK LS0tIHhlbi0yLjAuNS94ZW4vYXJjaC94ODYvb3Byb2ZpbGUvb3BfY291bnRlci5oCTE5NjktMTIt MzEgMTY6MDA6MDAuMDAwMDAwMDAwIC0wODAwCisrKyB4ZW4tMi4wLjUtcHJvZi94ZW4vYXJjaC94 ODYvb3Byb2ZpbGUvb3BfY291bnRlci5oCTIwMDUtMDQtMDYgMDk6Mjc6MTMuMDAwMDAwMDAwIC0w NzAwCkBAIC0wLDAgKzEsMzMgQEAKKy8qKgorICogQGZpbGUgb3BfY291bnRlci5oCisgKgorICog QHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQg dGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgSm9obiBMZXZvbgorICoKKyAqIE1vZGlm aWVkIGJ5IEFyYXZpbmQgTWVub24gZm9yIFhlbgorICogVGhlc2UgbW9kaWZpY2F0aW9ucyBhcmU6 CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgSGV3bGV0dC1QYWNrYXJkIENvLgorICovCisgCisjaWZu ZGVmIE9QX0NPVU5URVJfSAorI2RlZmluZSBPUF9DT1VOVEVSX0gKKyAKKyNkZWZpbmUgT1BfTUFY X0NPVU5URVIgOAorIAorLyogUGVyLXBlcmZjdHIgY29uZmlndXJhdGlvbiBhcyBzZXQgdmlhCisg KiBvcHJvZmlsZWZzLgorICovCitzdHJ1Y3Qgb3BfY291bnRlcl9jb25maWcgeworICAgICAgICB1 bnNpZ25lZCBsb25nIGNvdW50OworICAgICAgICB1bnNpZ25lZCBsb25nIGVuYWJsZWQ7CisgICAg ICAgIHVuc2lnbmVkIGxvbmcgZXZlbnQ7CisgICAgICAgIHVuc2lnbmVkIGxvbmcga2VybmVsOwor ICAgICAgICB1bnNpZ25lZCBsb25nIHVzZXI7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgdW5pdF9t YXNrOworfTsKKworZXh0ZXJuIHN0cnVjdCBvcF9jb3VudGVyX2NvbmZpZyBjb3VudGVyX2NvbmZp Z1tdOworCisjZW5kaWYgLyogT1BfQ09VTlRFUl9IICovCmRpZmYgLVBOYXVyIHhlbi0yLjAuNS94 ZW4vYXJjaC94ODYvb3Byb2ZpbGUvb3BfbW9kZWxfcDQuYyB4ZW4tMi4wLjUtcHJvZi94ZW4vYXJj aC94ODYvb3Byb2ZpbGUvb3BfbW9kZWxfcDQuYwotLS0geGVuLTIuMC41L3hlbi9hcmNoL3g4Ni9v cHJvZmlsZS9vcF9tb2RlbF9wNC5jCTE5NjktMTItMzEgMTY6MDA6MDAuMDAwMDAwMDAwIC0wODAw CisrKyB4ZW4tMi4wLjUtcHJvZi94ZW4vYXJjaC94ODYvb3Byb2ZpbGUvb3BfbW9kZWxfcDQuYwky MDA1LTA0LTA3IDA5OjA4OjIwLjAwMDAwMDAwMCAtMDcwMApAQCAtMCwwICsxLDc0NCBAQAorLyoq CisgKiBAZmlsZSBvcF9tb2RlbF9wNC5jCisgKiBQNCBtb2RlbC1zcGVjaWZpYyBNU1Igb3BlcmF0 aW9ucworICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycworICog QHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIEdyYXlkb24gSG9h cmUKKyAqCisgKiBNb2RpZmllZCBieSBBcmF2aW5kIE1lbm9uIGZvciBYZW4KKyAqIFRoZXNlIG1v ZGlmaWNhdGlvbnMgYXJlOgorICogQ29weXJpZ2h0IChDKSAyMDA1IEhld2xldHQtUGFja2FyZCBD by4KKyAqLworCisjaW5jbHVkZSA8eGVuL3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21zci5oPgor I2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9hcGljLmg+CisjaW5jbHVkZSA8YXNt L3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPHhlbi9zY2hlZC5oPgorCisjaW5jbHVkZSAib3BfeDg2 X21vZGVsLmgiCisjaW5jbHVkZSAib3BfY291bnRlci5oIgorCisjZGVmaW5lIE5VTV9FVkVOVFMg MzkKKworI2RlZmluZSBOVU1fQ09VTlRFUlNfTk9OX0hUIDgKKyNkZWZpbmUgTlVNX0VTQ1JTX05P Tl9IVCA0NQorI2RlZmluZSBOVU1fQ0NDUlNfTk9OX0hUIDE4CisjZGVmaW5lIE5VTV9DT05UUk9M U19OT05fSFQgKE5VTV9FU0NSU19OT05fSFQgKyBOVU1fQ0NDUlNfTk9OX0hUKQorCisjZGVmaW5l IE5VTV9DT1VOVEVSU19IVDIgNAorI2RlZmluZSBOVU1fRVNDUlNfSFQyIDIzCisjZGVmaW5lIE5V TV9DQ0NSU19IVDIgOQorI2RlZmluZSBOVU1fQ09OVFJPTFNfSFQyIChOVU1fRVNDUlNfSFQyICsg TlVNX0NDQ1JTX0hUMikKKworc3RhdGljIHVuc2lnbmVkIGludCBudW1fY291bnRlcnMgPSBOVU1f Q09VTlRFUlNfTk9OX0hUOworCisKKy8qIHRoaXMgaGFzIHRvIGJlIGNoZWNrZWQgZHluYW1pY2Fs bHkgc2luY2UgdGhlCisgICBoeXBlci10aHJlYWRlZG5lc3Mgb2YgYSBjaGlwIGlzIGRpc2NvdmVy ZWQgYXQKKyAgIGtlcm5lbCBib290LXRpbWUuICovCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0dXBf bnVtX2NvdW50ZXJzKHZvaWQpCit7CisjaWZkZWYgQ09ORklHX1NNUAorCWlmIChjcHVfaGFzX2h0 KQorCQludW1fY291bnRlcnMgPSBOVU1fQ09VTlRFUlNfSFQyOworI2VuZGlmCit9CisKK3N0YXRp YyBpbnQgaW5saW5lIGFkZHJfaW5jcmVtZW50KHZvaWQpCit7CisjaWZkZWYgQ09ORklHX1NNUAor CXJldHVybiBjcHVfaGFzX2h0ID8gMiA6IDE7CisjZWxzZQorCXJldHVybiAxOworI2VuZGlmCit9 CisKKworLyogdGFibGVzIHRvIHNpbXVsYXRlIHNpbXBsaWZpZWQgaGFyZHdhcmUgdmlldyBvZiBw NCByZWdpc3RlcnMgKi8KK3N0cnVjdCBwNF9jb3VudGVyX2JpbmRpbmcgeworCWludCB2aXJ0X2Nv dW50ZXI7CisJaW50IGNvdW50ZXJfYWRkcmVzczsKKwlpbnQgY2Njcl9hZGRyZXNzOworfTsKKwor c3RydWN0IHA0X2V2ZW50X2JpbmRpbmcgeworCWludCBlc2NyX3NlbGVjdDsgIC8qIHZhbHVlIHRv IHB1dCBpbiBDQ0NSICovCisJaW50IGV2ZW50X3NlbGVjdDsgLyogdmFsdWUgdG8gcHV0IGluIEVT Q1IgKi8KKwlzdHJ1Y3QgeworCQlpbnQgdmlydF9jb3VudGVyOyAvKiBmb3IgdGhpcyBjb3VudGVy Li4uICovCisJCWludCBlc2NyX2FkZHJlc3M7IC8qIHVzZSB0aGlzIEVTQ1IgICAgICAgKi8KKwl9 IGJpbmRpbmdzWzJdOworfTsKKworLyogbmI6IHRoZXNlIENUUl8qIGRlZmluZXMgYXJlIGEgZHVw bGljYXRlIG9mIGRlZmluZXMgaW4KKyAgIGV2ZW50L2kzODYucDQqZXZlbnRzLiAqLworCisKKyNk ZWZpbmUgQ1RSX0JQVV8wICAgICAgKDEgPDwgMCkKKyNkZWZpbmUgQ1RSX01TXzAgICAgICAgKDEg PDwgMSkKKyNkZWZpbmUgQ1RSX0ZMQU1FXzAgICAgKDEgPDwgMikKKyNkZWZpbmUgQ1RSX0lRXzQg ICAgICAgKDEgPDwgMykKKyNkZWZpbmUgQ1RSX0JQVV8yICAgICAgKDEgPDwgNCkKKyNkZWZpbmUg Q1RSX01TXzIgICAgICAgKDEgPDwgNSkKKyNkZWZpbmUgQ1RSX0ZMQU1FXzIgICAgKDEgPDwgNikK KyNkZWZpbmUgQ1RSX0lRXzUgICAgICAgKDEgPDwgNykKKworc3RhdGljIHN0cnVjdCBwNF9jb3Vu dGVyX2JpbmRpbmcgcDRfY291bnRlcnMgW05VTV9DT1VOVEVSU19OT05fSFRdID0geworCXsgQ1RS X0JQVV8wLCAgIE1TUl9QNF9CUFVfUEVSRkNUUjAsICAgTVNSX1A0X0JQVV9DQ0NSMCB9LAorCXsg Q1RSX01TXzAsICAgIE1TUl9QNF9NU19QRVJGQ1RSMCwgICAgTVNSX1A0X01TX0NDQ1IwIH0sCisJ eyBDVFJfRkxBTUVfMCwgTVNSX1A0X0ZMQU1FX1BFUkZDVFIwLCBNU1JfUDRfRkxBTUVfQ0NDUjAg fSwKKwl7IENUUl9JUV80LCAgICBNU1JfUDRfSVFfUEVSRkNUUjQsICAgIE1TUl9QNF9JUV9DQ0NS NCB9LAorCXsgQ1RSX0JQVV8yLCAgIE1TUl9QNF9CUFVfUEVSRkNUUjIsICAgTVNSX1A0X0JQVV9D Q0NSMiB9LAorCXsgQ1RSX01TXzIsICAgIE1TUl9QNF9NU19QRVJGQ1RSMiwgICAgTVNSX1A0X01T X0NDQ1IyIH0sCisJeyBDVFJfRkxBTUVfMiwgTVNSX1A0X0ZMQU1FX1BFUkZDVFIyLCBNU1JfUDRf RkxBTUVfQ0NDUjIgfSwKKwl7IENUUl9JUV81LCAgICBNU1JfUDRfSVFfUEVSRkNUUjUsICAgIE1T Ul9QNF9JUV9DQ0NSNSB9Cit9OworCisjZGVmaW5lIE5VTV9VTlVTRURfQ0NDUlMJTlVNX0NDQ1JT X05PTl9IVCAtIE5VTV9DT1VOVEVSU19OT05fSFQKKworLyogQWxsIGNjY3Igd2UgZG9uJ3QgdXNl LiAqLworc3RhdGljIGludCBwNF91bnVzZWRfY2NjcltOVU1fVU5VU0VEX0NDQ1JTXSA9IHsKKwlN U1JfUDRfQlBVX0NDQ1IxLAlNU1JfUDRfQlBVX0NDQ1IzLAorCU1TUl9QNF9NU19DQ0NSMSwJTVNS X1A0X01TX0NDQ1IzLAorCU1TUl9QNF9GTEFNRV9DQ0NSMSwJTVNSX1A0X0ZMQU1FX0NDQ1IzLAor CU1TUl9QNF9JUV9DQ0NSMCwJTVNSX1A0X0lRX0NDQ1IxLAorCU1TUl9QNF9JUV9DQ0NSMiwJTVNS X1A0X0lRX0NDQ1IzCit9OworCisvKiBwNCBldmVudCBjb2RlcyBpbiBsaWJvcC9vcF9ldmVudC5o IGFyZSBpbmRpY2VzIGludG8gdGhpcyB0YWJsZS4gKi8KKworc3RhdGljIHN0cnVjdCBwNF9ldmVu dF9iaW5kaW5nIHA0X2V2ZW50c1tOVU1fRVZFTlRTXSA9IHsKKwkKKwl7IC8qIEJSQU5DSF9SRVRJ UkVEICovCisJCTB4MDUsIDB4MDYsIAorCQl7IHtDVFJfSVFfNCwgTVNSX1A0X0NSVV9FU0NSMn0s CisJCSAge0NUUl9JUV81LCBNU1JfUDRfQ1JVX0VTQ1IzfSB9CisJfSwKKwkKKwl7IC8qIE1JU1BS RURfQlJBTkNIX1JFVElSRUQgKi8KKwkJMHgwNCwgMHgwMywgCisJCXsgeyBDVFJfSVFfNCwgTVNS X1A0X0NSVV9FU0NSMH0sCisJCSAgeyBDVFJfSVFfNSwgTVNSX1A0X0NSVV9FU0NSMX0gfQorCX0s CisJCisJeyAvKiBUQ19ERUxJVkVSX01PREUgKi8KKwkJMHgwMSwgMHgwMSwKKwkJeyB7IENUUl9N U18wLCBNU1JfUDRfVENfRVNDUjB9LCAgCisJCSAgeyBDVFJfTVNfMiwgTVNSX1A0X1RDX0VTQ1Ix fSB9CisJfSwKKwkKKwl7IC8qIEJQVV9GRVRDSF9SRVFVRVNUICovCisJCTB4MDAsIDB4MDMsIAor CQl7IHsgQ1RSX0JQVV8wLCBNU1JfUDRfQlBVX0VTQ1IwfSwKKwkJICB7IENUUl9CUFVfMiwgTVNS X1A0X0JQVV9FU0NSMX0gfQorCX0sCisKKwl7IC8qIElUTEJfUkVGRVJFTkNFICovCisJCTB4MDMs IDB4MTgsCisJCXsgeyBDVFJfQlBVXzAsIE1TUl9QNF9JVExCX0VTQ1IwfSwKKwkJICB7IENUUl9C UFVfMiwgTVNSX1A0X0lUTEJfRVNDUjF9IH0KKwl9LAorCisJeyAvKiBNRU1PUllfQ0FOQ0VMICov CisJCTB4MDUsIDB4MDIsCisJCXsgeyBDVFJfRkxBTUVfMCwgTVNSX1A0X0RBQ19FU0NSMH0sCisJ CSAgeyBDVFJfRkxBTUVfMiwgTVNSX1A0X0RBQ19FU0NSMX0gfQorCX0sCisKKwl7IC8qIE1FTU9S WV9DT01QTEVURSAqLworCQkweDAyLCAweDA4LAorCQl7IHsgQ1RSX0ZMQU1FXzAsIE1TUl9QNF9T QUFUX0VTQ1IwfSwKKwkJICB7IENUUl9GTEFNRV8yLCBNU1JfUDRfU0FBVF9FU0NSMX0gfQorCX0s CisKKwl7IC8qIExPQURfUE9SVF9SRVBMQVkgKi8KKwkJMHgwMiwgMHgwNCwgCisJCXsgeyBDVFJf RkxBTUVfMCwgTVNSX1A0X1NBQVRfRVNDUjB9LAorCQkgIHsgQ1RSX0ZMQU1FXzIsIE1TUl9QNF9T QUFUX0VTQ1IxfSB9CisJfSwKKworCXsgLyogU1RPUkVfUE9SVF9SRVBMQVkgKi8KKwkJMHgwMiwg MHgwNSwKKwkJeyB7IENUUl9GTEFNRV8wLCBNU1JfUDRfU0FBVF9FU0NSMH0sCisJCSAgeyBDVFJf RkxBTUVfMiwgTVNSX1A0X1NBQVRfRVNDUjF9IH0KKwl9LAorCisJeyAvKiBNT0JfTE9BRF9SRVBM QVkgKi8KKwkJMHgwMiwgMHgwMywKKwkJeyB7IENUUl9CUFVfMCwgTVNSX1A0X01PQl9FU0NSMH0s CisJCSAgeyBDVFJfQlBVXzIsIE1TUl9QNF9NT0JfRVNDUjF9IH0KKwl9LAorCisJeyAvKiBQQUdF X1dBTEtfVFlQRSAqLworCQkweDA0LCAweDAxLAorCQl7IHsgQ1RSX0JQVV8wLCBNU1JfUDRfUE1I X0VTQ1IwfSwKKwkJICB7IENUUl9CUFVfMiwgTVNSX1A0X1BNSF9FU0NSMX0gfQorCX0sCisKKwl7 IC8qIEJTUV9DQUNIRV9SRUZFUkVOQ0UgKi8KKwkJMHgwNywgMHgwYywgCisJCXsgeyBDVFJfQlBV XzAsIE1TUl9QNF9CU1VfRVNDUjB9LAorCQkgIHsgQ1RSX0JQVV8yLCBNU1JfUDRfQlNVX0VTQ1Ix fSB9CisJfSwKKworCXsgLyogSU9RX0FMTE9DQVRJT04gKi8KKwkJMHgwNiwgMHgwMywgCisJCXsg eyBDVFJfQlBVXzAsIE1TUl9QNF9GU0JfRVNDUjB9LAorCQkgIHsgMCwgMCB9IH0KKwl9LAorCisJ eyAvKiBJT1FfQUNUSVZFX0VOVFJJRVMgKi8KKwkJMHgwNiwgMHgxYSwgCisJCXsgeyBDVFJfQlBV XzIsIE1TUl9QNF9GU0JfRVNDUjF9LAorCQkgIHsgMCwgMCB9IH0KKwl9LAorCisJeyAvKiBGU0Jf REFUQV9BQ1RJVklUWSAqLworCQkweDA2LCAweDE3LCAKKwkJeyB7IENUUl9CUFVfMCwgTVNSX1A0 X0ZTQl9FU0NSMH0sCisJCSAgeyBDVFJfQlBVXzIsIE1TUl9QNF9GU0JfRVNDUjF9IH0KKwl9LAor CisJeyAvKiBCU1FfQUxMT0NBVElPTiAqLworCQkweDA3LCAweDA1LCAKKwkJeyB7IENUUl9CUFVf MCwgTVNSX1A0X0JTVV9FU0NSMH0sCisJCSAgeyAwLCAwIH0gfQorCX0sCisKKwl7IC8qIEJTUV9B Q1RJVkVfRU5UUklFUyAqLworCQkweDA3LCAweDA2LAorCQl7IHsgQ1RSX0JQVV8yLCBNU1JfUDRf QlNVX0VTQ1IxIC8qIGd1ZXNzICovfSwgIAorCQkgIHsgMCwgMCB9IH0KKwl9LAorCisJeyAvKiBY ODdfQVNTSVNUICovCisJCTB4MDUsIDB4MDMsIAorCQl7IHsgQ1RSX0lRXzQsIE1TUl9QNF9DUlVf RVNDUjJ9LAorCQkgIHsgQ1RSX0lRXzUsIE1TUl9QNF9DUlVfRVNDUjN9IH0KKwl9LAorCisJeyAv KiBTU0VfSU5QVVRfQVNTSVNUICovCisJCTB4MDEsIDB4MzQsCisJCXsgeyBDVFJfRkxBTUVfMCwg TVNSX1A0X0ZJUk1fRVNDUjB9LAorCQkgIHsgQ1RSX0ZMQU1FXzIsIE1TUl9QNF9GSVJNX0VTQ1Ix fSB9CisJfSwKKyAgCisJeyAvKiBQQUNLRURfU1BfVU9QICovCisJCTB4MDEsIDB4MDgsIAorCQl7 IHsgQ1RSX0ZMQU1FXzAsIE1TUl9QNF9GSVJNX0VTQ1IwfSwKKwkJICB7IENUUl9GTEFNRV8yLCBN U1JfUDRfRklSTV9FU0NSMX0gfQorCX0sCisgIAorCXsgLyogUEFDS0VEX0RQX1VPUCAqLworCQkw eDAxLCAweDBjLCAKKwkJeyB7IENUUl9GTEFNRV8wLCBNU1JfUDRfRklSTV9FU0NSMH0sCisJCSAg eyBDVFJfRkxBTUVfMiwgTVNSX1A0X0ZJUk1fRVNDUjF9IH0KKwl9LAorCisJeyAvKiBTQ0FMQVJf U1BfVU9QICovCisJCTB4MDEsIDB4MGEsIAorCQl7IHsgQ1RSX0ZMQU1FXzAsIE1TUl9QNF9GSVJN X0VTQ1IwfSwKKwkJICB7IENUUl9GTEFNRV8yLCBNU1JfUDRfRklSTV9FU0NSMX0gfQorCX0sCisK Kwl7IC8qIFNDQUxBUl9EUF9VT1AgKi8KKwkJMHgwMSwgMHgwZSwKKwkJeyB7IENUUl9GTEFNRV8w LCBNU1JfUDRfRklSTV9FU0NSMH0sCisJCSAgeyBDVFJfRkxBTUVfMiwgTVNSX1A0X0ZJUk1fRVND UjF9IH0KKwl9LAorCisJeyAvKiA2NEJJVF9NTVhfVU9QICovCisJCTB4MDEsIDB4MDIsIAorCQl7 IHsgQ1RSX0ZMQU1FXzAsIE1TUl9QNF9GSVJNX0VTQ1IwfSwKKwkJICB7IENUUl9GTEFNRV8yLCBN U1JfUDRfRklSTV9FU0NSMX0gfQorCX0sCisgIAorCXsgLyogMTI4QklUX01NWF9VT1AgKi8KKwkJ MHgwMSwgMHgxYSwgCisJCXsgeyBDVFJfRkxBTUVfMCwgTVNSX1A0X0ZJUk1fRVNDUjB9LAorCQkg IHsgQ1RSX0ZMQU1FXzIsIE1TUl9QNF9GSVJNX0VTQ1IxfSB9CisJfSwKKworCXsgLyogWDg3X0ZQ X1VPUCAqLworCQkweDAxLCAweDA0LCAKKwkJeyB7IENUUl9GTEFNRV8wLCBNU1JfUDRfRklSTV9F U0NSMH0sCisJCSAgeyBDVFJfRkxBTUVfMiwgTVNSX1A0X0ZJUk1fRVNDUjF9IH0KKwl9LAorICAK Kwl7IC8qIFg4N19TSU1EX01PVkVTX1VPUCAqLworCQkweDAxLCAweDJlLCAKKwkJeyB7IENUUl9G TEFNRV8wLCBNU1JfUDRfRklSTV9FU0NSMH0sCisJCSAgeyBDVFJfRkxBTUVfMiwgTVNSX1A0X0ZJ Uk1fRVNDUjF9IH0KKwl9LAorICAKKwl7IC8qIE1BQ0hJTkVfQ0xFQVIgKi8KKwkJMHgwNSwgMHgw MiwgCisJCXsgeyBDVFJfSVFfNCwgTVNSX1A0X0NSVV9FU0NSMn0sCisJCSAgeyBDVFJfSVFfNSwg TVNSX1A0X0NSVV9FU0NSM30gfQorCX0sCisKKwl7IC8qIEdMT0JBTF9QT1dFUl9FVkVOVFMgKi8K KwkJMHgwNiwgMHgxMyAvKiBvbGRlciBtYW51YWwgc2F5cyAweDA1LCBuZXdlciAweDEzICovLAor CQl7IHsgQ1RSX0JQVV8wLCBNU1JfUDRfRlNCX0VTQ1IwfSwKKwkJICB7IENUUl9CUFVfMiwgTVNS X1A0X0ZTQl9FU0NSMX0gfQorCX0sCisgIAorCXsgLyogVENfTVNfWEZFUiAqLworCQkweDAwLCAw eDA1LCAKKwkJeyB7IENUUl9NU18wLCBNU1JfUDRfTVNfRVNDUjB9LAorCQkgIHsgQ1RSX01TXzIs IE1TUl9QNF9NU19FU0NSMX0gfQorCX0sCisKKwl7IC8qIFVPUF9RVUVVRV9XUklURVMgKi8KKwkJ MHgwMCwgMHgwOSwKKwkJeyB7IENUUl9NU18wLCBNU1JfUDRfTVNfRVNDUjB9LAorCQkgIHsgQ1RS X01TXzIsIE1TUl9QNF9NU19FU0NSMX0gfQorCX0sCisKKwl7IC8qIEZST05UX0VORF9FVkVOVCAq LworCQkweDA1LCAweDA4LAorCQl7IHsgQ1RSX0lRXzQsIE1TUl9QNF9DUlVfRVNDUjJ9LAorCQkg IHsgQ1RSX0lRXzUsIE1TUl9QNF9DUlVfRVNDUjN9IH0KKwl9LAorCisJeyAvKiBFWEVDVVRJT05f RVZFTlQgKi8KKwkJMHgwNSwgMHgwYywKKwkJeyB7IENUUl9JUV80LCBNU1JfUDRfQ1JVX0VTQ1Iy fSwKKwkJICB7IENUUl9JUV81LCBNU1JfUDRfQ1JVX0VTQ1IzfSB9CisJfSwKKworCXsgLyogUkVQ TEFZX0VWRU5UICovCisJCTB4MDUsIDB4MDksCisJCXsgeyBDVFJfSVFfNCwgTVNSX1A0X0NSVV9F U0NSMn0sCisJCSAgeyBDVFJfSVFfNSwgTVNSX1A0X0NSVV9FU0NSM30gfQorCX0sCisKKwl7IC8q IElOU1RSX1JFVElSRUQgKi8KKwkJMHgwNCwgMHgwMiwgCisJCXsgeyBDVFJfSVFfNCwgTVNSX1A0 X0NSVV9FU0NSMH0sCisJCSAgeyBDVFJfSVFfNSwgTVNSX1A0X0NSVV9FU0NSMX0gfQorCX0sCisK Kwl7IC8qIFVPUFNfUkVUSVJFRCAqLworCQkweDA0LCAweDAxLAorCQl7IHsgQ1RSX0lRXzQsIE1T Ul9QNF9DUlVfRVNDUjB9LAorCQkgIHsgQ1RSX0lRXzUsIE1TUl9QNF9DUlVfRVNDUjF9IH0KKwl9 LAorCisJeyAvKiBVT1BfVFlQRSAqLyAgICAKKwkJMHgwMiwgMHgwMiwgCisJCXsgeyBDVFJfSVFf NCwgTVNSX1A0X1JBVF9FU0NSMH0sCisJCSAgeyBDVFJfSVFfNSwgTVNSX1A0X1JBVF9FU0NSMX0g fQorCX0sCisKKwl7IC8qIFJFVElSRURfTUlTUFJFRF9CUkFOQ0hfVFlQRSAqLworCQkweDAyLCAw eDA1LCAKKwkJeyB7IENUUl9NU18wLCBNU1JfUDRfVEJQVV9FU0NSMH0sCisJCSAgeyBDVFJfTVNf MiwgTVNSX1A0X1RCUFVfRVNDUjF9IH0KKwl9LAorCisJeyAvKiBSRVRJUkVEX0JSQU5DSF9UWVBF ICovCisJCTB4MDIsIDB4MDQsCisJCXsgeyBDVFJfTVNfMCwgTVNSX1A0X1RCUFVfRVNDUjB9LAor CQkgIHsgQ1RSX01TXzIsIE1TUl9QNF9UQlBVX0VTQ1IxfSB9CisJfQorfTsKKworCisjZGVmaW5l IE1JU0NfUE1DX0VOQUJMRURfUCh4KSAoKHgpICYgMSA8PCA3KQorCisjZGVmaW5lIEVTQ1JfUkVT RVJWRURfQklUUyAweDgwMDAwMDAzCisjZGVmaW5lIEVTQ1JfQ0xFQVIoZXNjcikgKChlc2NyKSAm PSBFU0NSX1JFU0VSVkVEX0JJVFMpCisjZGVmaW5lIEVTQ1JfU0VUX1VTUl8wKGVzY3IsIHVzcikg KChlc2NyKSB8PSAoKCh1c3IpICYgMSkgPDwgMikpCisjZGVmaW5lIEVTQ1JfU0VUX09TXzAoZXNj ciwgb3MpICgoZXNjcikgfD0gKCgob3MpICYgMSkgPDwgMykpCisjZGVmaW5lIEVTQ1JfU0VUX1VT Ul8xKGVzY3IsIHVzcikgKChlc2NyKSB8PSAoKCh1c3IpICYgMSkpKQorI2RlZmluZSBFU0NSX1NF VF9PU18xKGVzY3IsIG9zKSAoKGVzY3IpIHw9ICgoKG9zKSAmIDEpIDw8IDEpKQorI2RlZmluZSBF U0NSX1NFVF9FVkVOVF9TRUxFQ1QoZXNjciwgc2VsKSAoKGVzY3IpIHw9ICgoKHNlbCkgJiAweDNm KSA8PCAyNSkpCisjZGVmaW5lIEVTQ1JfU0VUX0VWRU5UX01BU0soZXNjciwgbWFzaykgKChlc2Ny KSB8PSAoKChtYXNrKSAmIDB4ZmZmZikgPDwgOSkpCisjZGVmaW5lIEVTQ1JfUkVBRChlc2NyLGhp Z2gsZXYsaSkgZG8ge3JkbXNyKGV2LT5iaW5kaW5nc1soaSldLmVzY3JfYWRkcmVzcywgKGVzY3Ip LCAoaGlnaCkpO30gd2hpbGUgKDApCisjZGVmaW5lIEVTQ1JfV1JJVEUoZXNjcixoaWdoLGV2LGkp IGRvIHt3cm1zcihldi0+YmluZGluZ3NbKGkpXS5lc2NyX2FkZHJlc3MsIChlc2NyKSwgKGhpZ2gp KTt9IHdoaWxlICgwKQorCisjZGVmaW5lIENDQ1JfUkVTRVJWRURfQklUUyAweDM4MDMwRkZGCisj ZGVmaW5lIENDQ1JfQ0xFQVIoY2NjcikgKChjY2NyKSAmPSBDQ0NSX1JFU0VSVkVEX0JJVFMpCisj ZGVmaW5lIENDQ1JfU0VUX1JFUVVJUkVEX0JJVFMoY2NjcikgKChjY2NyKSB8PSAweDAwMDMwMDAw KQorI2RlZmluZSBDQ0NSX1NFVF9FU0NSX1NFTEVDVChjY2NyLCBzZWwpICgoY2NjcikgfD0gKCgo c2VsKSAmIDB4MDcpIDw8IDEzKSkKKyNkZWZpbmUgQ0NDUl9TRVRfUE1JX09WRl8wKGNjY3IpICgo Y2NjcikgfD0gKDE8PDI2KSkKKyNkZWZpbmUgQ0NDUl9TRVRfUE1JX09WRl8xKGNjY3IpICgoY2Nj cikgfD0gKDE8PDI3KSkKKyNkZWZpbmUgQ0NDUl9TRVRfRU5BQkxFKGNjY3IpICgoY2NjcikgfD0g KDE8PDEyKSkKKyNkZWZpbmUgQ0NDUl9TRVRfRElTQUJMRShjY2NyKSAoKGNjY3IpICY9IH4oMTw8 MTIpKQorI2RlZmluZSBDQ0NSX1JFQUQobG93LCBoaWdoLCBpKSBkbyB7cmRtc3IocDRfY291bnRl cnNbKGkpXS5jY2NyX2FkZHJlc3MsIChsb3cpLCAoaGlnaCkpO30gd2hpbGUgKDApCisjZGVmaW5l IENDQ1JfV1JJVEUobG93LCBoaWdoLCBpKSBkbyB7d3Jtc3IocDRfY291bnRlcnNbKGkpXS5jY2Ny X2FkZHJlc3MsIChsb3cpLCAoaGlnaCkpO30gd2hpbGUgKDApCisjZGVmaW5lIENDQ1JfT1ZGX1Ao Y2NjcikgKChjY2NyKSAmICgxVTw8MzEpKQorI2RlZmluZSBDQ0NSX0NMRUFSX09WRihjY2NyKSAo KGNjY3IpICY9ICh+KDFVPDwzMSkpKQorCisjZGVmaW5lIENUUl9SRUFEKGwsaCxpKSBkbyB7cmRt c3IocDRfY291bnRlcnNbKGkpXS5jb3VudGVyX2FkZHJlc3MsIChsKSwgKGgpKTt9IHdoaWxlICgw KQorI2RlZmluZSBDVFJfV1JJVEUobCxpKSBkbyB7d3Jtc3IocDRfY291bnRlcnNbKGkpXS5jb3Vu dGVyX2FkZHJlc3MsIC0odTMyKShsKSwgLTEpO30gd2hpbGUgKDApCisjZGVmaW5lIENUUl9PVkVS RkxPV19QKGN0cikgKCEoKGN0cikgJiAweDgwMDAwMDAwKSkKKworCisvKiB0aGlzIGFzc2lnbnMg YSAic3RhZ2dlciIgdG8gdGhlIGN1cnJlbnQgQ1BVLCB3aGljaCBpcyB1c2VkIHRocm91Z2hvdXQK KyAgIHRoZSBjb2RlIGluIHRoaXMgbW9kdWxlIGFzIGFuIGV4dHJhIGFycmF5IG9mZnNldCwgdG8g c2VsZWN0IHRoZSAiZXZlbiIKKyAgIG9yICJvZGQiIHBhcnQgb2YgYWxsIHRoZSBkaXZpZGVkIHJl c291cmNlcy4gKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X3N0YWdnZXIodm9pZCkKK3sKKyNp ZmRlZiBDT05GSUdfU01QCisJLyppbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCXJldHVy biAoY3B1ICE9IGZpcnN0X2NwdShjcHVfc2libGluZ19tYXBbY3B1XSkpOyovCisJLyogV2Ugd2Fu dCB0aGUgdHdvIGxvZ2ljYWwgY3B1cyBvZiBhIHBoeXNpY2FsIGNwdSB0byB1c2UKKwlkaXNqb2lu dCBzZXQgb2YgY291bnRlcnMuIFRoZSBmb2xsb3dpbmcgY29kZSBpcyB3cm9uZy4gKi8KKwlyZXR1 cm4gMDsKKyNlbmRpZgkKKwlyZXR1cm4gMDsKK30KKworCisvKiBmaW5hbGx5LCBtZWRpYXRlIGFj Y2VzcyB0byBhIHJlYWwgaGFyZHdhcmUgY291bnRlcgorICAgYnkgcGFzc2luZyBhICJ2aXJ0dWFs IiBjb3VudGVyIG51bWVyIHRvIHRoaXMgbWFjcm8sCisgICBhbG9uZyB3aXRoIHlvdXIgc3RhZ2dl ciBzZXR0aW5nLiAqLworI2RlZmluZSBWSVJUX0NUUihzdGFnZ2VyLCBpKSAoKGkpICsgKChudW1f Y291bnRlcnMpICogKHN0YWdnZXIpKSkKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgcmVzZXRfdmFs dWVbTlVNX0NPVU5URVJTX05PTl9IVF07CisKKworc3RhdGljIHZvaWQgcDRfZmlsbF9pbl9hZGRy ZXNzZXMoc3RydWN0IG9wX21zcnMgKiBjb25zdCBtc3JzKQoreworCXVuc2lnbmVkIGludCBpOyAK Kwl1bnNpZ25lZCBpbnQgYWRkciwgc3RhZzsKKworCXNldHVwX251bV9jb3VudGVycygpOworCXN0 YWcgPSBnZXRfc3RhZ2dlcigpOworCisJLyogdGhlIGNvdW50ZXIgcmVnaXN0ZXJzIHdlIHBheSBh dHRlbnRpb24gdG8gKi8KKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2NvdW50ZXJzOyArK2kpIHsKKwkJ bXNycy0+Y291bnRlcnNbaV0uYWRkciA9IAorCQkJcDRfY291bnRlcnNbVklSVF9DVFIoc3RhZywg aSldLmNvdW50ZXJfYWRkcmVzczsKKwl9CisKKwkvKiBGSVhNRTogYmFkIGZlZWxpbmcsIHdlIGRv bid0IHNhdmUgdGhlIDEwIGNvdW50ZXJzIHdlIGRvbid0IHVzZS4gKi8KKworCS8qIDE4IENDQ1Ig cmVnaXN0ZXJzICovCisJZm9yIChpID0gMCwgYWRkciA9IE1TUl9QNF9CUFVfQ0NDUjAgKyBzdGFn OworCSAgICAgYWRkciA8PSBNU1JfUDRfSVFfQ0NDUjU7ICsraSwgYWRkciArPSBhZGRyX2luY3Jl bWVudCgpKSB7CisJCW1zcnMtPmNvbnRyb2xzW2ldLmFkZHIgPSBhZGRyOworCX0KKwkKKwkvKiA0 MyBFU0NSIHJlZ2lzdGVycyBpbiB0aHJlZSBvciBmb3VyIGRpc2NvbnRpZ3VvdXMgZ3JvdXAgKi8K Kwlmb3IgKGFkZHIgPSBNU1JfUDRfQlNVX0VTQ1IwICsgc3RhZzsKKwkgICAgIGFkZHIgPCBNU1Jf UDRfSVFfRVNDUjA7ICsraSwgYWRkciArPSBhZGRyX2luY3JlbWVudCgpKSB7CisJCW1zcnMtPmNv bnRyb2xzW2ldLmFkZHIgPSBhZGRyOworCX0KKworCS8qIG5vIElRX0VTQ1IwLzEgb24gc29tZSBt b2RlbHMsIHdlIHNhdmUgYSBzZWNvbmRlIHRpbWUgQlNVX0VTQ1IwLzEKKwkgKiB0byBhdm9pZCBz cGVjaWFsIGNhc2UgaW4gbm1pX3tzYXZlfHJlc3RvcmV9X3JlZ2lzdGVycygpICovCisJaWYgKGJv b3RfY3B1X2RhdGEueDg2X21vZGVsID49IDB4MykgeworCQlmb3IgKGFkZHIgPSBNU1JfUDRfQlNV X0VTQ1IwICsgc3RhZzsKKwkJICAgICBhZGRyIDw9IE1TUl9QNF9CU1VfRVNDUjE7ICsraSwgYWRk ciArPSBhZGRyX2luY3JlbWVudCgpKSB7CisJCQltc3JzLT5jb250cm9sc1tpXS5hZGRyID0gYWRk cjsKKwkJfQorCX0gZWxzZSB7CisJCWZvciAoYWRkciA9IE1TUl9QNF9JUV9FU0NSMCArIHN0YWc7 CisJCSAgICAgYWRkciA8PSBNU1JfUDRfSVFfRVNDUjE7ICsraSwgYWRkciArPSBhZGRyX2luY3Jl bWVudCgpKSB7CisJCQltc3JzLT5jb250cm9sc1tpXS5hZGRyID0gYWRkcjsKKwkJfQorCX0KKwor CWZvciAoYWRkciA9IE1TUl9QNF9SQVRfRVNDUjAgKyBzdGFnOworCSAgICAgYWRkciA8PSBNU1Jf UDRfU1NVX0VTQ1IwOyArK2ksIGFkZHIgKz0gYWRkcl9pbmNyZW1lbnQoKSkgeworCQltc3JzLT5j b250cm9sc1tpXS5hZGRyID0gYWRkcjsKKwl9CisJCisJZm9yIChhZGRyID0gTVNSX1A0X01TX0VT Q1IwICsgc3RhZzsKKwkgICAgIGFkZHIgPD0gTVNSX1A0X1RDX0VTQ1IxOyArK2ksIGFkZHIgKz0g YWRkcl9pbmNyZW1lbnQoKSkgeyAKKwkJbXNycy0+Y29udHJvbHNbaV0uYWRkciA9IGFkZHI7CisJ fQorCQorCWZvciAoYWRkciA9IE1TUl9QNF9JWF9FU0NSMCArIHN0YWc7CisJICAgICBhZGRyIDw9 IE1TUl9QNF9DUlVfRVNDUjM7ICsraSwgYWRkciArPSBhZGRyX2luY3JlbWVudCgpKSB7IAorCQlt c3JzLT5jb250cm9sc1tpXS5hZGRyID0gYWRkcjsKKwl9CisKKwkvKiB0aGVyZSBhcmUgMiByZW1h aW5pbmcgbm9uLWNvbnRpZ3VvdXNseSBsb2NhdGVkIEVTQ1JzICovCisKKwlpZiAobnVtX2NvdW50 ZXJzID09IE5VTV9DT1VOVEVSU19OT05fSFQpIHsJCQorCQkvKiBzdGFuZGFyZCBub24tSFQgQ1BV cyBoYW5kbGUgYm90aCByZW1haW5pbmcgRVNDUnMqLworCQltc3JzLT5jb250cm9sc1tpKytdLmFk ZHIgPSBNU1JfUDRfQ1JVX0VTQ1I1OworCQltc3JzLT5jb250cm9sc1tpKytdLmFkZHIgPSBNU1Jf UDRfQ1JVX0VTQ1I0OworCisJfSBlbHNlIGlmIChzdGFnID09IDApIHsKKwkJLyogSFQgQ1BVcyBn aXZlIHRoZSBmaXJzdCByZW1haW5kZXIgdG8gdGhlIGV2ZW4gdGhyZWFkLCBhcworCQkgICB0aGUg MzJuZCBjb250cm9sIHJlZ2lzdGVyICovCisJCW1zcnMtPmNvbnRyb2xzW2krK10uYWRkciA9IE1T Ul9QNF9DUlVfRVNDUjQ7CisKKwl9IGVsc2UgeworCQkvKiBhbmQgdHdvIGNvcGllcyBvZiB0aGUg c2Vjb25kIHRvIHRoZSBvZGQgdGhyZWFkLAorCQkgICBmb3IgdGhlIDIyc3QgYW5kIDIzbmQgY29u dHJvbCByZWdpc3RlcnMgKi8KKwkJbXNycy0+Y29udHJvbHNbaSsrXS5hZGRyID0gTVNSX1A0X0NS VV9FU0NSNTsKKwkJbXNycy0+Y29udHJvbHNbaSsrXS5hZGRyID0gTVNSX1A0X0NSVV9FU0NSNTsK Kwl9Cit9CisKKworc3RhdGljIHZvaWQgcG1jX3NldHVwX29uZV9wNF9jb3VudGVyKHVuc2lnbmVk IGludCBjdHIpCit7CisJaW50IGk7CisJaW50IGNvbnN0IG1heGJpbmQgPSAyOworCXVuc2lnbmVk IGludCBjY2NyID0gMDsKKwl1bnNpZ25lZCBpbnQgZXNjciA9IDA7CisJdW5zaWduZWQgaW50IGhp Z2ggPSAwOworCXVuc2lnbmVkIGludCBjb3VudGVyX2JpdDsKKwlzdHJ1Y3QgcDRfZXZlbnRfYmlu ZGluZyAqZXYgPSBOVUxMOworCXVuc2lnbmVkIGludCBzdGFnOworCisJc3RhZyA9IGdldF9zdGFn Z2VyKCk7CisJCisJLyogY29udmVydCBmcm9tIGNvdW50ZXIgKm51bWJlciogdG8gY291bnRlciAq Yml0KiAqLworCWNvdW50ZXJfYml0ID0gMSA8PCBWSVJUX0NUUihzdGFnLCBjdHIpOworCQorCS8q IGZpbmQgb3VyIGV2ZW50IGJpbmRpbmcgc3RydWN0dXJlLiAqLworCWlmIChjb3VudGVyX2NvbmZp Z1tjdHJdLmV2ZW50IDw9IDAgfHwgY291bnRlcl9jb25maWdbY3RyXS5ldmVudCA+IE5VTV9FVkVO VFMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIAorCQkgICAgICAgIm9wcm9maWxlOiBQNCBldmVudCBj b2RlIDB4JWx4IG91dCBvZiByYW5nZVxuIiwgCisJCSAgICAgICBjb3VudGVyX2NvbmZpZ1tjdHJd LmV2ZW50KTsKKwkJcmV0dXJuOworCX0KKwkKKwlldiA9ICYocDRfZXZlbnRzW2NvdW50ZXJfY29u ZmlnW2N0cl0uZXZlbnQgLSAxXSk7CisJCisJZm9yIChpID0gMDsgaSA8IG1heGJpbmQ7IGkrKykg eworCQlpZiAoZXYtPmJpbmRpbmdzW2ldLnZpcnRfY291bnRlciAmIGNvdW50ZXJfYml0KSB7CisK KwkJCS8qIG1vZGlmeSBFU0NSICovCisJCQlFU0NSX1JFQUQoZXNjciwgaGlnaCwgZXYsIGkpOwor CQkJRVNDUl9DTEVBUihlc2NyKTsKKwkJCWlmIChzdGFnID09IDApIHsKKwkJCQlFU0NSX1NFVF9V U1JfMChlc2NyLCBjb3VudGVyX2NvbmZpZ1tjdHJdLnVzZXIpOworCQkJCUVTQ1JfU0VUX09TXzAo ZXNjciwgY291bnRlcl9jb25maWdbY3RyXS5rZXJuZWwpOworCQkJfSBlbHNlIHsKKwkJCQlFU0NS X1NFVF9VU1JfMShlc2NyLCBjb3VudGVyX2NvbmZpZ1tjdHJdLnVzZXIpOworCQkJCUVTQ1JfU0VU X09TXzEoZXNjciwgY291bnRlcl9jb25maWdbY3RyXS5rZXJuZWwpOworCQkJfQorCQkJRVNDUl9T RVRfRVZFTlRfU0VMRUNUKGVzY3IsIGV2LT5ldmVudF9zZWxlY3QpOworCQkJRVNDUl9TRVRfRVZF TlRfTUFTSyhlc2NyLCBjb3VudGVyX2NvbmZpZ1tjdHJdLnVuaXRfbWFzayk7CQkJCisJCQlFU0NS X1dSSVRFKGVzY3IsIGhpZ2gsIGV2LCBpKTsKKwkJICAgICAgIAorCQkJLyogbW9kaWZ5IENDQ1Ig Ki8KKwkJCUNDQ1JfUkVBRChjY2NyLCBoaWdoLCBWSVJUX0NUUihzdGFnLCBjdHIpKTsKKwkJCUND Q1JfQ0xFQVIoY2Njcik7CisJCQlDQ0NSX1NFVF9SRVFVSVJFRF9CSVRTKGNjY3IpOworCQkJQ0ND Ul9TRVRfRVNDUl9TRUxFQ1QoY2NjciwgZXYtPmVzY3Jfc2VsZWN0KTsKKwkJCWlmIChzdGFnID09 IDApIHsKKwkJCQlDQ0NSX1NFVF9QTUlfT1ZGXzAoY2Njcik7CisJCQl9IGVsc2UgeworCQkJCUND Q1JfU0VUX1BNSV9PVkZfMShjY2NyKTsKKwkJCX0KKwkJCUNDQ1JfV1JJVEUoY2NjciwgaGlnaCwg VklSVF9DVFIoc3RhZywgY3RyKSk7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwlwcmludGsoS0VS Tl9FUlIgCisJICAgICAgICJvcHJvZmlsZTogUDQgZXZlbnQgY29kZSAweCVseCBubyBiaW5kaW5n LCBzdGFnICVkIGN0ciAlZFxuIiwKKwkgICAgICAgY291bnRlcl9jb25maWdbY3RyXS5ldmVudCwg c3RhZywgY3RyKTsKK30KKworCitzdGF0aWMgdm9pZCBwNF9zZXR1cF9jdHJzKHN0cnVjdCBvcF9t c3JzIGNvbnN0ICogY29uc3QgbXNycykKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwl1bnNpZ25lZCBp bnQgbG93LCBoaWdoOworCXVuc2lnbmVkIGludCBhZGRyOworCXVuc2lnbmVkIGludCBzdGFnOwor CisJc3RhZyA9IGdldF9zdGFnZ2VyKCk7CisKKwlyZG1zcihNU1JfSUEzMl9NSVNDX0VOQUJMRSwg bG93LCBoaWdoKTsKKwlpZiAoISBNSVNDX1BNQ19FTkFCTEVEX1AobG93KSkgeworCQlwcmludGso S0VSTl9FUlIgIm9wcm9maWxlOiBQNCBQTUMgbm90IGF2YWlsYWJsZVxuIik7CisJCXJldHVybjsK Kwl9CisKKwkvKiBjbGVhciB0aGUgY2NjcnMgd2Ugd2lsbCB1c2UgKi8KKwlmb3IgKGkgPSAwIDsg aSA8IG51bV9jb3VudGVycyA7IGkrKykgeworCQlyZG1zcihwNF9jb3VudGVyc1tWSVJUX0NUUihz dGFnLCBpKV0uY2Njcl9hZGRyZXNzLCBsb3csIGhpZ2gpOworCQlDQ0NSX0NMRUFSKGxvdyk7CisJ CUNDQ1JfU0VUX1JFUVVJUkVEX0JJVFMobG93KTsKKwkJd3Jtc3IocDRfY291bnRlcnNbVklSVF9D VFIoc3RhZywgaSldLmNjY3JfYWRkcmVzcywgbG93LCBoaWdoKTsKKwl9CisKKwkvKiBjbGVhciBj Y2NycyBvdXRzaWRlIG91ciBjb25jZXJuICovCisJZm9yIChpID0gc3RhZyA7IGkgPCBOVU1fVU5V U0VEX0NDQ1JTIDsgaSArPSBhZGRyX2luY3JlbWVudCgpKSB7CisJCXJkbXNyKHA0X3VudXNlZF9j Y2NyW2ldLCBsb3csIGhpZ2gpOworCQlDQ0NSX0NMRUFSKGxvdyk7CisJCUNDQ1JfU0VUX1JFUVVJ UkVEX0JJVFMobG93KTsKKwkJd3Jtc3IocDRfdW51c2VkX2NjY3JbaV0sIGxvdywgaGlnaCk7CisJ fQorCisJLyogY2xlYXIgYWxsIGVzY3JzIChpbmNsdWRpbmcgdGhvc2Ugb3V0c2lkZSBvdXIgY29u Y2VybikgKi8KKwlmb3IgKGFkZHIgPSBNU1JfUDRfQlNVX0VTQ1IwICsgc3RhZzsKKwkgICAgIGFk ZHIgPCAgTVNSX1A0X0lRX0VTQ1IwOyBhZGRyICs9IGFkZHJfaW5jcmVtZW50KCkpIHsKKwkJd3Jt c3IoYWRkciwgMCwgMCk7CisJfQorCisJLyogT24gb2xkZXIgbW9kZWxzIGNsZWFyIGFsc28gTVNS X1A0X0lRX0VTQ1IwLzEgKi8KKwlpZiAoYm9vdF9jcHVfZGF0YS54ODZfbW9kZWwgPCAweDMpIHsK KwkJd3Jtc3IoTVNSX1A0X0lRX0VTQ1IwLCAwLCAwKTsKKwkJd3Jtc3IoTVNSX1A0X0lRX0VTQ1Ix LCAwLCAwKTsKKwl9CisKKwlmb3IgKGFkZHIgPSBNU1JfUDRfUkFUX0VTQ1IwICsgc3RhZzsKKwkg ICAgIGFkZHIgPD0gTVNSX1A0X1NTVV9FU0NSMDsgKytpLCBhZGRyICs9IGFkZHJfaW5jcmVtZW50 KCkpIHsKKwkJd3Jtc3IoYWRkciwgMCwgMCk7CisJfQorCQorCWZvciAoYWRkciA9IE1TUl9QNF9N U19FU0NSMCArIHN0YWc7CisJICAgICBhZGRyIDw9IE1TUl9QNF9UQ19FU0NSMTsgYWRkciArPSBh ZGRyX2luY3JlbWVudCgpKXsgCisJCXdybXNyKGFkZHIsIDAsIDApOworCX0KKwkKKwlmb3IgKGFk ZHIgPSBNU1JfUDRfSVhfRVNDUjAgKyBzdGFnOworCSAgICAgYWRkciA8PSBNU1JfUDRfQ1JVX0VT Q1IzOyBhZGRyICs9IGFkZHJfaW5jcmVtZW50KCkpeyAKKwkJd3Jtc3IoYWRkciwgMCwgMCk7CisJ fQorCisJaWYgKG51bV9jb3VudGVycyA9PSBOVU1fQ09VTlRFUlNfTk9OX0hUKSB7CQkKKwkJd3Jt c3IoTVNSX1A0X0NSVV9FU0NSNCwgMCwgMCk7CisJCXdybXNyKE1TUl9QNF9DUlVfRVNDUjUsIDAs IDApOworCX0gZWxzZSBpZiAoc3RhZyA9PSAwKSB7CisJCXdybXNyKE1TUl9QNF9DUlVfRVNDUjQs IDAsIDApOworCX0gZWxzZSB7CisJCXdybXNyKE1TUl9QNF9DUlVfRVNDUjUsIDAsIDApOworCX0J CQorCQorCS8qIHNldHVwIGFsbCBjb3VudGVycyAqLworCWZvciAoaSA9IDAgOyBpIDwgbnVtX2Nv dW50ZXJzIDsgKytpKSB7CisJCWlmIChjb3VudGVyX2NvbmZpZ1tpXS5lbmFibGVkKSB7CisJCQly ZXNldF92YWx1ZVtpXSA9IGNvdW50ZXJfY29uZmlnW2ldLmNvdW50OworCQkJcG1jX3NldHVwX29u ZV9wNF9jb3VudGVyKGkpOworCQkJQ1RSX1dSSVRFKGNvdW50ZXJfY29uZmlnW2ldLmNvdW50LCBW SVJUX0NUUihzdGFnLCBpKSk7CisJCX0gZWxzZSB7CisJCQlyZXNldF92YWx1ZVtpXSA9IDA7CisJ CX0KKwl9Cit9CisKKworZXh0ZXJuIHZvaWQgcG1jX2xvZ19ldmVudChzdHJ1Y3QgZG9tYWluICpk LCB1bnNpZ25lZCBpbnQgZWlwLCBpbnQgbW9kZSwgaW50IGV2ZW50KTsKK2V4dGVybiBpbnQgaXNf cHJvZmlsZWQoc3RydWN0IGRvbWFpbiAqIGQpOworZXh0ZXJuIHN0cnVjdCBkb21haW4gKiBwcmlt YXJ5X3Byb2ZpbGVyOworCitzdGF0aWMgaW50IHA0X2NoZWNrX2N0cnModW5zaWduZWQgaW50IGNv bnN0IGNwdSwgCisJCQkgIHN0cnVjdCBvcF9tc3JzIGNvbnN0ICogY29uc3QgbXNycywKKwkJCSAg c3RydWN0IHhlbl9yZWdzICogY29uc3QgcmVncykKK3sKKwl1bnNpZ25lZCBsb25nIGN0ciwgbG93 LCBoaWdoLCBzdGFnLCByZWFsOworCWludCBpLCBvdmYgPSAwOworCXVuc2lnbmVkIGxvbmcgZWlw ID0gcmVncy0+ZWlwOworCWludCBtb2RlID0gMDsKKworCWlmIChSSU5HXzEocmVncykpCisJCW1v ZGUgPSAxOworCWVsc2UgaWYgKFJJTkdfMChyZWdzKSkKKwkJbW9kZSA9IDI7CisKKwlzdGFnID0g Z2V0X3N0YWdnZXIoKTsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fY291bnRlcnM7ICsraSkgewor CQlpZiAoIXJlc2V0X3ZhbHVlW2ldKSAKKwkJCWNvbnRpbnVlOworCisJCS8qIAorCQkgKiB0aGVy ZSBpcyBzb21lIGVjY2VudHJpY2l0eSBpbiB0aGUgaGFyZHdhcmUgd2hpY2gKKwkJICogcmVxdWly ZXMgdGhhdCB3ZSBwZXJmb3JtIDIgZXh0cmEgY29ycmVjdGlvbnM6CisJCSAqCisJCSAqIC0gY2hl Y2sgYm90aCB0aGUgQ0NDUjpPVkYgZmxhZyBmb3Igb3ZlcmZsb3cgYW5kIHRoZQorCQkgKiAgIGNv dW50ZXIgaGlnaCBiaXQgZm9yIHVuLWZsYWdnZWQgb3ZlcmZsb3dzLgorCQkgKgorCQkgKiAtIHdy aXRlIHRoZSBjb3VudGVyIGJhY2sgdHdpY2UgdG8gZW5zdXJlIGl0IGdldHMKKwkJICogICB1cGRh dGVkIHByb3Blcmx5LgorCQkgKiAKKwkJICogdGhlIGZvcm1lciBzZWVtcyB0byBiZSByZWxhdGVk IHRvIGV4dHJhIE5NSXMgaGFwcGVuaW5nCisJCSAqIGR1cmluZyB0aGUgY3VycmVudCBOTUk7IHRo ZSBsYXR0ZXIgaXMgcmVwb3J0ZWQgYXMgZXJyYXRhCisJCSAqIE4xNSBpbiBpbnRlbCBkb2MgMjQ5 MTk5LTAyOSwgcGVudGl1bSA0IHNwZWNpZmljYXRpb24KKwkJICogdXBkYXRlLCB0aG91Z2ggdGhl aXIgc3VnZ2VzdGVkIHdvcmstYXJvdW5kIGRvZXMgbm90CisJCSAqIGFwcGVhciB0byBzb2x2ZSB0 aGUgcHJvYmxlbS4KKwkJICovCisJCQorCQlyZWFsID0gVklSVF9DVFIoc3RhZywgaSk7CisKKwkJ Q0NDUl9SRUFEKGxvdywgaGlnaCwgcmVhbCk7CisgCQlDVFJfUkVBRChjdHIsIGhpZ2gsIHJlYWwp OworCQlpZiAoQ0NDUl9PVkZfUChsb3cpIHx8IENUUl9PVkVSRkxPV19QKGN0cikpIHsKKwkJCXBt Y19sb2dfZXZlbnQoY3VycmVudCwgZWlwLCBtb2RlLCBpKTsKKyAJCQlDVFJfV1JJVEUocmVzZXRf dmFsdWVbaV0sIHJlYWwpOworCQkJQ0NDUl9DTEVBUl9PVkYobG93KTsKKwkJCUNDQ1JfV1JJVEUo bG93LCBoaWdoLCByZWFsKTsKKyAJCQlDVFJfV1JJVEUocmVzZXRfdmFsdWVbaV0sIHJlYWwpOwor CQkJb3ZmID0gMTsKKwkJfQorCX0KKworCS8qIFA0IHF1aXJrOiB5b3UgaGF2ZSB0byByZS11bm1h c2sgdGhlIGFwaWMgdmVjdG9yICovCisJYXBpY193cml0ZShBUElDX0xWVFBDLCBhcGljX3JlYWQo QVBJQ19MVlRQQykgJiB+QVBJQ19MVlRfTUFTS0VEKTsKKworCS8qIFNlZSBvcF9tb2RlbF9wcHJv LmMgKi8KKwlyZXR1cm4gb3ZmOworfQorCisKK3N0YXRpYyB2b2lkIHA0X3N0YXJ0KHN0cnVjdCBv cF9tc3JzIGNvbnN0ICogY29uc3QgbXNycykKK3sKKwl1bnNpZ25lZCBpbnQgbG93LCBoaWdoLCBz dGFnOworCWludCBpOworCisJc3RhZyA9IGdldF9zdGFnZ2VyKCk7CisKKwlmb3IgKGkgPSAwOyBp IDwgbnVtX2NvdW50ZXJzOyArK2kpIHsKKwkJaWYgKCFyZXNldF92YWx1ZVtpXSkKKwkJCWNvbnRp bnVlOworCQlDQ0NSX1JFQUQobG93LCBoaWdoLCBWSVJUX0NUUihzdGFnLCBpKSk7CisJCUNDQ1Jf U0VUX0VOQUJMRShsb3cpOworCQlDQ0NSX1dSSVRFKGxvdywgaGlnaCwgVklSVF9DVFIoc3RhZywg aSkpOworCX0KK30KKworCitzdGF0aWMgdm9pZCBwNF9zdG9wKHN0cnVjdCBvcF9tc3JzIGNvbnN0 ICogY29uc3QgbXNycykKK3sKKwl1bnNpZ25lZCBpbnQgbG93LCBoaWdoLCBzdGFnOworCWludCBp OworCisJc3RhZyA9IGdldF9zdGFnZ2VyKCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2NvdW50 ZXJzOyArK2kpIHsKKwkJQ0NDUl9SRUFEKGxvdywgaGlnaCwgVklSVF9DVFIoc3RhZywgaSkpOwor CQlDQ0NSX1NFVF9ESVNBQkxFKGxvdyk7CisJCUNDQ1JfV1JJVEUobG93LCBoaWdoLCBWSVJUX0NU UihzdGFnLCBpKSk7CisJfQorfQorCisKKyNpZmRlZiBDT05GSUdfU01QCitzdHJ1Y3Qgb3BfeDg2 X21vZGVsX3NwZWMgY29uc3Qgb3BfcDRfaHQyX3NwZWMgPSB7CisJLm51bV9jb3VudGVycyA9IE5V TV9DT1VOVEVSU19IVDIsCisJLm51bV9jb250cm9scyA9IE5VTV9DT05UUk9MU19IVDIsCisJLmZp bGxfaW5fYWRkcmVzc2VzID0gJnA0X2ZpbGxfaW5fYWRkcmVzc2VzLAorCS5zZXR1cF9jdHJzID0g JnA0X3NldHVwX2N0cnMsCisJLmNoZWNrX2N0cnMgPSAmcDRfY2hlY2tfY3RycywKKwkuc3RhcnQg PSAmcDRfc3RhcnQsCisJLnN0b3AgPSAmcDRfc3RvcAorfTsKKyNlbmRpZgorCitzdHJ1Y3Qgb3Bf eDg2X21vZGVsX3NwZWMgY29uc3Qgb3BfcDRfc3BlYyA9IHsKKwkubnVtX2NvdW50ZXJzID0gTlVN X0NPVU5URVJTX05PTl9IVCwKKwkubnVtX2NvbnRyb2xzID0gTlVNX0NPTlRST0xTX05PTl9IVCwK KwkuZmlsbF9pbl9hZGRyZXNzZXMgPSAmcDRfZmlsbF9pbl9hZGRyZXNzZXMsCisJLnNldHVwX2N0 cnMgPSAmcDRfc2V0dXBfY3RycywKKwkuY2hlY2tfY3RycyA9ICZwNF9jaGVja19jdHJzLAorCS5z dGFydCA9ICZwNF9zdGFydCwKKwkuc3RvcCA9ICZwNF9zdG9wCit9OwpkaWZmIC1QTmF1ciB4ZW4t Mi4wLjUveGVuL2FyY2gveDg2L29wcm9maWxlL29wX21vZGVsX3Bwcm8uYyB4ZW4tMi4wLjUtcHJv Zi94ZW4vYXJjaC94ODYvb3Byb2ZpbGUvb3BfbW9kZWxfcHByby5jCi0tLSB4ZW4tMi4wLjUveGVu L2FyY2gveDg2L29wcm9maWxlL29wX21vZGVsX3Bwcm8uYwkxOTY5LTEyLTMxIDE2OjAwOjAwLjAw MDAwMDAwMCAtMDgwMAorKysgeGVuLTIuMC41LXByb2YveGVuL2FyY2gveDg2L29wcm9maWxlL29w X21vZGVsX3Bwcm8uYwkyMDA1LTA0LTA2IDA5OjI3OjEzLjAwMDAwMDAwMCAtMDcwMApAQCAtMCww ICsxLDE2NiBAQAorLyoqCisgKiBAZmlsZSBvcF9tb2RlbF9wcHJvLmgKKyAqIHBlbnRpdW0gcHJv IC8gUDYgbW9kZWwtc3BlY2lmaWMgTVNSIG9wZXJhdGlvbnMKKyAqCisgKiBAcmVtYXJrIENvcHly aWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZ SU5HCisgKgorICogQGF1dGhvciBKb2huIExldm9uCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUK KyAqIEBhdXRob3IgR3JheWRvbiBIb2FyZQorICoKKyAqIE1vZGlmaWVkIGJ5IEFyYXZpbmQgTWVu b24gZm9yIFhlbgorICogVGhlc2UgbW9kaWZpY2F0aW9ucyBhcmU6CisgKiBDb3B5cmlnaHQgKEMp IDIwMDUgSGV3bGV0dC1QYWNrYXJkIENvLgorICovCisKKyNpbmNsdWRlIDx4ZW4vdHlwZXMuaD4K KyNpbmNsdWRlIDxhc20vbXNyLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNt L2FwaWMuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8eGVuL3NjaGVk Lmg+CisgCisjaW5jbHVkZSAib3BfeDg2X21vZGVsLmgiCisjaW5jbHVkZSAib3BfY291bnRlci5o IgorCisjZGVmaW5lIE5VTV9DT1VOVEVSUyAyCisjZGVmaW5lIE5VTV9DT05UUk9MUyAyCisKKyNk ZWZpbmUgQ1RSX1JFQUQobCxoLG1zcnMsYykgZG8ge3JkbXNyKG1zcnMtPmNvdW50ZXJzWyhjKV0u YWRkciwgKGwpLCAoaCkpO30gd2hpbGUgKDApCisjZGVmaW5lIENUUl9XUklURShsLG1zcnMsYykg ZG8ge3dybXNyKG1zcnMtPmNvdW50ZXJzWyhjKV0uYWRkciwgLSh1MzIpKGwpLCAtMSk7fSB3aGls ZSAoMCkKKyNkZWZpbmUgQ1RSX09WRVJGTE9XRUQobikgKCEoKG4pICYgKDFVPDwzMSkpKQorCisj ZGVmaW5lIENUUkxfUkVBRChsLGgsbXNycyxjKSBkbyB7cmRtc3IoKG1zcnMtPmNvbnRyb2xzWyhj KV0uYWRkciksIChsKSwgKGgpKTt9IHdoaWxlICgwKQorI2RlZmluZSBDVFJMX1dSSVRFKGwsaCxt c3JzLGMpIGRvIHt3cm1zcigobXNycy0+Y29udHJvbHNbKGMpXS5hZGRyKSwgKGwpLCAoaCkpO30g d2hpbGUgKDApCisjZGVmaW5lIENUUkxfU0VUX0FDVElWRShuKSAobiB8PSAoMTw8MjIpKQorI2Rl ZmluZSBDVFJMX1NFVF9JTkFDVElWRShuKSAobiAmPSB+KDE8PDIyKSkKKyNkZWZpbmUgQ1RSTF9D TEVBUih4KSAoeCAmPSAoMTw8MjEpKQorI2RlZmluZSBDVFJMX1NFVF9FTkFCTEUodmFsKSAodmFs IHw9IDE8PDIwKQorI2RlZmluZSBDVFJMX1NFVF9VU1IodmFsLHUpICh2YWwgfD0gKCh1ICYgMSkg PDwgMTYpKQorI2RlZmluZSBDVFJMX1NFVF9LRVJOKHZhbCxrKSAodmFsIHw9ICgoayAmIDEpIDw8 IDE3KSkKKyNkZWZpbmUgQ1RSTF9TRVRfVU0odmFsLCBtKSAodmFsIHw9IChtIDw8IDgpKQorI2Rl ZmluZSBDVFJMX1NFVF9FVkVOVCh2YWwsIGUpICh2YWwgfD0gZSkKKworc3RhdGljIHVuc2lnbmVk IGxvbmcgcmVzZXRfdmFsdWVbTlVNX0NPVU5URVJTXTsKKyAKK3N0YXRpYyB2b2lkIHBwcm9fZmls bF9pbl9hZGRyZXNzZXMoc3RydWN0IG9wX21zcnMgKiBjb25zdCBtc3JzKQoreworCW1zcnMtPmNv dW50ZXJzWzBdLmFkZHIgPSBNU1JfUDZfUEVSRkNUUjA7CisJbXNycy0+Y291bnRlcnNbMV0uYWRk ciA9IE1TUl9QNl9QRVJGQ1RSMTsKKwkKKwltc3JzLT5jb250cm9sc1swXS5hZGRyID0gTVNSX1A2 X0VWTlRTRUwwOworCW1zcnMtPmNvbnRyb2xzWzFdLmFkZHIgPSBNU1JfUDZfRVZOVFNFTDE7Cit9 CisKKworc3RhdGljIHZvaWQgcHByb19zZXR1cF9jdHJzKHN0cnVjdCBvcF9tc3JzIGNvbnN0ICog Y29uc3QgbXNycykKK3sKKwl1bnNpZ25lZCBpbnQgbG93LCBoaWdoOworCWludCBpOworCisJLyog Y2xlYXIgYWxsIGNvdW50ZXJzICovCisJZm9yIChpID0gMCA7IGkgPCBOVU1fQ09OVFJPTFM7ICsr aSkgeworCQlDVFJMX1JFQUQobG93LCBoaWdoLCBtc3JzLCBpKTsKKwkJQ1RSTF9DTEVBUihsb3cp OworCQlDVFJMX1dSSVRFKGxvdywgaGlnaCwgbXNycywgaSk7CisJfQorCQorCS8qIGF2b2lkIGEg ZmFsc2UgZGV0ZWN0aW9uIG9mIGN0ciBvdmVyZmxvd3MgaW4gTk1JIGhhbmRsZXIgKi8KKwlmb3Ig KGkgPSAwOyBpIDwgTlVNX0NPVU5URVJTOyArK2kpIHsKKwkJQ1RSX1dSSVRFKDEsIG1zcnMsIGkp OworCX0KKworCS8qIGVuYWJsZSBhY3RpdmUgY291bnRlcnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwg TlVNX0NPVU5URVJTOyArK2kpIHsKKwkJaWYgKGNvdW50ZXJfY29uZmlnW2ldLmVuYWJsZWQpIHsK KwkJCXJlc2V0X3ZhbHVlW2ldID0gY291bnRlcl9jb25maWdbaV0uY291bnQ7CisKKwkJCUNUUl9X UklURShjb3VudGVyX2NvbmZpZ1tpXS5jb3VudCwgbXNycywgaSk7CisKKwkJCUNUUkxfUkVBRChs b3csIGhpZ2gsIG1zcnMsIGkpOworCQkJQ1RSTF9DTEVBUihsb3cpOworCQkJQ1RSTF9TRVRfRU5B QkxFKGxvdyk7CisJCQlDVFJMX1NFVF9VU1IobG93LCBjb3VudGVyX2NvbmZpZ1tpXS51c2VyKTsK KwkJCUNUUkxfU0VUX0tFUk4obG93LCBjb3VudGVyX2NvbmZpZ1tpXS5rZXJuZWwpOworCQkJQ1RS TF9TRVRfVU0obG93LCBjb3VudGVyX2NvbmZpZ1tpXS51bml0X21hc2spOworCQkJQ1RSTF9TRVRf RVZFTlQobG93LCBjb3VudGVyX2NvbmZpZ1tpXS5ldmVudCk7CisJCQlDVFJMX1dSSVRFKGxvdywg aGlnaCwgbXNycywgaSk7CisJCX0KKwl9Cit9CisKK2V4dGVybiB2b2lkIHBtY19sb2dfZXZlbnQo c3RydWN0IGRvbWFpbiAqZCwgdW5zaWduZWQgaW50IGVpcCwgaW50IG1vZGUsIGludCBldmVudCk7 CitleHRlcm4gaW50IGlzX3Byb2ZpbGVkKHN0cnVjdCBkb21haW4gKiBkKTsKK2V4dGVybiBzdHJ1 Y3QgZG9tYWluICogcHJpbWFyeV9wcm9maWxlcjsKKworc3RhdGljIGludCBwcHJvX2NoZWNrX2N0 cnModW5zaWduZWQgaW50IGNvbnN0IGNwdSwgCisJCQkgICAgc3RydWN0IG9wX21zcnMgY29uc3Qg KiBjb25zdCBtc3JzLAorCQkJICAgIHN0cnVjdCB4ZW5fcmVncyAqIGNvbnN0IHJlZ3MpCit7CisJ dW5zaWduZWQgaW50IGxvdywgaGlnaDsKKwlpbnQgaSwgb3ZmID0gMDsKKwl1bnNpZ25lZCBsb25n IGVpcCA9IHJlZ3MtPmVpcDsKKwlpbnQgbW9kZSA9IDA7CisKKwlpZiAoUklOR18xKHJlZ3MpKSAK KwkJbW9kZSA9IDE7CisJZWxzZSBpZiAoUklOR18wKHJlZ3MpKQorCQltb2RlID0gMjsKKworCWZv ciAoaSA9IDAgOyBpIDwgTlVNX0NPVU5URVJTOyArK2kpIHsKKwkJQ1RSX1JFQUQobG93LCBoaWdo LCBtc3JzLCBpKTsKKwkJaWYgKENUUl9PVkVSRkxPV0VEKGxvdykpIHsKKwkJCXBtY19sb2dfZXZl bnQoY3VycmVudCwgZWlwLCBtb2RlLCBpKTsKKwkJCUNUUl9XUklURShyZXNldF92YWx1ZVtpXSwg bXNycywgaSk7CisJCQlvdmYgPSAxOworCQl9CisJfQorCisJLyogT25seSBQNiBiYXNlZCBQZW50 aXVtIE0gbmVlZCB0byByZS11bm1hc2sgdGhlIGFwaWMgdmVjdG9yIGJ1dCBpdAorCSAqIGRvZXNu J3QgaHVydCBvdGhlciBQNiB2YXJpYW50ICovCisJYXBpY193cml0ZShBUElDX0xWVFBDLCBhcGlj X3JlYWQoQVBJQ19MVlRQQykgJiB+QVBJQ19MVlRfTUFTS0VEKTsKKworCS8qIFdlIGNhbid0IHdv cmsgb3V0IGlmIHdlIHJlYWxseSBoYW5kbGVkIGFuIGludGVycnVwdC4gV2UKKwkgKiBtaWdodCBo YXZlIGNhdWdodCBhICpzZWNvbmQqIGNvdW50ZXIganVzdCBhZnRlciBvdmVyZmxvd2luZworCSAq IHRoZSBpbnRlcnJ1cHQgZm9yIHRoaXMgY291bnRlciB0aGVuIGFycml2ZXMKKwkgKiBhbmQgd2Ug ZG9uJ3QgZmluZCBhIGNvdW50ZXIgdGhhdCdzIG92ZXJmbG93ZWQsIHNvIHdlCisJICogd291bGQg cmV0dXJuIDAgYW5kIGdldCBkYXplZCArIGNvbmZ1c2VkLiBJbnN0ZWFkIHdlIGFsd2F5cworCSAq IGFzc3VtZSB3ZSBmb3VuZCBhbiBvdmVyZmxvdy4gVGhpcyBzdWNrcy4KKwkgKi8KKwlyZXR1cm4g b3ZmOworfQorCisgCitzdGF0aWMgdm9pZCBwcHJvX3N0YXJ0KHN0cnVjdCBvcF9tc3JzIGNvbnN0 ICogY29uc3QgbXNycykKK3sKKwl1bnNpZ25lZCBpbnQgbG93LGhpZ2g7CisJQ1RSTF9SRUFEKGxv dywgaGlnaCwgbXNycywgMCk7CisJQ1RSTF9TRVRfQUNUSVZFKGxvdyk7CisJQ1RSTF9XUklURShs b3csIGhpZ2gsIG1zcnMsIDApOworfQorCitzdGF0aWMgdm9pZCBwcHJvX3N0b3Aoc3RydWN0IG9w X21zcnMgY29uc3QgKiBjb25zdCBtc3JzKQoreworCXVuc2lnbmVkIGludCBsb3csaGlnaDsKKwlD VFJMX1JFQUQobG93LCBoaWdoLCBtc3JzLCAwKTsKKwlDVFJMX1NFVF9JTkFDVElWRShsb3cpOwor CUNUUkxfV1JJVEUobG93LCBoaWdoLCBtc3JzLCAwKTsKK30KKwordW5zaWduZWQgaW50IHJlYWRf Y3RyKHN0cnVjdCBvcF9tc3JzIGNvbnN0ICogY29uc3QgbXNycywgaW50IGkpCit7CisJdW5zaWdu ZWQgaW50IGxvdywgaGlnaDsKKwlDVFJfUkVBRChsb3csIGhpZ2gsIG1zcnMsIGkpOworCXJldHVy biBsb3c7Cit9CisKK3N0cnVjdCBvcF94ODZfbW9kZWxfc3BlYyBjb25zdCBvcF9wcHJvX3NwZWMg PSB7CisJLm51bV9jb3VudGVycyA9IE5VTV9DT1VOVEVSUywKKwkubnVtX2NvbnRyb2xzID0gTlVN X0NPTlRST0xTLAorCS5maWxsX2luX2FkZHJlc3NlcyA9ICZwcHJvX2ZpbGxfaW5fYWRkcmVzc2Vz LAorCS5zZXR1cF9jdHJzID0gJnBwcm9fc2V0dXBfY3RycywKKwkuY2hlY2tfY3RycyA9ICZwcHJv X2NoZWNrX2N0cnMsCisJLnN0YXJ0ID0gJnBwcm9fc3RhcnQsCisJLnN0b3AgPSAmcHByb19zdG9w Cit9OwpkaWZmIC1QTmF1ciB4ZW4tMi4wLjUveGVuL2FyY2gveDg2L29wcm9maWxlL29wX3g4Nl9t b2RlbC5oIHhlbi0yLjAuNS1wcm9mL3hlbi9hcmNoL3g4Ni9vcHJvZmlsZS9vcF94ODZfbW9kZWwu aAotLS0geGVuLTIuMC41L3hlbi9hcmNoL3g4Ni9vcHJvZmlsZS9vcF94ODZfbW9kZWwuaAkxOTY5 LTEyLTMxIDE2OjAwOjAwLjAwMDAwMDAwMCAtMDgwMAorKysgeGVuLTIuMC41LXByb2YveGVuL2Fy Y2gveDg2L29wcm9maWxlL29wX3g4Nl9tb2RlbC5oCTIwMDUtMDQtMDYgMDk6Mjc6MTMuMDAwMDAw MDAwIC0wNzAwCkBAIC0wLDAgKzEsNTUgQEAKKy8qKgorICogQGZpbGUgb3BfeDg2X21vZGVsLmgK KyAqIGludGVyZmFjZSB0byB4ODYgbW9kZWwtc3BlY2lmaWMgTVNSIG9wZXJhdGlvbnMKKyAqCisg KiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVh ZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBHcmF5ZG9uIEhvYXJlCisgKgorICog TW9kaWZpZWQgYnkgQXJhdmluZCBNZW5vbiBmb3IgWGVuCisgKiBUaGVzZSBtb2RpZmljYXRpb25z IGFyZToKKyAqIENvcHlyaWdodCAoQykgMjAwNSBIZXdsZXR0LVBhY2thcmQgQ28uCisgKi8KKwor I2lmbmRlZiBPUF9YODZfTU9ERUxfSAorI2RlZmluZSBPUF9YODZfTU9ERUxfSAorCitzdHJ1Y3Qg b3Bfc2F2ZWRfbXNyIHsKKwl1bnNpZ25lZCBpbnQgaGlnaDsKKwl1bnNpZ25lZCBpbnQgbG93Owor fTsKKworc3RydWN0IG9wX21zciB7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCXN0cnVjdCBvcF9z YXZlZF9tc3Igc2F2ZWQ7Cit9OworCitzdHJ1Y3Qgb3BfbXNycyB7CisJc3RydWN0IG9wX21zciAq IGNvdW50ZXJzOworCXN0cnVjdCBvcF9tc3IgKiBjb250cm9sczsKK307CisKK3N0cnVjdCBwdF9y ZWdzOworCisvKiBUaGUgbW9kZWwgdnRhYmxlIGFic3RyYWN0cyB0aGUgZGlmZmVyZW5jZXMgYmV0 d2VlbgorICogdmFyaW91cyB4ODYgQ1BVIG1vZGVsJ3MgcGVyZmN0ciBzdXBwb3J0LgorICovCitz dHJ1Y3Qgb3BfeDg2X21vZGVsX3NwZWMgeworCXVuc2lnbmVkIGludCBjb25zdCBudW1fY291bnRl cnM7CisJdW5zaWduZWQgaW50IGNvbnN0IG51bV9jb250cm9sczsKKwl2b2lkICgqZmlsbF9pbl9h ZGRyZXNzZXMpKHN0cnVjdCBvcF9tc3JzICogY29uc3QgbXNycyk7CisJdm9pZCAoKnNldHVwX2N0 cnMpKHN0cnVjdCBvcF9tc3JzIGNvbnN0ICogY29uc3QgbXNycyk7CisJaW50ICgqY2hlY2tfY3Ry cykodW5zaWduZWQgaW50IGNvbnN0IGNwdSwgCisJCXN0cnVjdCBvcF9tc3JzIGNvbnN0ICogY29u c3QgbXNycywKKwkJc3RydWN0IHhlbl9yZWdzICogY29uc3QgcmVncyk7CisJdm9pZCAoKnN0YXJ0 KShzdHJ1Y3Qgb3BfbXNycyBjb25zdCAqIGNvbnN0IG1zcnMpOworCXZvaWQgKCpzdG9wKShzdHJ1 Y3Qgb3BfbXNycyBjb25zdCAqIGNvbnN0IG1zcnMpOworfTsKKworZXh0ZXJuIHN0cnVjdCBvcF94 ODZfbW9kZWxfc3BlYyBjb25zdCBvcF9wcHJvX3NwZWM7CitleHRlcm4gc3RydWN0IG9wX3g4Nl9t b2RlbF9zcGVjIGNvbnN0IG9wX3A0X3NwZWM7CitleHRlcm4gc3RydWN0IG9wX3g4Nl9tb2RlbF9z cGVjIGNvbnN0IG9wX3A0X2h0Ml9zcGVjOworZXh0ZXJuIHN0cnVjdCBvcF94ODZfbW9kZWxfc3Bl YyBjb25zdCBvcF9hdGhsb25fc3BlYzsKKworI2VuZGlmIC8qIE9QX1g4Nl9NT0RFTF9IICovCmRp ZmYgLVBOYXVyIHhlbi0yLjAuNS94ZW4vYXJjaC94ODYvb3Byb2ZpbGUvcG1jLmMgeGVuLTIuMC41 LXByb2YveGVuL2FyY2gveDg2L29wcm9maWxlL3BtYy5jCi0tLSB4ZW4tMi4wLjUveGVuL2FyY2gv eDg2L29wcm9maWxlL3BtYy5jCTE5NjktMTItMzEgMTY6MDA6MDAuMDAwMDAwMDAwIC0wODAwCisr KyB4ZW4tMi4wLjUtcHJvZi94ZW4vYXJjaC94ODYvb3Byb2ZpbGUvcG1jLmMJMjAwNS0wNC0wNiAw OToyNzoxMy4wMDAwMDAwMDAgLTA3MDAKQEAgLTAsMCArMSwyODEgQEAKKy8qCisgKiBDb3B5cmln aHQgKEMpIDIwMDUgSGV3bGV0dC1QYWNrYXJkIENvLgorICogd3JpdHRlbiBieSBBcmF2aW5kIE1l bm9uLCBlbWFpbDogeGVub3Byb2ZAZ3JvdXBzLmhwLmNvbQorICovCisKKyNpbmNsdWRlIDx4ZW4v c2NoZWQuaD4KKworI2luY2x1ZGUgIm9wX2NvdW50ZXIuaCIKKworaW50IGFjdGl2ZV9kb21haW5z W01BWF9PUFJPRl9ET01BSU5TXTsKK2ludCBwYXNzaXZlX2RvbWFpbnNbTUFYX09QUk9GX0RPTUFJ TlNdOwordW5zaWduZWQgaW50IGFkb21haW5zID0gMDsKK3Vuc2lnbmVkIGludCBwZG9tYWlucyA9 IDA7Cit1bnNpZ25lZCBpbnQgYWN0aXZhdGVkID0gMDsKKworI2RlZmluZSBWSVJRX0JJVE1BU0tf U0laRQkoTUFYX09QUk9GX0RPTUFJTlMvMzIgKyAxKQorCitzdHJ1Y3QgZG9tYWluICogcHJpbWFy eV9wcm9maWxlciA9IE5VTEw7CitzdHJ1Y3QgZG9tYWluICogYWRvbWFpbl9wdHJzW01BWF9PUFJP Rl9ET01BSU5TXTsKK3Vuc2lnbmVkIGludCB2aXJxX292Zl9wZW5kaW5nW1ZJUlFfQklUTUFTS19T SVpFXTsKKworaW50IGlzX2FjdGl2ZShzdHJ1Y3QgZG9tYWluICpkKSAKK3sKKwlpbnQgaTsKKwlm b3IgKGkgPSAwOyBpIDwgYWRvbWFpbnM7IGkrKykKKwkJaWYgKGQtPmlkID09IGFjdGl2ZV9kb21h aW5zW2ldKQorCQkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKK2ludCBhY3RpdmVfaWQoc3Ry dWN0IGRvbWFpbiAqZCkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgYWRvbWFpbnM7IGkr KykKKwkJaWYgKGQgPT0gYWRvbWFpbl9wdHJzW2ldKQorCQkJcmV0dXJuIGk7CisJcmV0dXJuIC0x OworfQorCit2b2lkIGZyZWVfYWRvbWFpbl9wdHJzKCkgCit7CisJaW50IGk7CisJaW50IG51bSA9 IGFkb21haW5zOworCisJYWRvbWFpbnMgPSAwOworCWZvciAoaSA9IDA7IGkgPCBWSVJRX0JJVE1B U0tfU0laRTsgaSsrKQorCQl2aXJxX292Zl9wZW5kaW5nW2ldID0gMDsKKworCWZvciAoaSA9IDA7 IGkgPCBudW07IGkrKykgeworCQlwdXRfZG9tYWluKGFkb21haW5fcHRyc1tpXSk7CisJCWFkb21h aW5fcHRyc1tpXSA9IE5VTEw7CisJfQorfQorCitpbnQgc2V0X2Fkb21haW5fcHRycyhpbnQgbnVt KQoreworCWludCBpOworCXN0cnVjdCBkb21haW4gKmQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgVklS UV9CSVRNQVNLX1NJWkU7IGkrKykKKwkJdmlycV9vdmZfcGVuZGluZ1tpXSA9IDA7CisKKwlmb3Ig KGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKKwkJZCA9IGZpbmRfZG9tYWluX2J5X2lkKGFjdGl2ZV9k b21haW5zW2ldKTsKKwkJaWYgKCFkKSB7CisJCQlmcmVlX2Fkb21haW5fcHRycygpOworCQkJcmV0 dXJuIC1FRkFVTFQ7CisJCX0KKwkJYWRvbWFpbl9wdHJzW2ldID0gZDsKKwkJYWRvbWFpbnMrKzsK Kwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCBzZXRfYWN0aXZlKHN0cnVjdCBkb21haW4gKmQpCit7 CisJaWYgKGlzX2FjdGl2ZShkKSkKKwkJcmV0dXJuIDA7CisJLyogaGFjayBpZiB3ZSBydW4gb3V0 IG9mIHNwYWNlICovCisJaWYgKGFkb21haW5zID49IE1BWF9PUFJPRl9ET01BSU5TKSB7CisJCWFk b21haW5zLS07CisJCXB1dF9kb21haW4oYWRvbWFpbl9wdHJzW2Fkb21haW5zXSk7CisJfQorCWFj dGl2ZV9kb21haW5zW2Fkb21haW5zXSA9IGQtPmlkOworCWlmIChnZXRfZG9tYWluKGQpKQorCQlh ZG9tYWluX3B0cnNbYWRvbWFpbnMrK10gPSBkOworCWVsc2UgeworCQlmcmVlX2Fkb21haW5fcHRy cygpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCBpc19wYXNz aXZlKHN0cnVjdCBkb21haW4gKmQpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IHBkb21h aW5zOyBpKyspCisJCWlmIChkLT5pZCA9PSBwYXNzaXZlX2RvbWFpbnNbaV0pCisJCQlyZXR1cm4g MTsKKwlyZXR1cm4gMDsKK30KKworaW50IGlzX3Byb2ZpbGVkKHN0cnVjdCBkb21haW4gKmQpCit7 CisJaWYgKGlzX2FjdGl2ZShkKSB8fCBpc19wYXNzaXZlKGQpKQorCQlyZXR1cm4gMTsKKwlyZXR1 cm4gMDsKK30KKwordm9pZCBwbWNfbG9nX2V2ZW50KHN0cnVjdCBkb21haW4gKmQsIHVuc2lnbmVk IGludCBlaXAsIGludCBtb2RlLCBpbnQgZXZlbnQpIAoreworCXNoYXJlZF9pbmZvX3QgKnMgPSBO VUxMOworCXN0cnVjdCBkb21haW4gKmRlc3QgPSBkOworCWludCBoZWFkID0gMDsKKworCWlmICgh aXNfcHJvZmlsZWQoZCkpCisJCXJldHVybjsKKworCWlmIChpc19wYXNzaXZlKGQpKSB7CisJCWRl c3QgPSBwcmltYXJ5X3Byb2ZpbGVyOworCQlnb3RvIGxvZ19wYXNzaXZlOworCX0KKwkJCitsb2df YWN0aXZlOgorCXMgPSBkZXN0LT5zaGFyZWRfaW5mbzsKKworCWhlYWQgPSBzLT5ldmVudF9oZWFk OworCWlmIChoZWFkID49IE1BWF9PUFJPRl9FVkVOVFMpCisJCWhlYWQgPSAwOworCisJaWYgKHMt Pmxvc2luZ19zYW1wbGVzKQorCQlzLT5zYW1wbGVzX2xvc3QrKzsKKwlpZiAoaGVhZCA9PSBzLT5l dmVudF90YWlsIC0gMSB8fCAoaGVhZCA9PSBNQVhfT1BST0ZfRVZFTlRTIC0gMSAmJiBzLT5ldmVu dF90YWlsID09IDApKQorCQlzLT5sb3Npbmdfc2FtcGxlcyA9IDE7CisKKwlzLT5ldmVudF9sb2db aGVhZF0uZWlwID0gZWlwOworCXMtPmV2ZW50X2xvZ1toZWFkXS5tb2RlID0gbW9kZTsKKwlzLT5l dmVudF9sb2dbaGVhZF0uZXZlbnQgPSBldmVudDsKKwloZWFkKys7CisJcy0+ZXZlbnRfaGVhZCA9 IGhlYWQ7CisJcmV0dXJuOworCitsb2dfcGFzc2l2ZToKKwkvKiBXZSB1c2UgdGhlIGZvbGxvd2lu ZyBpbmVmZmljaWVudCBmb3JtYXQgZm9yIGxvZ2dpbmcgZXZlbnRzIGZyb20gb3RoZXIKKwkJZG9t YWlucy4gV2UgcHV0IGEgc3BlY2lhbCByZWNvcmQgaW5kaWNhdGluZyB0aGF0IHRoZSBuZXh0IHJl Y29yZCBpcworCQlmb3IgYW5vdGhlciBkb21haW4uIFRoaXMgaXMgZG9uZSBmb3IgZWFjaCBzYW1w bGUgZnJvbSBhbm90aGVyCisJCWRvbWFpbiAqLyAKKwlzID0gZGVzdC0+c2hhcmVkX2luZm87CisK KwloZWFkID0gcy0+ZXZlbnRfaGVhZDsKKwlpZiAoaGVhZCA+PSBNQVhfT1BST0ZfRVZFTlRTKQor CQloZWFkID0gMDsKKworCWlmIChzLT5sb3Npbmdfc2FtcGxlcykKKwkJcy0+c2FtcGxlc19sb3N0 Kys7CisJaWYgKGhlYWQgPT0gcy0+ZXZlbnRfdGFpbCAtIDEgfHwgKGhlYWQgPT0gTUFYX09QUk9G X0VWRU5UUyAtIDEgJiYgcy0+ZXZlbnRfdGFpbCA9PSAwKSkKKwkJcy0+bG9zaW5nX3NhbXBsZXMg PSAxOworCisJcy0+ZXZlbnRfbG9nW2hlYWRdLmVpcCA9IH4xVUw7CisJcy0+ZXZlbnRfbG9nW2hl YWRdLm1vZGUgPSB+MDsKKwlzLT5ldmVudF9sb2dbaGVhZF0uZXZlbnQgPSBkLT5pZDsKKwloZWFk Kys7CisJcy0+ZXZlbnRfaGVhZCA9IGhlYWQ7CisJZ290byBsb2dfYWN0aXZlOworfQorCitzdGF0 aWMgdm9pZCBwbWNfZXZlbnRfaW5pdChzdHJ1Y3QgZG9tYWluICpkKQoreworCXNoYXJlZF9pbmZv X3QgKnMgPSBkLT5zaGFyZWRfaW5mbzsKKwlzLT5ldmVudF9oZWFkID0gMDsKKwlzLT5ldmVudF90 YWlsID0gMDsKKwlzLT5sb3Npbmdfc2FtcGxlcyA9IDA7CisJcy0+c2FtcGxlc19sb3N0ID0gMDsK KwlzLT5ubWlfcmVzdGFydHMgPSAwOworCXMtPmFjdGl2ZV9zYW1wbGVzID0gMDsKKwlzLT5wYXNz aXZlX3NhbXBsZXMgPSAwOworCXMtPm90aGVyX3NhbXBsZXMgPSAwOworfQorCitleHRlcm4gaW50 IG5taV9pbml0KGludCAqbnVtX2V2ZW50cywgaW50ICppc19wcmltYXJ5KTsKK2V4dGVybiBpbnQg bm1pX3Jlc2VydmVfY291bnRlcnModm9pZCk7CitleHRlcm4gaW50IG5taV9zZXR1cF9ldmVudHMo dm9pZCk7CitleHRlcm4gaW50IG5taV9lbmFibGVfdmlycSh2b2lkKTsKK2V4dGVybiBpbnQgbm1p X3N0YXJ0KHZvaWQpOworZXh0ZXJuIHZvaWQgbm1pX3N0b3Aodm9pZCk7CitleHRlcm4gdm9pZCBu bWlfZGlzYWJsZV92aXJxKHZvaWQpOworZXh0ZXJuIHZvaWQgbm1pX3JlbGVhc2VfY291bnRlcnMo dm9pZCk7CisKKyNkZWZpbmUgUFJJVl9PUChvcCkJKChvcCA9PSBQTUNfU0VUX0FDVElWRSkgfHwg KG9wID09IFBNQ19TRVRfUEFTU0lWRSkgfHwgKG9wID09IFBNQ19SRVNFUlZFX0NPVU5URVJTKSBc CisJCQl8fCAob3AgPT0gUE1DX1NFVFVQX0VWRU5UUykgfHwgKG9wID09IFBNQ19TVEFSVCkgfHwg KG9wID09IFBNQ19TVE9QKSBcCisJCQl8fCAob3AgPT0gUE1DX1JFTEVBU0VfQ09VTlRFUlMpIHx8 IChvcCA9PSBQTUNfU0hVVERPV04pKQorCitpbnQgZG9fcG1jX29wKGludCBvcCwgdW5zaWduZWQg aW50IGFyZzEsIHVuc2lnbmVkIGludCBhcmcyKQoreworCWludCByZXQgPSAwOworCisJaWYgKFBS SVZfT1Aob3ApICYmIGN1cnJlbnQgIT0gcHJpbWFyeV9wcm9maWxlcikKKwkJcmV0dXJuIC1FUEVS TTsKKworCXN3aXRjaCAob3ApIHsKKwkJY2FzZSBQTUNfSU5JVDoKKwkJCXJldCA9IG5taV9pbml0 KChpbnQgKilhcmcxLCAoaW50ICopYXJnMik7CisJCQlicmVhazsKKworCQljYXNlIFBNQ19TRVRf QUNUSVZFOgorCQkJaWYgKGFkb21haW5zICE9IDApCisJCQkJcmV0dXJuIC1FUEVSTTsKKwkJCWlm IChjb3B5X2Zyb21fdXNlcigodm9pZCAqKSZhY3RpdmVfZG9tYWlucywKKwkJCQkodm9pZCAqKWFy ZzEsIGFyZzIqc2l6ZW9mKGludCkpKQorCQkJCXJldHVybiAtRUZBVUxUOworCQkJaWYgKHNldF9h ZG9tYWluX3B0cnMoYXJnMikpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQlpZiAoc2V0X2FjdGl2 ZShjdXJyZW50KSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCWJyZWFrOworCisJCWNhc2UgUE1D X1NFVF9QQVNTSVZFOgorCQkJaWYgKHBkb21haW5zICE9IDApCisJCQkJcmV0dXJuIC1FUEVSTTsK KwkJCWlmIChjb3B5X2Zyb21fdXNlcigodm9pZCAqKSZwYXNzaXZlX2RvbWFpbnMsCisJCQkJKHZv aWQgKilhcmcxLCBhcmcyKnNpemVvZihpbnQpKSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCXBk b21haW5zID0gYXJnMjsKKwkJCWJyZWFrOworCisJCWNhc2UgUE1DX1JFU0VSVkVfQ09VTlRFUlM6 CisJCQlyZXQgPSBubWlfcmVzZXJ2ZV9jb3VudGVycygpOworCQkJYnJlYWs7CisKKwkJY2FzZSBQ TUNfU0VUVVBfRVZFTlRTOgorCQkJaWYgKGNvcHlfZnJvbV91c2VyKCh2b2lkICopJmNvdW50ZXJf Y29uZmlnLCAKKwkJCQkodm9pZCAqKWFyZzEsIGFyZzIqc2l6ZW9mKHN0cnVjdCBvcF9jb3VudGVy X2NvbmZpZykpKQorCQkJCXJldHVybiAtRUZBVUxUOworCQkJcmV0ID0gbm1pX3NldHVwX2V2ZW50 cygpOworCQkJYnJlYWs7CisKKwkJY2FzZSBQTUNfRU5BQkxFX1ZJUlE6CisJCQlpZiAoIWlzX2Fj dGl2ZShjdXJyZW50KSkgeworCQkJCWlmIChjdXJyZW50ICE9IHByaW1hcnlfcHJvZmlsZXIpCisJ CQkJCXJldHVybiAtRVBFUk07CisJCQkJZWxzZQorCQkJCQlzZXRfYWN0aXZlKGN1cnJlbnQpOwor CQkJfQorCQkJcmV0ID0gbm1pX2VuYWJsZV92aXJxKCk7CisJCQlwbWNfZXZlbnRfaW5pdChjdXJy ZW50KTsKKwkJCWFjdGl2YXRlZCsrOworCQkJYnJlYWs7CisKKwkJY2FzZSBQTUNfU1RBUlQ6CisJ CQlpZiAoYWN0aXZhdGVkIDwgYWRvbWFpbnMpCisJCQkJcmV0dXJuIC1FUEVSTTsKKwkJCXJldCA9 IG5taV9zdGFydCgpOworCQkJYnJlYWs7CisKKwkJY2FzZSBQTUNfU1RPUDoKKwkJCW5taV9zdG9w KCk7CisJCQlicmVhazsKKworCQljYXNlIFBNQ19ESVNBQkxFX1ZJUlE6CisJCQlpZiAoIWlzX2Fj dGl2ZShjdXJyZW50KSkKKwkJCQlyZXR1cm4gLUVQRVJNOworCQkJbm1pX2Rpc2FibGVfdmlycSgp OworCQkJYWN0aXZhdGVkLS07CisJCQlicmVhazsKKworCQljYXNlIFBNQ19SRUxFQVNFX0NPVU5U RVJTOgorCQkJbm1pX3JlbGVhc2VfY291bnRlcnMoKTsKKwkJCWJyZWFrOworCisJCWNhc2UgUE1D X1NIVVRET1dOOgorCQkJZnJlZV9hZG9tYWluX3B0cnMoKTsKKwkJCXBkb21haW5zID0gMDsKKwkJ CWFjdGl2YXRlZCA9IDA7CisJCQlwcmltYXJ5X3Byb2ZpbGVyID0gTlVMTDsKKwkJCWJyZWFrOwor CisJCWRlZmF1bHQ6CisJCQlyZXQgPSAtRUlOVkFMOworCX0KKwlyZXR1cm4gcmV0OworfQpkaWZm IC1QTmF1ciB4ZW4tMi4wLjUveGVuL2FyY2gveDg2L3RyYXBzLmMgeGVuLTIuMC41LXByb2YveGVu L2FyY2gveDg2L3RyYXBzLmMKLS0tIHhlbi0yLjAuNS94ZW4vYXJjaC94ODYvdHJhcHMuYwkyMDA1 LTAzLTEwIDExOjUyOjE1LjAwMDAwMDAwMCAtMDgwMAorKysgeGVuLTIuMC41LXByb2YveGVuL2Fy Y2gveDg2L3RyYXBzLmMJMjAwNS0wNC0wNiAxMDoyOTowNC4wMDAwMDAwMDAgLTA3MDAKQEAgLTIs NiArMiwxMCBAQAogICogYXJjaC9pMzg2L3RyYXBzLmMKICAqIAogICogTW9kaWZpY2F0aW9ucyB0 byBMaW51eCBvcmlnaW5hbCBhcmUgY29weXJpZ2h0IChjKSAyMDAyLTIwMDQsIEsgQSBGcmFzZXIK KyAqCisgKiBNb2RpZmllZCBieSBBcmF2aW5kIE1lbm9uIGZvciBzdXBwb3J0aW5nIG9wcm9maWxl CisgKiBUaGVzZSBtb2RpZmljYXRpb25zIGFyZToKKyAqIENvcHlyaWdodCAoQykgMjAwNSBIZXds ZXR0LVBhY2thcmQgQ28uCiAgKiAKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAt NTEsNiArNTUsNyBAQAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2kz ODcuaD4KICNpbmNsdWRlIDxhc20vZGVidWdnZXIuaD4KKyNpbmNsdWRlIDxhc20vbm1pLmg+CiAK IC8qCiAgKiBvcHRfbm1pOiBvbmUgb2YgJ2lnbm9yZScsICdkb20wJywgb3IgJ2ZhdGFsJy4KQEAg LTU5OCw3ICs2MDMsNyBAQAogICAgIHByaW50aygiRG8geW91IGhhdmUgYSBzdHJhbmdlIHBvd2Vy IHNhdmluZyBtb2RlIGVuYWJsZWQ/XG4iKTsKIH0KIAotYXNtbGlua2FnZSB2b2lkIGRvX25taShz dHJ1Y3QgeGVuX3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgcmVhc29uKQorc3RhdGljIHZvaWQg ZGVmYXVsdF9kb19ubWkoc3RydWN0IHhlbl9yZWdzICogcmVncywgdW5zaWduZWQgbG9uZyByZWFz b24pCiB7CiAgICAgKytubWlfY291bnQoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIApAQCAtNjEwLDYg KzYxNSwzNSBAQAogICAgICAgICB1bmtub3duX25taV9lcnJvcigodW5zaWduZWQgY2hhcikocmVh c29uJjB4ZmYpKTsKIH0KIAorc3RhdGljIGludCBkdW1teV9ubWlfY2FsbGJhY2soc3RydWN0IHhl bl9yZWdzICogcmVncywgaW50IGNwdSkKK3sKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRp YyBubWlfY2FsbGJhY2tfdCBubWlfY2FsbGJhY2sgPSBkdW1teV9ubWlfY2FsbGJhY2s7CisKK2Fz bWxpbmthZ2Ugdm9pZCBkb19ubWkoc3RydWN0IHhlbl9yZWdzICogcmVncywgdW5zaWduZWQgbG9u ZyByZWFzb24pCit7CisJaW50IGNwdTsKKyAgICAgICAgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgp OworCisgICAgICAgIGlmICghbm1pX2NhbGxiYWNrKHJlZ3MsIGNwdSkpIAorICAgICAgICAgICAg ICAgIGRlZmF1bHRfZG9fbm1pKHJlZ3MsIHJlYXNvbik7Cit9CisKK3ZvaWQgc2V0X25taV9jYWxs YmFjayhubWlfY2FsbGJhY2tfdCBjYWxsYmFjaykKK3sKKyAgICAgICAgbm1pX2NhbGxiYWNrID0g Y2FsbGJhY2s7Cit9CisKK3ZvaWQgdW5zZXRfbm1pX2NhbGxiYWNrKHZvaWQpCit7CisgICAgICAg IG5taV9jYWxsYmFjayA9IGR1bW15X25taV9jYWxsYmFjazsKK30KKworRVhQT1JUX1NZTUJPTChz ZXRfbm1pX2NhbGxiYWNrKTsKK0VYUE9SVF9TWU1CT0wodW5zZXRfbm1pX2NhbGxiYWNrKTsKKwog dW5zaWduZWQgbG9uZyBubWlfc29mdGlycV9yZWFzb247CiBzdGF0aWMgdm9pZCBubWlfc29mdGly cSh2b2lkKQogewpkaWZmIC1QTmF1ciB4ZW4tMi4wLjUveGVuL2FyY2gveDg2L3g4Nl8zMi9lbnRy eS5TIHhlbi0yLjAuNS1wcm9mL3hlbi9hcmNoL3g4Ni94ODZfMzIvZW50cnkuUwotLS0geGVuLTIu MC41L3hlbi9hcmNoL3g4Ni94ODZfMzIvZW50cnkuUwkyMDA1LTAzLTEwIDExOjUyOjE2LjAwMDAw MDAwMCAtMDgwMAorKysgeGVuLTIuMC41LXByb2YveGVuL2FyY2gveDg2L3g4Nl8zMi9lbnRyeS5T CTIwMDUtMDQtMDYgMTA6MjM6NDYuMDAwMDAwMDAwIC0wNzAwCkBAIC0zLDYgKzMsMTAgQEAKICAq CiAgKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNCwgSyBBIEZyYXNlcgogICogQ29weXJpZ2h0IChj KSAxOTkxLCAxOTkyIExpbnVzIFRvcnZhbGRzCisgKgorICogTW9kaWZpZWQgYnkgQXJhdmluZCBN ZW5vbiBmb3Igc3VwcG9ydGluZyBvcHJvZmlsZQorICogVGhlc2UgbW9kaWZpY2F0aW9ucyBhcmU6 CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgSGV3bGV0dC1QYWNrYXJkIENvLgogICogCiAgKiBDYWxs aW5nIGJhY2sgdG8gYSBndWVzdCBPUzoKICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PQpA QCAtNDk4LDEwICs1MDIsMTAgQEAKICAgICAgICAgam56ICAgZG9fd2F0Y2hkb2dfdGljawogICAg ICAgICBtb3ZsICAlZHMsJWVheAogICAgICAgICBjbXB3ICAkKF9fSFlQRVJWSVNPUl9EUyksJWF4 Ci0gICAgICAgIGpuZSAgIGRlZmVyX25taQorICAgICAgICBqbmUgICBmb3JjZV9ubWkKICAgICAg ICAgbW92bCAgJWVzLCVlYXgKICAgICAgICAgY21wdyAgJChfX0hZUEVSVklTT1JfRFMpLCVheAot ICAgICAgICBqbmUgICBkZWZlcl9ubWkKKyAgICAgICAgam5lICAgZm9yY2Vfbm1pCiAKIGRvX3dh dGNoZG9nX3RpY2s6CiAgICAgICAgIG1vdmwgICQoX19IWVBFUlZJU09SX0RTKSwlZWR4CkBAIC01 MTIsMTIgKzUxNiw0NCBAQAogCXB1c2hsICVlZHggICAjIHJlZ3MKICAgICAgICAgY2FsbCAgU1lN Qk9MX05BTUUoZG9fbm1pKQogCWFkZGwgICQ4LCVlc3AKKworCS8qIHhlbm9wcm9mOiBXZSBuZWVk IHRvIGNoZWNrIGlmIHZpcnR1YWwgaW50ZXJydXB0IG11c3QgYmUgZ2VuZXJhdGVkICovCisJam1w IHJldF9mcm9tX2ludHIKKworCS8qCiAgICAgICAgIG1vdmwgIFhSRUdTX2VmbGFncyglZXNwKSwl ZWF4CiAgICAgICAgIG1vdmIgIFhSRUdTX2NzKCVlc3ApLCVhbAogICAgICAgICB0ZXN0bCAkKDN8 WDg2X0VGTEFHU19WTSksJWVheAogCWp6ICAgIHJlc3RvcmVfYWxsX3hlbgogICAgICAgICBHRVRf Q1VSUkVOVCglZWJ4KQogICAgICAgICBqbXAgICByZXN0b3JlX2FsbF9ndWVzdAorCSovCisKK2Zv cmNlX25taToKKwltb3ZsICVkcywtNCglZXNwKQorCW1vdmwgJWVzLC04KCVlc3ApCisJbW92bCAl ZnMsLTEyKCVlc3ApCisJbW92bCAlZ3MsLTE2KCVlc3ApCisJc3VibCAkMTYsJWVzcAorCisJbW92 bCAkKF9fSFlQRVJWSVNPUl9EUyksJWVkeAorCW1vdmwgJWVkeCwlZHMKKwltb3ZsICVlZHgsJWVz CisJCisJbW92bCAlZXNwLCVlZHgKKwlhZGRsICQxNiwlZWR4CisJcHVzaGwgJWVieAorCXB1c2hs ICVlZHgKKwljYWxsIFNZTUJPTF9OQU1FKGRvX25taSkKKwlhZGRsICQ4LCVlc3AKKworCWFkZGwg JDE2LCVlc3AKKwltb3ZsIC00KCVlc3ApLCVkcworCW1vdmwgLTgoJWVzcCksJWVzCisJbW92bCAt MTIoJWVzcCksJWZzCisJbW92bCAtMTYoJWVzcCksJWdzCisKKwlqbXAgcmVzdG9yZV9hbGxfeGVu CiAKIGRlZmVyX25taToKICAgICAgICAgbW92bCAgJEZJWE1BUF9hcGljX2Jhc2UsJWVheApAQCAt Njc0LDYgKzcxMCw3IEBACiAgICAgICAgIC5sb25nIFNZTUJPTF9OQU1FKGRvX3ZtX2Fzc2lzdCkK ICAgICAgICAgLmxvbmcgU1lNQk9MX05BTUUoZG9fdXBkYXRlX3ZhX21hcHBpbmdfb3RoZXJkb21h aW4pCiAgICAgICAgIC5sb25nIFNZTUJPTF9OQU1FKGRvX3N3aXRjaF92bTg2KQorICAgICAgICAu bG9uZyBTWU1CT0xfTkFNRShkb19wbWNfb3ApCiAgICAgICAgIC5yZXB0IE5SX2h5cGVyY2FsbHMt KCguLWh5cGVyY2FsbF90YWJsZSkvNCkKICAgICAgICAgLmxvbmcgU1lNQk9MX05BTUUoZG9fbmlf aHlwZXJjYWxsKQogICAgICAgICAuZW5kcgpkaWZmIC1QTmF1ciB4ZW4tMi4wLjUveGVuL2luY2x1 ZGUvYXNtLXg4Ni9hcGljLmggeGVuLTIuMC41LXByb2YveGVuL2luY2x1ZGUvYXNtLXg4Ni9hcGlj LmgKLS0tIHhlbi0yLjAuNS94ZW4vaW5jbHVkZS9hc20teDg2L2FwaWMuaAkyMDA1LTAzLTEwIDEx OjUyOjEyLjAwMDAwMDAwMCAtMDgwMAorKysgeGVuLTIuMC41LXByb2YveGVuL2luY2x1ZGUvYXNt LXg4Ni9hcGljLmgJMjAwNS0wNC0wNiAwOToyNzoxMy4wMDAwMDAwMDAgLTA3MDAKQEAgLTc3LDYg Kzc3LDggQEAKIGV4dGVybiB2b2lkIHNtcF9sb2NhbF90aW1lcl9pbnRlcnJ1cHQgKHN0cnVjdCB4 ZW5fcmVncyAqIHJlZ3MpOwogZXh0ZXJuIHZvaWQgc2V0dXBfQVBJQ19jbG9ja3MgKHZvaWQpOwog ZXh0ZXJuIHZvaWQgc2V0dXBfYXBpY19ubWlfd2F0Y2hkb2cgKHZvaWQpOworZXh0ZXJuIGludCBy ZXNlcnZlX2xhcGljX25taSh2b2lkKTsKK2V4dGVybiB2b2lkIHJlbGVhc2VfbGFwaWNfbm1pKHZv aWQpOwogZXh0ZXJuIHZvaWQgbm1pX3dhdGNoZG9nX3RpY2sgKHN0cnVjdCB4ZW5fcmVncyAqIHJl Z3MpOwogZXh0ZXJuIHZvaWQgdG91Y2hfbm1pX3dhdGNoZG9nKHZvaWQpOwogZXh0ZXJuIGludCBB UElDX2luaXRfdW5pcHJvY2Vzc29yICh2b2lkKTsKZGlmZiAtUE5hdXIgeGVuLTIuMC41L3hlbi9p bmNsdWRlL2FzbS14ODYvbXNyLmggeGVuLTIuMC41LXByb2YveGVuL2luY2x1ZGUvYXNtLXg4Ni9t c3IuaAotLS0geGVuLTIuMC41L3hlbi9pbmNsdWRlL2FzbS14ODYvbXNyLmgJMjAwNS0wMy0xMCAx MTo1MjoxNS4wMDAwMDAwMDAgLTA4MDAKKysrIHhlbi0yLjAuNS1wcm9mL3hlbi9pbmNsdWRlL2Fz bS14ODYvbXNyLmgJMjAwNS0wNC0wNiAwOToyNzoxMy4wMDAwMDAwMDAgLTA3MDAKQEAgLTgsMzgg KzgsMzggQEAKICAqLwogCiAjZGVmaW5lIHJkbXNyKG1zcix2YWwxLHZhbDIpIFwKLSAgICAgX19h c21fXyBfX3ZvbGF0aWxlX18oInJkbXNyIiBcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oInJkbXNy IiBcCiAJCQkgIDogIj1hIiAodmFsMSksICI9ZCIgKHZhbDIpIFwKIAkJCSAgOiAiYyIgKG1zcikp CiAKLSNkZWZpbmUgcmRtc3JsKG1zcix2YWwpIGRvIHsgdW5zaWduZWQgbG9uZyBhX18sYl9fOyBc Ci0gICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oInJkbXNyIiBcCi0JCQkgICAgOiAiPWEiIChh X18pLCAiPWQiIChiX18pIFwKLQkJCSAgICA6ICJjIiAobXNyKSk7IFwKLSAgICAgICB2YWwgPSBh X18gfCAoYl9fPDwzMik7IFwKLX0gd2hpbGUoMCk7IAotCiAjZGVmaW5lIHdybXNyKG1zcix2YWwx LHZhbDIpIFwKLSAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oIndybXNyIiBcCisJX19hc21fXyBf X3ZvbGF0aWxlX18oIndybXNyIiBcCiAJCQkgIDogLyogbm8gb3V0cHV0cyAqLyBcCiAJCQkgIDog ImMiIChtc3IpLCAiYSIgKHZhbDEpLCAiZCIgKHZhbDIpKQogCisjZGVmaW5lIHJkbXNybChtc3Is dmFsKSBkbyB7IFwKKwl1bnNpZ25lZCBsb25nIGxfXyxoX187IFwKKwlyZG1zciAobXNyLCBsX18s IGhfXyk7ICBcCisJdmFsID0gbF9fOyAgXAorCXZhbCB8PSAoKHU2NCloX188PDMyKTsgIFwKK30g d2hpbGUoMCkKKworc3RhdGljIGlubGluZSB2b2lkIHdybXNybCAodW5zaWduZWQgbG9uZyBtc3Is IHVuc2lnbmVkIGxvbmcgbG9uZyB2YWwpCit7CisJdW5zaWduZWQgbG9uZyBsbywgaGk7CisJbG8g PSAodW5zaWduZWQgbG9uZykgdmFsOworCWhpID0gdmFsID4+IDMyOworCXdybXNyIChtc3IsIGxv LCBoaSk7Cit9CisKICNkZWZpbmUgcmR0c2MobG93LGhpZ2gpIFwKICAgICAgX19hc21fXyBfX3Zv bGF0aWxlX18oInJkdHNjIiA6ICI9YSIgKGxvdyksICI9ZCIgKGhpZ2gpKQogCiAjZGVmaW5lIHJk dHNjbChsb3cpIFwKICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oInJkdHNjIiA6ICI9YSIgKGxv dykgOiA6ICJlZHgiKQogCi0jaWYgZGVmaW5lZChfX2kzODZfXykKICNkZWZpbmUgcmR0c2NsbCh2 YWwpIFwKICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oInJkdHNjIiA6ICI9QSIgKHZhbCkpCi0j ZWxpZiBkZWZpbmVkKF9feDg2XzY0X18pCi0jZGVmaW5lIHJkdHNjbGwodmFsKSBkbyB7IFwKLSAg ICAgdW5zaWduZWQgaW50IGEsZDsgXAotICAgICBhc20gdm9sYXRpbGUoInJkdHNjIiA6ICI9YSIg KGEpLCAiPWQiIChkKSk7IFwKLSAgICAgKHZhbCkgPSAoKHVuc2lnbmVkIGxvbmcpYSkgfCAoKCh1 bnNpZ25lZCBsb25nKWQpPDwzMik7IFwKLX0gd2hpbGUoMCkKLSNlbmRpZgogCiAjZGVmaW5lIHdy aXRlX3RzYyh2YWwxLHZhbDIpIHdybXNyKDB4MTAsIHZhbDEsIHZhbDIpCiAKQEAgLTU1LDY2ICs1 NSw2IEBACiAjZGVmaW5lIE1TUl9JQTMyX1BMQVRGT1JNX0lECQkweDE3CiAjZGVmaW5lIE1TUl9J QTMyX0VCTF9DUl9QT1dFUk9OCQkweDJhCiAKLS8qIEFNRC9LOCBzcGVjaWZpYyBNU1JzICovIAot I2RlZmluZSBNU1JfRUZFUiAweGMwMDAwMDgwCQkvKiBleHRlbmRlZCBmZWF0dXJlIHJlZ2lzdGVy ICovCi0jZGVmaW5lIE1TUl9TVEFSIDB4YzAwMDAwODEJCS8qIGxlZ2FjeSBtb2RlIFNZU0NBTEwg dGFyZ2V0ICovCi0jZGVmaW5lIE1TUl9MU1RBUiAweGMwMDAwMDgyIAkJLyogbG9uZyBtb2RlIFNZ U0NBTEwgdGFyZ2V0ICovCi0jZGVmaW5lIE1TUl9DU1RBUiAweGMwMDAwMDgzCQkvKiBjb21wYXRp YmlsaXR5IG1vZGUgU1lTQ0FMTCB0YXJnZXQgKi8KLSNkZWZpbmUgTVNSX1NZU0NBTExfTUFTSyAw eGMwMDAwMDg0CS8qIEVGTEFHUyBtYXNrIGZvciBzeXNjYWxsICovCi0jZGVmaW5lIE1TUl9GU19C QVNFIDB4YzAwMDAxMDAJCS8qIDY0Yml0IEdTIGJhc2UgKi8KLSNkZWZpbmUgTVNSX0dTX0JBU0Ug MHhjMDAwMDEwMQkJLyogNjRiaXQgRlMgYmFzZSAqLwotI2RlZmluZSBNU1JfS0VSTkVMX0dTX0JB U0UgIDB4YzAwMDAxMDIJLyogU3dhcEdTIEdTIHNoYWRvdyAob3IgVVNFUl9HUyBmcm9tIGtlcm5l bCkgKi8gCi0vKiBFRkVSIGJpdHM6ICovIAotI2RlZmluZSBfRUZFUl9TQ0UgMCAgLyogU1lTQ0FM TC9TWVNSRVQgKi8KLSNkZWZpbmUgX0VGRVJfTE1FIDggIC8qIExvbmcgbW9kZSBlbmFibGUgKi8K LSNkZWZpbmUgX0VGRVJfTE1BIDEwIC8qIExvbmcgbW9kZSBhY3RpdmUgKHJlYWQtb25seSkgKi8K LSNkZWZpbmUgX0VGRVJfTlggMTEgIC8qIE5vIGV4ZWN1dGUgZW5hYmxlICovCi0KLSNkZWZpbmUg RUZFUl9TQ0UgKDE8PF9FRkVSX1NDRSkKLSNkZWZpbmUgRUZFUl9MTUUgKDE8PF9FRkVSX0xNRSkK LSNkZWZpbmUgRUZFUl9MTUEgKDE8PF9FRkVSX0xNQSkKLSNkZWZpbmUgRUZFUl9OWCAoMTw8X0VG RVJfTlgpCi0KLS8qIEludGVsIE1TUnMuIFNvbWUgYWxzbyBhdmFpbGFibGUgb24gb3RoZXIgQ1BV cyAqLwotI2RlZmluZSBNU1JfSUEzMl9QTEFURk9STV9JRAkweDE3Ci0KLSNkZWZpbmUgTVNSX0lB MzJfUEVSRkNUUjAgICAgICAweGMxCi0jZGVmaW5lIE1TUl9JQTMyX1BFUkZDVFIxICAgICAgMHhj MgotCi0jZGVmaW5lIE1TUl9NVFJSY2FwCQkweDBmZQotI2RlZmluZSBNU1JfSUEzMl9CQkxfQ1Jf Q1RMICAgICAgICAweDExOQotCi0jZGVmaW5lIE1TUl9JQTMyX01DR19DQVAgICAgICAgMHgxNzkK LSNkZWZpbmUgTVNSX0lBMzJfTUNHX1NUQVRVUyAgICAgICAgMHgxN2EKLSNkZWZpbmUgTVNSX0lB MzJfTUNHX0NUTCAgICAgICAweDE3YgotCi0jZGVmaW5lIE1TUl9JQTMyX0VWTlRTRUwwICAgICAg MHgxODYKLSNkZWZpbmUgTVNSX0lBMzJfRVZOVFNFTDEgICAgICAweDE4NwotCi0jZGVmaW5lIE1T Ul9JQTMyX0RFQlVHQ1RMTVNSICAgICAgIDB4MWQ5Ci0jZGVmaW5lIE1TUl9JQTMyX0xBU1RCUkFO Q0hGUk9NSVAgIDB4MWRiCi0jZGVmaW5lIE1TUl9JQTMyX0xBU1RCUkFOQ0hUT0lQICAgICAgICAw eDFkYwotI2RlZmluZSBNU1JfSUEzMl9MQVNUSU5URlJPTUlQICAgICAweDFkZAotI2RlZmluZSBN U1JfSUEzMl9MQVNUSU5UVE9JUCAgICAgICAweDFkZQotCi0jZGVmaW5lIE1TUl9NVFJSZml4NjRL XzAwMDAwCTB4MjUwCi0jZGVmaW5lIE1TUl9NVFJSZml4MTZLXzgwMDAwCTB4MjU4Ci0jZGVmaW5l IE1TUl9NVFJSZml4MTZLX0EwMDAwCTB4MjU5Ci0jZGVmaW5lIE1TUl9NVFJSZml4NEtfQzAwMDAJ MHgyNjgKLSNkZWZpbmUgTVNSX01UUlJmaXg0S19DODAwMAkweDI2OQotI2RlZmluZSBNU1JfTVRS UmZpeDRLX0QwMDAwCTB4MjZhCi0jZGVmaW5lIE1TUl9NVFJSZml4NEtfRDgwMDAJMHgyNmIKLSNk ZWZpbmUgTVNSX01UUlJmaXg0S19FMDAwMAkweDI2YwotI2RlZmluZSBNU1JfTVRSUmZpeDRLX0U4 MDAwCTB4MjZkCi0jZGVmaW5lIE1TUl9NVFJSZml4NEtfRjAwMDAJMHgyNmUKLSNkZWZpbmUgTVNS X01UUlJmaXg0S19GODAwMAkweDI2ZgotI2RlZmluZSBNU1JfTVRSUmRlZlR5cGUJCTB4MmZmCi0K LSNkZWZpbmUgTVNSX0lBMzJfTUMwX0NUTCAgICAgICAweDQwMAotI2RlZmluZSBNU1JfSUEzMl9N QzBfU1RBVFVTICAgICAgICAweDQwMQotI2RlZmluZSBNU1JfSUEzMl9NQzBfQUREUiAgICAgIDB4 NDAyCi0jZGVmaW5lIE1TUl9JQTMyX01DMF9NSVNDICAgICAgMHg0MDMKLQogI2RlZmluZSBNU1Jf SUEzMl9BUElDQkFTRQkJMHgxYgogI2RlZmluZSBNU1JfSUEzMl9BUElDQkFTRV9CU1AJCSgxPDw4 KQogI2RlZmluZSBNU1JfSUEzMl9BUElDQkFTRV9FTkFCTEUJKDE8PDExKQpAQCAtMTIzLDEyICs2 MywzOCBAQAogI2RlZmluZSBNU1JfSUEzMl9VQ09ERV9XUklURQkJMHg3OQogI2RlZmluZSBNU1Jf SUEzMl9VQ09ERV9SRVYJCTB4OGIKIAorI2RlZmluZSBNU1JfUDZfUEVSRkNUUjAJCTB4YzEKKyNk ZWZpbmUgTVNSX1A2X1BFUkZDVFIxCQkweGMyCisKICNkZWZpbmUgTVNSX0lBMzJfQkJMX0NSX0NU TAkJMHgxMTkKIAorI2RlZmluZSBNU1JfSUEzMl9TWVNFTlRFUl9DUwkJMHgxNzQKKyNkZWZpbmUg TVNSX0lBMzJfU1lTRU5URVJfRVNQCQkweDE3NQorI2RlZmluZSBNU1JfSUEzMl9TWVNFTlRFUl9F SVAJCTB4MTc2CisKICNkZWZpbmUgTVNSX0lBMzJfTUNHX0NBUAkJMHgxNzkKICNkZWZpbmUgTVNS X0lBMzJfTUNHX1NUQVRVUwkJMHgxN2EKICNkZWZpbmUgTVNSX0lBMzJfTUNHX0NUTAkJMHgxN2IK IAorLyogUDQvWGVvbisgc3BlY2lmaWMgKi8KKyNkZWZpbmUgTVNSX0lBMzJfTUNHX0VBWAkJMHgx ODAKKyNkZWZpbmUgTVNSX0lBMzJfTUNHX0VCWAkJMHgxODEKKyNkZWZpbmUgTVNSX0lBMzJfTUNH X0VDWAkJMHgxODIKKyNkZWZpbmUgTVNSX0lBMzJfTUNHX0VEWAkJMHgxODMKKyNkZWZpbmUgTVNS X0lBMzJfTUNHX0VTSQkJMHgxODQKKyNkZWZpbmUgTVNSX0lBMzJfTUNHX0VESQkJMHgxODUKKyNk ZWZpbmUgTVNSX0lBMzJfTUNHX0VCUAkJMHgxODYKKyNkZWZpbmUgTVNSX0lBMzJfTUNHX0VTUAkJ MHgxODcKKyNkZWZpbmUgTVNSX0lBMzJfTUNHX0VGTEFHUwkJMHgxODgKKyNkZWZpbmUgTVNSX0lB MzJfTUNHX0VJUAkJMHgxODkKKyNkZWZpbmUgTVNSX0lBMzJfTUNHX1JFU0VSVkVECQkweDE4QQor CisjZGVmaW5lIE1TUl9QNl9FVk5UU0VMMAkJCTB4MTg2CisjZGVmaW5lIE1TUl9QNl9FVk5UU0VM MQkJCTB4MTg3CisKKyNkZWZpbmUgTVNSX0lBMzJfUEVSRl9TVEFUVVMJCTB4MTk4CisjZGVmaW5l IE1TUl9JQTMyX1BFUkZfQ1RMCQkweDE5OQorCiAjZGVmaW5lIE1TUl9JQTMyX1RIRVJNX0NPTlRS T0wJCTB4MTlhCiAjZGVmaW5lIE1TUl9JQTMyX1RIRVJNX0lOVEVSUlVQVAkweDE5YgogI2RlZmlu ZSBNU1JfSUEzMl9USEVSTV9TVEFUVVMJCTB4MTljCkBAIC0xNDUsMjkgKzExMSw5MSBAQAogI2Rl ZmluZSBNU1JfSUEzMl9NQzBfQUREUgkJMHg0MDIKICNkZWZpbmUgTVNSX0lBMzJfTUMwX01JU0MJ CTB4NDAzCiAKLSNkZWZpbmUgTVNSX1A2X1BFUkZDVFIwCQkJMHhjMQotI2RlZmluZSBNU1JfUDZf UEVSRkNUUjEJCQkweGMyCi0jZGVmaW5lIE1TUl9QNl9FVk5UU0VMMAkJCTB4MTg2Ci0jZGVmaW5l IE1TUl9QNl9FVk5UU0VMMQkJCTB4MTg3CisvKiBQZW50aXVtIElWIHBlcmZvcm1hbmNlIGNvdW50 ZXIgTVNScyAqLworI2RlZmluZSBNU1JfUDRfQlBVX1BFUkZDVFIwIAkJMHgzMDAKKyNkZWZpbmUg TVNSX1A0X0JQVV9QRVJGQ1RSMSAJCTB4MzAxCisjZGVmaW5lIE1TUl9QNF9CUFVfUEVSRkNUUjIg CQkweDMwMgorI2RlZmluZSBNU1JfUDRfQlBVX1BFUkZDVFIzIAkJMHgzMDMKKyNkZWZpbmUgTVNS X1A0X01TX1BFUkZDVFIwIAkJMHgzMDQKKyNkZWZpbmUgTVNSX1A0X01TX1BFUkZDVFIxIAkJMHgz MDUKKyNkZWZpbmUgTVNSX1A0X01TX1BFUkZDVFIyIAkJMHgzMDYKKyNkZWZpbmUgTVNSX1A0X01T X1BFUkZDVFIzIAkJMHgzMDcKKyNkZWZpbmUgTVNSX1A0X0ZMQU1FX1BFUkZDVFIwIAkJMHgzMDgK KyNkZWZpbmUgTVNSX1A0X0ZMQU1FX1BFUkZDVFIxIAkJMHgzMDkKKyNkZWZpbmUgTVNSX1A0X0ZM QU1FX1BFUkZDVFIyIAkJMHgzMGEKKyNkZWZpbmUgTVNSX1A0X0ZMQU1FX1BFUkZDVFIzIAkJMHgz MGIKKyNkZWZpbmUgTVNSX1A0X0lRX1BFUkZDVFIwIAkJMHgzMGMKKyNkZWZpbmUgTVNSX1A0X0lR X1BFUkZDVFIxIAkJMHgzMGQKKyNkZWZpbmUgTVNSX1A0X0lRX1BFUkZDVFIyIAkJMHgzMGUKKyNk ZWZpbmUgTVNSX1A0X0lRX1BFUkZDVFIzIAkJMHgzMGYKKyNkZWZpbmUgTVNSX1A0X0lRX1BFUkZD VFI0IAkJMHgzMTAKKyNkZWZpbmUgTVNSX1A0X0lRX1BFUkZDVFI1IAkJMHgzMTEKKyNkZWZpbmUg TVNSX1A0X0JQVV9DQ0NSMCAJCTB4MzYwCisjZGVmaW5lIE1TUl9QNF9CUFVfQ0NDUjEgCQkweDM2 MQorI2RlZmluZSBNU1JfUDRfQlBVX0NDQ1IyIAkJMHgzNjIKKyNkZWZpbmUgTVNSX1A0X0JQVV9D Q0NSMyAJCTB4MzYzCisjZGVmaW5lIE1TUl9QNF9NU19DQ0NSMCAJCTB4MzY0CisjZGVmaW5lIE1T Ul9QNF9NU19DQ0NSMSAJCTB4MzY1CisjZGVmaW5lIE1TUl9QNF9NU19DQ0NSMiAJCTB4MzY2Cisj ZGVmaW5lIE1TUl9QNF9NU19DQ0NSMyAJCTB4MzY3CisjZGVmaW5lIE1TUl9QNF9GTEFNRV9DQ0NS MCAJCTB4MzY4CisjZGVmaW5lIE1TUl9QNF9GTEFNRV9DQ0NSMSAJCTB4MzY5CisjZGVmaW5lIE1T Ul9QNF9GTEFNRV9DQ0NSMiAJCTB4MzZhCisjZGVmaW5lIE1TUl9QNF9GTEFNRV9DQ0NSMyAJCTB4 MzZiCisjZGVmaW5lIE1TUl9QNF9JUV9DQ0NSMCAJCTB4MzZjCisjZGVmaW5lIE1TUl9QNF9JUV9D Q0NSMSAJCTB4MzZkCisjZGVmaW5lIE1TUl9QNF9JUV9DQ0NSMiAJCTB4MzZlCisjZGVmaW5lIE1T Ul9QNF9JUV9DQ0NSMyAJCTB4MzZmCisjZGVmaW5lIE1TUl9QNF9JUV9DQ0NSNCAJCTB4MzcwCisj ZGVmaW5lIE1TUl9QNF9JUV9DQ0NSNSAJCTB4MzcxCisjZGVmaW5lIE1TUl9QNF9BTEZfRVNDUjAg CQkweDNjYQorI2RlZmluZSBNU1JfUDRfQUxGX0VTQ1IxIAkJMHgzY2IKKyNkZWZpbmUgTVNSX1A0 X0JQVV9FU0NSMCAJCTB4M2IyCisjZGVmaW5lIE1TUl9QNF9CUFVfRVNDUjEgCQkweDNiMworI2Rl ZmluZSBNU1JfUDRfQlNVX0VTQ1IwIAkJMHgzYTAKKyNkZWZpbmUgTVNSX1A0X0JTVV9FU0NSMSAJ CTB4M2ExCisjZGVmaW5lIE1TUl9QNF9DUlVfRVNDUjAgCQkweDNiOAorI2RlZmluZSBNU1JfUDRf Q1JVX0VTQ1IxIAkJMHgzYjkKKyNkZWZpbmUgTVNSX1A0X0NSVV9FU0NSMiAJCTB4M2NjCisjZGVm aW5lIE1TUl9QNF9DUlVfRVNDUjMgCQkweDNjZAorI2RlZmluZSBNU1JfUDRfQ1JVX0VTQ1I0IAkJ MHgzZTAKKyNkZWZpbmUgTVNSX1A0X0NSVV9FU0NSNSAJCTB4M2UxCisjZGVmaW5lIE1TUl9QNF9E QUNfRVNDUjAgCQkweDNhOAorI2RlZmluZSBNU1JfUDRfREFDX0VTQ1IxIAkJMHgzYTkKKyNkZWZp bmUgTVNSX1A0X0ZJUk1fRVNDUjAgCQkweDNhNAorI2RlZmluZSBNU1JfUDRfRklSTV9FU0NSMSAJ CTB4M2E1CisjZGVmaW5lIE1TUl9QNF9GTEFNRV9FU0NSMCAJCTB4M2E2CisjZGVmaW5lIE1TUl9Q NF9GTEFNRV9FU0NSMSAJCTB4M2E3CisjZGVmaW5lIE1TUl9QNF9GU0JfRVNDUjAgCQkweDNhMgor I2RlZmluZSBNU1JfUDRfRlNCX0VTQ1IxIAkJMHgzYTMKKyNkZWZpbmUgTVNSX1A0X0lRX0VTQ1Iw IAkJMHgzYmEKKyNkZWZpbmUgTVNSX1A0X0lRX0VTQ1IxIAkJMHgzYmIKKyNkZWZpbmUgTVNSX1A0 X0lTX0VTQ1IwIAkJMHgzYjQKKyNkZWZpbmUgTVNSX1A0X0lTX0VTQ1IxIAkJMHgzYjUKKyNkZWZp bmUgTVNSX1A0X0lUTEJfRVNDUjAgCQkweDNiNgorI2RlZmluZSBNU1JfUDRfSVRMQl9FU0NSMSAJ CTB4M2I3CisjZGVmaW5lIE1TUl9QNF9JWF9FU0NSMCAJCTB4M2M4CisjZGVmaW5lIE1TUl9QNF9J WF9FU0NSMSAJCTB4M2M5CisjZGVmaW5lIE1TUl9QNF9NT0JfRVNDUjAgCQkweDNhYQorI2RlZmlu ZSBNU1JfUDRfTU9CX0VTQ1IxIAkJMHgzYWIKKyNkZWZpbmUgTVNSX1A0X01TX0VTQ1IwIAkJMHgz YzAKKyNkZWZpbmUgTVNSX1A0X01TX0VTQ1IxIAkJMHgzYzEKKyNkZWZpbmUgTVNSX1A0X1BNSF9F U0NSMCAJCTB4M2FjCisjZGVmaW5lIE1TUl9QNF9QTUhfRVNDUjEgCQkweDNhZAorI2RlZmluZSBN U1JfUDRfUkFUX0VTQ1IwIAkJMHgzYmMKKyNkZWZpbmUgTVNSX1A0X1JBVF9FU0NSMSAJCTB4M2Jk CisjZGVmaW5lIE1TUl9QNF9TQUFUX0VTQ1IwIAkJMHgzYWUKKyNkZWZpbmUgTVNSX1A0X1NBQVRf RVNDUjEgCQkweDNhZgorI2RlZmluZSBNU1JfUDRfU1NVX0VTQ1IwIAkJMHgzYmUKKyNkZWZpbmUg TVNSX1A0X1NTVV9FU0NSMSAJCTB4M2JmICAgIC8qIGd1ZXNzOiBub3QgZGVmaW5lZCBpbiBtYW51 YWwgKi8KKyNkZWZpbmUgTVNSX1A0X1RCUFVfRVNDUjAgCQkweDNjMgorI2RlZmluZSBNU1JfUDRf VEJQVV9FU0NSMSAJCTB4M2MzCisjZGVmaW5lIE1TUl9QNF9UQ19FU0NSMCAJCTB4M2M0CisjZGVm aW5lIE1TUl9QNF9UQ19FU0NSMSAJCTB4M2M1CisjZGVmaW5lIE1TUl9QNF9VMkxfRVNDUjAgCQkw eDNiMAorI2RlZmluZSBNU1JfUDRfVTJMX0VTQ1IxIAkJMHgzYjEKIAotLyogSzcvSzggTVNScy4g Tm90IGNvbXBsZXRlLiBTZWUgdGhlIGFyY2hpdGVjdHVyZSBtYW51YWwgZm9yIGEgbW9yZSBjb21w bGV0ZSBsaXN0LiAqLwotI2RlZmluZSBNU1JfSzdfRVZOVFNFTDAgICAgICAgICAgICAweEMwMDEw MDAwCi0jZGVmaW5lIE1TUl9LN19QRVJGQ1RSMCAgICAgICAgICAgIDB4QzAwMTAwMDQKLSNkZWZp bmUgTVNSX0s3X0VWTlRTRUwxICAgICAgICAgICAgMHhDMDAxMDAwMQotI2RlZmluZSBNU1JfSzdf UEVSRkNUUjEgICAgICAgICAgICAweEMwMDEwMDA1Ci0jZGVmaW5lIE1TUl9LN19FVk5UU0VMMiAg ICAgICAgICAgIDB4QzAwMTAwMDIKLSNkZWZpbmUgTVNSX0s3X1BFUkZDVFIyICAgICAgICAgICAg MHhDMDAxMDAwNgotI2RlZmluZSBNU1JfSzdfRVZOVFNFTDMgICAgICAgICAgICAweEMwMDEwMDAz Ci0jZGVmaW5lIE1TUl9LN19QRVJGQ1RSMyAgICAgICAgICAgIDB4QzAwMTAwMDcKLSNkZWZpbmUg TVNSX0s4X1RPUF9NRU0xCQkgICAweEMwMDEwMDFBCi0jZGVmaW5lIE1TUl9LOF9UT1BfTUVNMgkJ ICAgMHhDMDAxMDAxRAotI2RlZmluZSBNU1JfSzhfU1lTQ0ZHCQkgICAweEMwMDAwMDEwCQotI2Rl ZmluZSBNU1JfSzdfSFdDUgkJCTB4QzAwMTAwMTUKLSNkZWZpbmUgTVNSX0s3X0NMS19DVEwJCQkw eEMwMDEwMDFiCi0jZGVmaW5lIE1TUl9LN19GSURfVklEX0NUTAkJMHhDMDAxMDA0MQotI2RlZmlu ZSBNU1JfSzdfVklEX1NUQVRVUwkJMHhDMDAxMDA0MgotCi0vKiBLNiBNU1JzICovCisvKiBBTUQg RGVmaW5lZCBNU1JzICovCiAjZGVmaW5lIE1TUl9LNl9FRkVSCQkJMHhDMDAwMDA4MAogI2RlZmlu ZSBNU1JfSzZfU1RBUgkJCTB4QzAwMDAwODEKICNkZWZpbmUgTVNSX0s2X1dIQ1IJCQkweEMwMDAw MDgyCkBAIC0xNzYsNiArMjA0LDI4IEBACiAjZGVmaW5lIE1TUl9LNl9QU09SCQkJMHhDMDAwMDA4 NwogI2RlZmluZSBNU1JfSzZfUEZJUgkJCTB4QzAwMDAwODgKIAorI2RlZmluZSBNU1JfSzdfRVZO VFNFTDAJCQkweEMwMDEwMDAwCisjZGVmaW5lIE1TUl9LN19FVk5UU0VMMQkJCTB4QzAwMTAwMDEK KyNkZWZpbmUgTVNSX0s3X0VWTlRTRUwyCQkJMHhDMDAxMDAwMgorI2RlZmluZSBNU1JfSzdfRVZO VFNFTDMJCQkweEMwMDEwMDAzCisjZGVmaW5lIE1TUl9LN19QRVJGQ1RSMAkJCTB4QzAwMTAwMDQK KyNkZWZpbmUgTVNSX0s3X1BFUkZDVFIxCQkJMHhDMDAxMDAwNQorI2RlZmluZSBNU1JfSzdfUEVS RkNUUjIJCQkweEMwMDEwMDA2CisjZGVmaW5lIE1TUl9LN19QRVJGQ1RSMwkJCTB4QzAwMTAwMDcK KyNkZWZpbmUgTVNSX0s3X0hXQ1IJCQkweEMwMDEwMDE1CisjZGVmaW5lIE1TUl9LN19DTEtfQ1RM CQkJMHhDMDAxMDAxYgorI2RlZmluZSBNU1JfSzdfRklEX1ZJRF9DVEwJCTB4QzAwMTAwNDEKKyNk ZWZpbmUgTVNSX0s3X0ZJRF9WSURfU1RBVFVTCQkweEMwMDEwMDQyCisKKy8qIGV4dGVuZGVkIGZl YXR1cmUgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTVNSX0VGRVIgCQkJMHhjMDAwMDA4MAorCisvKiBF RkVSIGJpdHM6ICovCisKKy8qIEV4ZWN1dGUgRGlzYWJsZSBlbmFibGUgKi8KKyNkZWZpbmUgX0VG RVJfTlgJCQkxMQorI2RlZmluZSBFRkVSX05YCQkJCSgxPDxfRUZFUl9OWCkKKwogLyogQ2VudGF1 ci1IYXVscy9JRFQgZGVmaW5lZCBNU1JzLiAqLwogI2RlZmluZSBNU1JfSURUX0ZDUjEJCQkweDEw NwogI2RlZmluZSBNU1JfSURUX0ZDUjIJCQkweDEwOApAQCAtMTk1LDYgKzI0NSw3IEBACiAvKiBW SUEgQ3lyaXggZGVmaW5lZCBNU1JzKi8KICNkZWZpbmUgTVNSX1ZJQV9GQ1IJCQkweDExMDcKICNk ZWZpbmUgTVNSX1ZJQV9MT05HSEFVTAkJMHgxMTBhCisjZGVmaW5lIE1TUl9WSUFfUk5HCQkJMHgx MTBiCiAjZGVmaW5lIE1TUl9WSUFfQkNSMgkJCTB4MTE0NwogCiAvKiBUcmFuc21ldGEgZGVmaW5l ZCBNU1JzICovCmRpZmYgLVBOYXVyIHhlbi0yLjAuNS94ZW4vaW5jbHVkZS9hc20teDg2L25taS5o IHhlbi0yLjAuNS1wcm9mL3hlbi9pbmNsdWRlL2FzbS14ODYvbm1pLmgKLS0tIHhlbi0yLjAuNS94 ZW4vaW5jbHVkZS9hc20teDg2L25taS5oCTE5NjktMTItMzEgMTY6MDA6MDAuMDAwMDAwMDAwIC0w ODAwCisrKyB4ZW4tMi4wLjUtcHJvZi94ZW4vaW5jbHVkZS9hc20teDg2L25taS5oCTIwMDUtMDQt MDYgMDk6Mjc6MTMuMDAwMDAwMDAwIC0wNzAwCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiAgbGlu dXgvaW5jbHVkZS9hc20taTM4Ni9ubWkuaAorICovCisjaWZuZGVmIEFTTV9OTUlfSAorI2RlZmlu ZSBBU01fTk1JX0gKKworc3RydWN0IHhlbl9yZWdzOworIAordHlwZWRlZiBpbnQgKCpubWlfY2Fs bGJhY2tfdCkoc3RydWN0IHhlbl9yZWdzICogcmVncywgaW50IGNwdSk7CisgCisvKiogCisgKiBz ZXRfbm1pX2NhbGxiYWNrCisgKgorICogU2V0IGEgaGFuZGxlciBmb3IgYW4gTk1JLiBPbmx5IG9u ZSBoYW5kbGVyIG1heSBiZQorICogc2V0LiBSZXR1cm4gMSBpZiB0aGUgTk1JIHdhcyBoYW5kbGVk LgorICovCit2b2lkIHNldF9ubWlfY2FsbGJhY2sobm1pX2NhbGxiYWNrX3QgY2FsbGJhY2spOwor IAorLyoqIAorICogdW5zZXRfbm1pX2NhbGxiYWNrCisgKgorICogUmVtb3ZlIHRoZSBoYW5kbGVy IHByZXZpb3VzbHkgc2V0LgorICovCit2b2lkIHVuc2V0X25taV9jYWxsYmFjayh2b2lkKTsKKyAK KyNlbmRpZiAvKiBBU01fTk1JX0ggKi8KZGlmZiAtUE5hdXIgeGVuLTIuMC41L3hlbi9pbmNsdWRl L3B1YmxpYy94ZW4uaCB4ZW4tMi4wLjUtcHJvZi94ZW4vaW5jbHVkZS9wdWJsaWMveGVuLmgKLS0t IHhlbi0yLjAuNS94ZW4vaW5jbHVkZS9wdWJsaWMveGVuLmgJMjAwNS0wMy0xMCAxMTo1MjoxMy4w MDAwMDAwMDAgLTA4MDAKKysrIHhlbi0yLjAuNS1wcm9mL3hlbi9pbmNsdWRlL3B1YmxpYy94ZW4u aAkyMDA1LTA0LTA2IDA5OjI3OjEzLjAwMDAwMDAwMCAtMDcwMApAQCAtNCw2ICs0LDEwIEBACiAg KiBHdWVzdCBPUyBpbnRlcmZhY2UgdG8gWGVuLgogICogCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDQs IEsgQSBGcmFzZXIKKyAqCisgKiBNb2RpZmllZCBieSBBcmF2aW5kIE1lbm9uIGZvciBzdXBwb3J0 aW5nIG9wcm9maWxlCisgKiBUaGVzZSBtb2RpZmljYXRpb25zIGFyZToKKyAqIENvcHlyaWdodCAo QykgMjAwNSBIZXdsZXR0LVBhY2thcmQgQ28uCiAgKi8KIAogI2lmbmRlZiBfX1hFTl9QVUJMSUNf WEVOX0hfXwpAQCAtNDgsNiArNTIsNyBAQAogI2RlZmluZSBfX0hZUEVSVklTT1Jfdm1fYXNzaXN0 ICAgICAgICAgICAgMjEKICNkZWZpbmUgX19IWVBFUlZJU09SX3VwZGF0ZV92YV9tYXBwaW5nX290 aGVyZG9tYWluIDIyCiAjZGVmaW5lIF9fSFlQRVJWSVNPUl9zd2l0Y2hfdm04NiAgICAgICAgICAy MworI2RlZmluZSBfX0hZUEVSVklTT1JfcG1jX29wICAgICAgICAgICAgICAgMjQKIAogLyoKICAq IE1VTFRJQ0FMTFMKQEAgLTcxLDcgKzc2LDggQEAKICNkZWZpbmUgVklSUV9ET01fRVhDICAgIDQg IC8qIChET00wKSBFeGNlcHRpb25hbCBldmVudCBmb3Igc29tZSBkb21haW4uICAgKi8KICNkZWZp bmUgVklSUV9QQVJJVFlfRVJSIDUgIC8qIChET00wKSBOTUkgcGFyaXR5IGVycm9yLiAgICAgICAg ICAgICAgICAgICAgKi8KICNkZWZpbmUgVklSUV9JT19FUlIgICAgIDYgIC8qIChET00wKSBOTUkg SS9PIGVycm9yLiAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgTlJfVklSUVMgICAg ICAgIDcKKyNkZWZpbmUgVklSUV9QTUNfT1ZGCTcgIC8qIFBNQyBPdmVyZmxvdyAqLworI2RlZmlu ZSBOUl9WSVJRUyAgICAgICAgOAogCiAvKgogICogTU1VLVVQREFURSBSRVFVRVNUUwpAQCAtMTk4 LDYgKzIwNCwyMSBAQAogI2RlZmluZSBWTUFTU1RfVFlQRV93cml0YWJsZV9wYWdldGFibGVzICAy CiAjZGVmaW5lIE1BWF9WTUFTU1RfVFlQRSAyCiAKKy8qCisgKiBDb21tYW5kcyB0byBIWVBFUlZJ U09SX3BtY19vcCgpLgorICovCisjZGVmaW5lIFBNQ19JTklUCQkwCisjZGVmaW5lIFBNQ19TRVRf QUNUSVZFCQkxCisjZGVmaW5lIFBNQ19TRVRfUEFTU0lWRQkJMgorI2RlZmluZSBQTUNfUkVTRVJW RV9DT1VOVEVSUwkzCisjZGVmaW5lIFBNQ19TRVRVUF9FVkVOVFMJNAorI2RlZmluZSBQTUNfRU5B QkxFX1ZJUlEJCTUKKyNkZWZpbmUgUE1DX1NUQVJUCQk2CisjZGVmaW5lIFBNQ19TVE9QCQk3Cisj ZGVmaW5lIFBNQ19ESVNBQkxFX1ZJUlEJOAorI2RlZmluZSBQTUNfUkVMRUFTRV9DT1VOVEVSUwk5 CisjZGVmaW5lIFBNQ19TSFVURE9XTgkJMTAKKwogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAogdHlw ZWRlZiB1MTYgZG9taWRfdDsKQEAgLTI1Myw2ICsyNzQsOCBAQAogLyogTm8gc3VwcG9ydCBmb3Ig bXVsdGktcHJvY2Vzc29yIGd1ZXN0cy4gKi8KICNkZWZpbmUgTUFYX1ZJUlRfQ1BVUyAxCiAKKyNk ZWZpbmUgTUFYX09QUk9GX0VWRU5UUwkzMgorI2RlZmluZSBNQVhfT1BST0ZfRE9NQUlOUwkyNQkK IC8qCiAgKiBYZW4vZ3Vlc3RvcyBzaGFyZWQgZGF0YSAtLSBwb2ludGVyIHByb3ZpZGVkIGluIHN0 YXJ0X2luZm8uCiAgKiBOQi4gV2UgZXhwZWN0IHRoYXQgdGhpcyBzdHJ1Y3QgaXMgc21hbGxlciB0 aGFuIGEgcGFnZS4KQEAgLTM2MCw2ICszODMsMjAgQEAKIAogICAgIGFyY2hfc2hhcmVkX2luZm9f dCBhcmNoOwogCisgICAgLyogT3Byb2ZpbGUgc3RydWN0dXJlcyAqLworICAgIHU4IGV2ZW50X2hl YWQ7CisgICAgdTggZXZlbnRfdGFpbDsKKyAgICBzdHJ1Y3QgeworCXUzMiBlaXA7CisJdTggbW9k ZTsKKwl1OCBldmVudDsKKyAgICB9IFBBQ0tFRCBldmVudF9sb2dbTUFYX09QUk9GX0VWRU5UU107 CisgICAgdTggbG9zaW5nX3NhbXBsZXM7CisgICAgdTY0IHNhbXBsZXNfbG9zdDsKKyAgICB1MzIg bm1pX3Jlc3RhcnRzOworICAgIHU2NCBhY3RpdmVfc2FtcGxlczsKKyAgICB1NjQgcGFzc2l2ZV9z YW1wbGVzOworICAgIHU2NCBvdGhlcl9zYW1wbGVzOwogfSBQQUNLRUQgc2hhcmVkX2luZm9fdDsK IAogLyoKZGlmZiAtUE5hdXIgeGVuLTIuMC41L3hlbi9pbmNsdWRlL3hlbi9zbXAuaCB4ZW4tMi4w LjUtcHJvZi94ZW4vaW5jbHVkZS94ZW4vc21wLmgKLS0tIHhlbi0yLjAuNS94ZW4vaW5jbHVkZS94 ZW4vc21wLmgJMjAwNS0wMy0xMCAxMTo1MjoxNi4wMDAwMDAwMDAgLTA4MDAKKysrIHhlbi0yLjAu NS1wcm9mL3hlbi9pbmNsdWRlL3hlbi9zbXAuaAkyMDA1LTA0LTA2IDA5OjI3OjEzLjAwMDAwMDAw MCAtMDcwMApAQCAtNDcsNiArNDcsMTggQEAKIAkJCSAgICAgIGludCByZXRyeSwgaW50IHdhaXQp OwogCiAvKgorICogQ2FsbCBhIGZ1bmN0aW9uIG9uIGFsbCBwcm9jZXNzb3JzCisgKi8KK3N0YXRp YyBpbmxpbmUgaW50IG9uX2VhY2hfY3B1KHZvaWQgKCpmdW5jKSAodm9pZCAqaW5mbyksIHZvaWQg KmluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmV0cnksIGludCB3YWl0 KQoreworICAgICAgICBpbnQgcmV0ID0gMDsKKyAgICAgICAgcmV0ID0gc21wX2NhbGxfZnVuY3Rp b24oZnVuYywgaW5mbywgcmV0cnksIHdhaXQpOworICAgICAgICBmdW5jKGluZm8pOworICAgICAg ICByZXR1cm4gcmV0OworfQorCisvKgogICogVHJ1ZSBvbmNlIHRoZSBwZXIgcHJvY2VzcyBpZGxl IGlzIGZvcmtlZAogICovCiBleHRlcm4gaW50IHNtcF90aHJlYWRzX3JlYWR5OwpAQCAtODUsNiAr OTcsNyBAQAogI2RlZmluZSBjcHVfbG9naWNhbF9tYXAoY3B1KQkJCTAKICNkZWZpbmUgY3B1X251 bWJlcl9tYXAoY3B1KQkJCTAKICNkZWZpbmUgc21wX2NhbGxfZnVuY3Rpb24oZnVuYyxpbmZvLHJl dHJ5LHdhaXQpCSh7IDA7IH0pCisjZGVmaW5lIG9uX2VhY2hfY3B1KGZ1bmMsaW5mbyxyZXRyeSx3 YWl0KSAgICAgICAoeyBmdW5jKGluZm8pOyAwOyB9KQogI2RlZmluZSBjcHVfb25saW5lX21hcAkJ CQkxCiAKICNlbmRpZgo ------_=_NextPart_001_01C53CB2.59CE8456 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel ------_=_NextPart_001_01C53CB2.59CE8456-- _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Aravind Menon
2005-Apr-11 16:00 UTC
Re: [Xen-devel] [PATCH] [1/3] Xenoprof: Enabling performance profiling in Xen
On Mon, 2005-04-11 at 17:24, Keir Fraser wrote:> Is the nmi_sanity_check() needed? We shouldn''t lose NMIs: even if we > take one while doing NMI processing, we sholuld retake the NMI as soon > as the first one IRETs. > > There used to be a problem whereby the Xen NMI handler would bail if > it detected it had interrupted Xen at an unfortunate time. I guess the > code in xenoprof was probably added to deal with this situation. If > so then it is no longer needed -- I fix up in a more generic way now > (reschedule the NMI automatically).Thats right, earlier we used to lose NMI samples, and nmi_sanity_check() was added as a guard against that. We may not need this anymore. I had noticed that even with the deferred NMI patch, we used to end up losing NMI samples, though I cannot offer any reasons why. The current xenoprof patch fixes this by forcing a call to the NMI handler after fixing up the segment registers, instead of deferring the call.> Apart from that I guess this is mostly just oprofile source files > pulled out of Linux? Is there much/any other Xen-specific code in the > patch?There are a few changes to allow an NMI callback to be registered, to be called instead of the default NMI handler. This is mostly pulled from the Linux code. Other changes include a new hypercall (do_pmc_op) which provides the interface between domain level profilers and Xen, and some additions to the MSR definition files (again from Linux). Aravind> > -- Keir > > > > > Here is part 1 of the patches for Xenoprof > > > > >> 1) xenoprof-1.0-xen-2.0.5.patch: > > >> - Patch for Xen > > > > Jose Renato Santos > > HP Labs > > xenoprof-1.0-xen-2.0.5.patch > > _______________________________________________ > > Xen-devel mailing list > > Xen-devel@lists.xensource.com > > http://lists.xensource.com/xen-devel > -=- MIME -=- > This is a multi-part message in MIME format. > > ------_=_NextPart_001_01C53CB2.59CE8456 > Content-Type: text/plain; > charset="us-ascii" > Content-Transfer-Encoding: quoted-printable > > > Here is part 1 of the patches for Xenoprof > > >> 1) xenoprof-1.0-xen-2.0.5.patch: > >> - Patch for Xen > > Jose Renato Santos > HP Labs > > ------_=_NextPart_001_01C53CB2.59CE8456 > Content-Type: application/octet-stream; > name="xenoprof-1.0-xen-2.0.5.patch" > Content-Transfer-Encoding: base64 > Content-Description: xenoprof-1.0-xen-2.0.5.patch > Content-Disposition: attachment; > filename="xenoprof-1.0-xen-2.0.5.patch" > > ZGlmZiAtUE5hdXIgeGVuLTIuMC41L3hlbi9hcmNoL3g4Ni9hcGljLmMgeGVuLTIuMC41LXByb2Yv > eGVuL2FyY2gveDg2L2FwaWMuYwotLS0geGVuLTIuMC41L3hlbi9hcmNoL3g4Ni9hcGljLmMJMjAw > NS0wMy0xMCAxMTo1MjoxNS4wMDAwMDAwMDAgLTA4MDAKKysrIHhlbi0yLjAuNS1wcm9mL3hlbi9h > cmNoL3g4Ni9hcGljLmMJMjAwNS0wNC0wNiAwOToyNzoxMy4wMDAwMDAwMDAgLTA3MDAKQEAgLTcy > NCw2ICs3MjQsOSBAQAogCiB1bnNpZ25lZCBpbnQgYXBpY190aW1lcl9pcnFzIFtOUl9DUFVTXTsK > IAorZXh0ZXJuIGludCBubWlfcHJvZmlsaW5nX3N0YXJ0ZWQ7CitleHRlcm4gaW50IG5taV9zYW5p > dHlfY2hlY2soc3RydWN0IHhlbl9yZWdzICogcmVncywgaW50IGNwdSk7CisKIHZvaWQgc21wX2Fw > aWNfdGltZXJfaW50ZXJydXB0KHN0cnVjdCB4ZW5fcmVncyAqIHJlZ3MpCiB7CiAgICAgYWNrX0FQ > SUNfaXJxKCk7CkBAIC03MzEsNiArNzM0LDEyIEBACiAgICAgYXBpY190aW1lcl9pcnFzW3NtcF9w > cm9jZXNzb3JfaWQoKV0rKzsKICAgICBwZXJmY19pbmNyYyhhcGljX3RpbWVyKTsKIAorICAgIC8q > ICB3ZSBtYXkgbG9zZSBOTUkgc2FtcGxlcyBmb3Igc2V2ZXJhbCByZWFzb25zLgorCUhlcmUsIHdl > IHByb3RlY3QgYWdhaW5zdCB0aGF0IGJ5IGRvaW5nIGFuIG5taSBzYW5pdHkKKwljaGVjayBldmVy > eSB0aW1lciBpbnRlcnJ1cHQgb24gZXZlcnkgcHJvY2Vzc29yICovCisgICAgaWYgKG5taV9wcm9m > aWxpbmdfc3RhcnRlZCkKKwlubWlfc2FuaXR5X2NoZWNrKHJlZ3MsIHNtcF9wcm9jZXNzb3JfaWQo > KSk7CisKICAgICByYWlzZV9zb2Z0aXJxKEFDX1RJTUVSX1NPRlRJUlEpOwogfQogCmRpZmYgLVBO > YXVyIHhlbi0yLjAuNS94ZW4vYXJjaC94ODYvTWFrZWZpbGUgeGVuLTIuMC41LXByb2YveGVuL2Fy > Y2gveDg2L01ha2VmaWxlCi0tLSB4ZW4tMi4wLjUveGVuL2FyY2gveDg2L01ha2VmaWxlCTIwMDUt > MDMtMTAgMTE6NTI6MTMuMDAwMDAwMDAwIC0wODAwCisrKyB4ZW4tMi4wLjUtcHJvZi94ZW4vYXJj > aC94ODYvTWFrZWZpbGUJMjAwNS0wNC0wNyAwOTowNDoxMy4wMDAwMDAwMDAgLTA3MDAKQEAgLTEy > LDcgKzEyLDEwIEBACiAKIE9CSlMgOj0gJChzdWJzdCAkKFRBUkdFVF9TVUJBUkNIKS9hc20tb2Zm > c2V0cy5vLCwkKE9CSlMpKQogCitPQkpTICs9IG9wcm9maWxlL29wcm9maWxlLm8KKwogZGVmYXVs > dDogJChUQVJHRVQpCisJbWFrZSAtQyBvcHJvZmlsZQogCiAkKFRBUkdFVCk6ICQoVEFSR0VUKS1z > eW1zIGJvb3QvbWtlbGYzMgogCS4vYm9vdC9ta2VsZjMyICQoVEFSR0VUKS1zeW1zICQoVEFSR0VU > KSAweDEwMDAwMApAQCAtMzAsMTEgKzMzLDE1IEBACiBib290L21rZWxmMzI6IGJvb3QvbWtlbGYz > Mi5jCiAJJChIT1NUQ0MpICQoSE9TVENGTEFHUykgLW8gJEAgJDwKIAorb3Byb2ZpbGUvb3Byb2Zp > bGUubzoKKwkkKE1BS0UpIC1DIG9wcm9maWxlCisKIGNsZWFuOgogCXJtIC1mICoubyAqLnMgKn4g > Y29yZSBib290LyoubyBib290Lyp+IGJvb3QvY29yZSBib290L21rZWxmMzIKIAlybSAtZiB4ODZf > MzIvKi5vIHg4Nl8zMi8qfiB4ODZfMzIvY29yZQogCXJtIC1mIHg4Nl82NC8qLm8geDg2XzY0Lyp+ > IHg4Nl82NC9jb3JlCiAJcm0gLWYgbXRyci8qLm8gbXRyci8qfiBtdHJyL2NvcmUKKwlybSAtZiBv > cHJvZmlsZS8qLm8KIAogZGVsZXRlLXVuZnJlc2gtZmlsZXM6CiAJIyBub3RoaW5nCmRpZmYgLVBO > YXVyIHhlbi0yLjAuNS94ZW4vYXJjaC94ODYvbWljcm9jb2RlLmMgeGVuLTIuMC41LXByb2YveGVu > L2FyY2gveDg2L21pY3JvY29kZS5jCi0tLSB4ZW4tMi4wLjUveGVuL2FyY2gveDg2L21pY3JvY29k > ZS5jCTIwMDUtMDMtMTAgMTE6NTI6MTMuMDAwMDAwMDAwIC0wODAwCisrKyB4ZW4tMi4wLjUtcHJv > Zi94ZW4vYXJjaC94ODYvbWljcm9jb2RlLmMJMjAwNS0wNC0wNiAwOToyNzoxMy4wMDAwMDAwMDAg > LTA3MDAKQEAgLTg3LDEzICs4Nyw2IEBACiAjZGVmaW5lIHZtYWxsb2MoX3MpIHhtYWxsb2MoX3Mp > CiAjZGVmaW5lIHZmcmVlKF9wKSB4ZnJlZShfcCkKICNkZWZpbmUgbnVtX29ubGluZV9jcHVzKCkg > c21wX251bV9jcHVzCi1zdGF0aWMgaW5saW5lIGludCBvbl9lYWNoX2NwdSgKLSAgICB2b2lkICgq > ZnVuYykgKHZvaWQgKmluZm8pLCB2b2lkICppbmZvLCBpbnQgcmV0cnksIGludCB3YWl0KQotewot > ICAgIGludCByZXQgPSBzbXBfY2FsbF9mdW5jdGlvbihmdW5jLCBpbmZvLCByZXRyeSwgd2FpdCk7 > Ci0gICAgZnVuYyhpbmZvKTsKLSAgICByZXR1cm4gcmV0OwotfQogCiAjaWYgMAogTU9EVUxFX0RF > U0NSSVBUSU9OKCJJbnRlbCBDUFUgKElBLTMyKSBNaWNyb2NvZGUgVXBkYXRlIERyaXZlciIpOwpk > aWZmIC1QTmF1ciB4ZW4tMi4wLjUveGVuL2FyY2gveDg2L25taS5jIHhlbi0yLjAuNS1wcm9mL3hl > bi9hcmNoL3g4Ni9ubWkuYwotLS0geGVuLTIuMC41L3hlbi9hcmNoL3g4Ni9ubWkuYwkyMDA1LTAz > LTEwIDExOjUyOjEzLjAwMDAwMDAwMCAtMDgwMAorKysgeGVuLTIuMC41LXByb2YveGVuL2FyY2gv > eDg2L25taS5jCTIwMDUtMDQtMDYgMDk6Mjc6MTMuMDAwMDAwMDAwIC0wNzAwCkBAIC01LDYgKzUs > MTAgQEAKICAqCiAgKiAgU3RhcnRlZCBieSBJbmdvIE1vbG5hciA8bWluZ29AcmVkaGF0LmNvbT4K > ICAqCisgKiBNb2RpZmllZCBieSBBcmF2aW5kIE1lbm9uIGZvciBzdXBwb3J0aW5nIG9wcm9maWxl > CisgKiBUaGVzZSBtb2RpZmljYXRpb25zIGFyZToKKyAqIENvcHlyaWdodCAoQykgMjAwNSBIZXds > ZXR0LVBhY2thcmQgQ28uCisgKgogICogIEZpeGVzOgogICogIE1pa2FlbCBQZXR0ZXJzc29uCTog > QU1EIEs3IHN1cHBvcnQgZm9yIGxvY2FsIEFQSUMgTk1JIHdhdGNoZG9nLgogICogIE1pa2FlbCBQ > ZXR0ZXJzc29uCTogUG93ZXIgTWFuYWdlbWVudCBmb3IgbG9jYWwgQVBJQyBOTUkgd2F0Y2hkb2cu > CkBAIC0zNCw2ICszOCwyOCBAQAogCiBleHRlcm4gaW50IGxvZ2ljYWxfcHJvY19pZFtdOwogCisv > KgorICogbGFwaWNfbm1pX293bmVyIHRyYWNrcyB0aGUgb3duZXJzaGlwIG9mIHRoZSBsYXBpYyBO > TUkgaGFyZHdhcmU6CisgKiAtIGl0IG1heSBiZSByZXNlcnZlZCBieSBzb21lIG90aGVyIGRyaXZl > ciwgb3Igbm90CisgKiAtIHdoZW4gbm90IHJlc2VydmVkIGJ5IHNvbWUgb3RoZXIgZHJpdmVyLCBp > dCBtYXkgYmUgdXNlZCBmb3IKKyAqICAgdGhlIE5NSSB3YXRjaGRvZywgb3Igbm90CisgKgorICog > VGhpcyBpcyBtYWludGFpbmVkIHNlcGFyYXRlbHkgZnJvbSBubWlfYWN0aXZlIGJlY2F1c2UgdGhl > IE5NSQorICogd2F0Y2hkb2cgbWF5IGFsc28gYmUgZHJpdmVuIGZyb20gdGhlIEkvTyBBUElDIHRp > bWVyLgorICovCitzdGF0aWMgc3BpbmxvY2tfdCBsYXBpY19ubWlfb3duZXJfbG9jayA9IFNQSU5f > TE9DS19VTkxPQ0tFRDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbGFwaWNfbm1pX293bmVyOworI2Rl > ZmluZSBMQVBJQ19OTUlfV0FUQ0hET0cgICAgICAoMTw8MCkKKyNkZWZpbmUgTEFQSUNfTk1JX1JF > U0VSVkVEICAgICAgKDE8PDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg > ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg > ICAgICAgICAgICAgICAgCisvKiBubWlfYWN0aXZlOgorICogKzE6IHRoZSBsYXBpYyBOTUkgd2F0 > Y2hkb2cgaXMgYWN0aXZlLCBidXQgY2FuIGJlIGRpc2FibGVkCisgKiAgMDogdGhlIGxhcGljIE5N > SSB3YXRjaGRvZyBoYXMgbm90IGJlZW4gc2V0IHVwLCBhbmQgY2Fubm90CisgKiAgICAgYmUgZW5h > YmxlZAorICogLTE6IHRoZSBsYXBpYyBOTUkgd2F0Y2hkb2cgaXMgZGlzYWJsZWQsIGJ1dCBjYW4g > YmUgZW5hYmxlZAorICovCitpbnQgbm1pX2FjdGl2ZTsKKwogI2RlZmluZSBLN19FVk5UU0VMX0VO > QUJMRQkoMSA8PCAyMikKICNkZWZpbmUgSzdfRVZOVFNFTF9JTlQJCSgxIDw8IDIwKQogI2RlZmlu > ZSBLN19FVk5UU0VMX09TCQkoMSA8PCAxNykKQEAgLTczLDkgKzk5LDkgQEAKICAqLwogI2RlZmlu > ZSBNU1JfUDRfSVFfQ09VTlRFUjAJMHgzMEMKICNkZWZpbmUgTVNSX1A0X0lRX0NPVU5URVIxCTB4 > MzBECi0jZGVmaW5lIE1TUl9QNF9JUV9DQ0NSMAkJMHgzNkMKLSNkZWZpbmUgTVNSX1A0X0lRX0ND > Q1IxCQkweDM2RAotI2RlZmluZSBNU1JfUDRfQ1JVX0VTQ1IwCTB4M0I4IC8qIEVTQ1Igbm8uIDQg > Ki8KKy8vI2RlZmluZSBNU1JfUDRfSVFfQ0NDUjAJCTB4MzZDCisvLyNkZWZpbmUgTVNSX1A0X0lR > X0NDQ1IxCQkweDM2RAorLy8jZGVmaW5lIE1TUl9QNF9DUlVfRVNDUjAJMHgzQjggLyogRVNDUiBu > by4gNCAqLwogI2RlZmluZSBQNF9OTUlfQ1JVX0VTQ1IwIFwKICAgICAoUDRfRVNDUl9FVkVOVF9T > RUxFQ1QoMHgzRil8UDRfRVNDUl9PUzB8UDRfRVNDUl9VU1IwfCBcCiAgICAgIFA0X0VTQ1JfT1Mx > fFA0X0VTQ1JfVVNSMSkKQEAgLTEzMSw2ICsxNTcsNjkgQEAKICAqIE9yaWdpbmFsIGNvZGUgd3Jp > dHRlbiBieSBLZWl0aCBPd2Vucy4KICAqLwogCitzdGF0aWMgdm9pZCBkaXNhYmxlX2xhcGljX25t > aV93YXRjaGRvZyh2b2lkKQoreworICAgICAgICBpZiAobm1pX2FjdGl2ZSA8PSAwKQorICAgICAg > ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgc3dpdGNoIChib290X2NwdV9kYXRhLng4Nl92ZW5k > b3IpIHsKKyAgICAgICAgY2FzZSBYODZfVkVORE9SX0FNRDoKKyAgICAgICAgICAgICAgICB3cm1z > cihNU1JfSzdfRVZOVFNFTDAsIDAsIDApOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg > ICBjYXNlIFg4Nl9WRU5ET1JfSU5URUw6CisgICAgICAgICAgICAgICAgc3dpdGNoIChib290X2Nw > dV9kYXRhLng4NikgeworICAgICAgICAgICAgICAgIGNhc2UgNjoKKyAgICAgICAgICAgICAgICAg > ICAgICAgIHdybXNyKE1TUl9QNl9FVk5UU0VMMCwgMCwgMCk7CisgICAgICAgICAgICAgICAgICAg > ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDE1OgorCQkJaWYgKGxvZ2ljYWxfcHJv > Y19pZFtzbXBfcHJvY2Vzc29yX2lkKCldID09IDApCisJCQl7CisgICAgICAgICAgICAgICAgICAg > ICAgICAJd3Jtc3IoTVNSX1A0X0lRX0NDQ1IwLCAwLCAwKTsKKwkgICAgICAgICAgICAgICAgICAg > ICAgICB3cm1zcihNU1JfUDRfQ1JVX0VTQ1IwLCAwLCAwKTsKKwkJCX0gZWxzZSB7CisJCQkJd3Jt > c3IoTVNSX1A0X0lRX0NDQ1IxLCAwLCAwKTsJCisJCQl9CisgICAgICAgICAgICAgICAgICAgICAg > ICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg > ICAgIH0KKyAgICAgICAgbm1pX2FjdGl2ZSA9IC0xOworICAgICAgICAvKiB0ZWxsIGRvX25taSgp > IGFuZCBvdGhlcnMgdGhhdCB3ZSdyZSBub3QgYWN0aXZlIGFueSBtb3JlICovCisgICAgICAgIG5t > aV93YXRjaGRvZyA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIGVuYWJsZV9sYXBpY19ubWlfd2F0Y2hk > b2codm9pZCkKK3sKKyAgICAgICAgaWYgKG5taV9hY3RpdmUgPCAwKSB7CisgICAgICAgICAgICAg > ICAgbm1pX3dhdGNoZG9nID0gTk1JX0xPQ0FMX0FQSUM7CisgICAgICAgICAgICAgICAgc2V0dXBf > YXBpY19ubWlfd2F0Y2hkb2coKTsKKyAgICAgICAgfQorfQorCitpbnQgcmVzZXJ2ZV9sYXBpY19u > bWkodm9pZCkKK3sKKyAgICAgICAgdW5zaWduZWQgaW50IG9sZF9vd25lcjsKKyAgICAgICAgc3Bp > bl9sb2NrKCZsYXBpY19ubWlfb3duZXJfbG9jayk7CisgICAgICAgIG9sZF9vd25lciA9IGxhcGlj > X25taV9vd25lcjsKKyAgICAgICAgbGFwaWNfbm1pX293bmVyIHw9IExBUElDX05NSV9SRVNFUlZF > RDsKKyAgICAgICAgc3Bpbl91bmxvY2soJmxhcGljX25taV9vd25lcl9sb2NrKTsKKyAgICAgICAg > aWYgKG9sZF9vd25lciAmIExBUElDX05NSV9SRVNFUlZFRCkKKyAgICAgICAgICAgICAgICByZXR1 > cm4gLUVCVVNZOworICAgICAgICBpZiAob2xkX293bmVyICYgTEFQSUNfTk1JX1dBVENIRE9HKQor > ICAgICAgICAgICAgICAgIGRpc2FibGVfbGFwaWNfbm1pX3dhdGNoZG9nKCk7CisgICAgICAgIHJl > dHVybiAwOworfQorCit2b2lkIHJlbGVhc2VfbGFwaWNfbm1pKHZvaWQpCit7CisgICAgICAgIHVu > c2lnbmVkIGludCBuZXdfb3duZXI7CisgICAgICAgIHNwaW5fbG9jaygmbGFwaWNfbm1pX293bmVy > X2xvY2spOworICAgICAgICBuZXdfb3duZXIgPSBsYXBpY19ubWlfb3duZXIgJiB+TEFQSUNfTk1J > X1JFU0VSVkVEOworICAgICAgICBsYXBpY19ubWlfb3duZXIgPSBuZXdfb3duZXI7CisgICAgICAg > IHNwaW5fdW5sb2NrKCZsYXBpY19ubWlfb3duZXJfbG9jayk7CisgICAgICAgIGlmIChuZXdfb3du > ZXIgJiBMQVBJQ19OTUlfV0FUQ0hET0cpCisgICAgICAgICAgICAgICAgZW5hYmxlX2xhcGljX25t > aV93YXRjaGRvZygpOworfQorCiBzdGF0aWMgdm9pZCBfX3BtaW5pdCBjbGVhcl9tc3JfcmFuZ2Uo > dW5zaWduZWQgaW50IGJhc2UsIHVuc2lnbmVkIGludCBuKQogewogICAgIHVuc2lnbmVkIGludCBp > OwpAQCAtMjU1LDYgKzM0NCw4IEBACiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuOwogICAg > IH0KKyAgICBsYXBpY19ubWlfb3duZXIgPSBMQVBJQ19OTUlfV0FUQ0hET0c7CisgICAgbm1pX2Fj > dGl2ZSA9IDE7CiAgICAgbm1pX3BtX2luaXQoKTsKIH0KIApAQCAtMzE5LDMgKzQxMCw3IEBACiAg > ICAgICAgIH0KICAgICB9CiB9CisKK0VYUE9SVF9TWU1CT0wocmVzZXJ2ZV9sYXBpY19ubWkpOwor > RVhQT1JUX1NZTUJPTChyZWxlYXNlX2xhcGljX25taSk7CisKZGlmZiAtUE5hdXIgeGVuLTIuMC41 > L3hlbi9hcmNoL3g4Ni9vcHJvZmlsZS9NYWtlZmlsZSB4ZW4tMi4wLjUtcHJvZi94ZW4vYXJjaC94 > ODYvb3Byb2ZpbGUvTWFrZWZpbGUKLS0tIHhlbi0yLjAuNS94ZW4vYXJjaC94ODYvb3Byb2ZpbGUv > TWFrZWZpbGUJMTk2OS0xMi0zMSAxNjowMDowMC4wMDAwMDAwMDAgLTA4MDAKKysrIHhlbi0yLjAu > NS1wcm9mL3hlbi9hcmNoL3g4Ni9vcHJvZmlsZS9NYWtlZmlsZQkyMDA1LTA0LTA2IDA5OjI3OjEz > LjAwMDAwMDAwMCAtMDcwMApAQCAtMCwwICsxLDM0IEBACisKK2luY2x1ZGUgJChCQVNFRElSKS9S > dWxlcy5taworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCisjIEZMQUdT > IGlzIGlkZW50aWNhbCB0byBDRkxBR1MgZXhjZXB0IGZvciAtV2Vycm9yICAgICAgICAgICAgICAg > ICAgICAgICAgICAgIAorRkxBR1MgIDo9IC1ub3N0ZGluYyAtZm5vLWJ1aWx0aW4gLWZuby1jb21t > b24gLWZuby1zdHJpY3QtYWxpYXNpbmcKK0ZMQUdTICArPSAtaXdpdGhwcmVmaXggaW5jbHVkZSAt > V2FsbCAtcGlwZQorRkxBR1MgICs9IC1JJChCQVNFRElSKS9pbmNsdWRlIC1Xbm8tcG9pbnRlci1h > cml0aCAtV3JlZHVuZGFudC1kZWNscworCitpZmVxICgkKG9wdGltaXplKSx5KQorRkxBR1MgICs9 > IC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlcgorZWxzZQoreDg2XzMyL3VzZXJjb3B5Lm86IENGTEFH > UyArPSAtTzEKK2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg > ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorIyBQcmV2 > ZW50IGZsb2F0aW5nLXBvaW50IHZhcmlhYmxlcyBmcm9tIGNyZWVwaW5nIGludG8gWGVuLgorRkxB > R1MgICs9IC1tc29mdC1mbG9hdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg > ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK2lm > ZXEgKCQoVEFSR0VUX1NVQkFSQ0gpLHg4Nl8zMikKK0ZMQUdTICArPSAtbTMyIC1tYXJjaD1pNjg2 > CitMREZMQUdTIDo9IC0tb2Zvcm1hdCBlbGYzMi1pMzg2CitlbmRpZgorICAgICAgICAgICAgICAg > ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg > ICAgICAgICAgICAgICAgICAKK2lmZXEgKCQoVEFSR0VUX1NVQkFSQ0gpLHg4Nl82NCkKK0ZMQUdT > ICArPSAtbTY0IC1tbm8tcmVkLXpvbmUgLWZwaWMgLWZuby1yZW9yZGVyLWJsb2NrcworRkxBR1Mg > ICs9IC1mbm8tYXN5bmNocm9ub3VzLXVud2luZC10YWJsZXMKK2VuZGlmCisKK2RlZmF1bHQ6ICQo > T0JKUykgCisJJChMRCkgJChMREZMQUdTKSAtciAtbyBvcHJvZmlsZS5vICQoT0JKUykKKwkKKyUu > bzogJS5jICQoSERSUykgTWFrZWZpbGUKKwkkKENDKSAkKEZMQUdTKSAtYyAkPCAtbyAkQAorCmRp > ZmYgLVBOYXVyIHhlbi0yLjAuNS94ZW4vYXJjaC94ODYvb3Byb2ZpbGUvI01ha2VmaWxlIyB4ZW4t > Mi4wLjUtcHJvZi94ZW4vYXJjaC94ODYvb3Byb2ZpbGUvI01ha2VmaWxlIwotLS0geGVuLTIuMC41 > L3hlbi9hcmNoL3g4Ni9vcHJvZmlsZS8jTWFrZWZpbGUjCTE5NjktMTItMzEgMTY6MDA6MDAuMDAw > MDAwMDAwIC0wODAwCisrKyB4ZW4tMi4wLjUtcHJvZi94ZW4vYXJjaC94ODYvb3Byb2ZpbGUvI01h > a2VmaWxlIwkyMDA1LTA0LTA2IDA5OjUzOjUzLjAwMDAwMDAwMCAtMDcwMApAQCAtMCwwICsxLDM0 > IEBACisKK2luY2x1ZGUgJChCQVNFRElSKS9SdWxlcy5taworICAgICAgICAgICAgICAgICAgICAg > ICAgICAgICAgICAgICAgIAorCisjIEZMQUdTIGlzIGlkZW50aWNhbCB0byBDRkxBR1MgZXhjZXB0 > IGZvciAtV2Vycm9yICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorRkxBR1MgIDo9IC1ub3N0 > ZGluYyAtZm5vLWJ1aWx0aW4gLWZuby1jb21tb24gLWZuby1zdHJpY3QtYWxpYXNpbmcKK0ZMQUdT > ICArPSAtaXdpdGhwcmVmaXggaW5jbHVkZSAtV2FsbCAtcGlwZQorRkxBR1MgICs9IC1JJChCQVNF > RElSKS9pbmNsdWRlIC1Xbm8tcG9pbnRlci1hcml0aCAtV3JlZHVuZGFudC1kZWNscworCitpZmVx > ICgkKG9wdGltaXplKSx5KQorRkxBR1MgICs9IC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlcgorZWxz > ZQoreDg2XzMyL3VzZXJjb3B5Lm86IENGTEFHUyArPSAtTzEKK2VuZGlmCisgICAgICAgICAgICAg > ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg > ICAgICAgICAgICAgICAgICAgIAorIyBQcmV2ZW50IGZsb2F0aW5nLXBvaW50IHZhcmlhYmxlcyBm > cm9tIGNyZWVwaW5nIGludG8gWGVuLgorRkxBR1MgICs9IC1tc29mdC1mbG9hdAorICAgICAgICAg > ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg > ICAgICAgICAgICAgICAgICAgICAgICAKK2lmZXEgKCQoVEFSR0VUX1NVQkFSQ0gpLHg4Nl8zMikK > K0ZMQUdTICArPSAtbTMyIC1tYXJjaD1pNjg2CitMREZMQUdTIDo9IC0tb2Zvcm1hdCBlbGYzMi1p > Mzg2CitlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg > ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK2lmZXEgKCQoVEFS > R0VUX1NVQkFSQ0gpLHg4Nl82NCkKK0ZMQUdTICArPSAtbTY0IC1tbm8tcmVkLXpvbmUgLWZwaWMg > LWZuby1yZW9yZGVyLWJsb2NrcworRkxBR1MgICs9IC1mbm8tYXN5bmNocm9ub3VzLXVud2luZC10 > YWJsZXMKK2VuZGlmCisKK2RlZmF1bHQ6ICQoT0JKUykgCisJJChMRCkgJChMREZMQUdTKSAtciAt > byBvcHJvZmlsZS5vICQoT0JKUykKKwkKKyUubzogJS5jICQoSERSUykgTWFrZWZpbGUKKwkkKEND > KSAkKEZMQUdTKSAtYyAkPCAtbyAkQAorCmRpZmYgLVBOYXVyIHhlbi0yLjAuNS94ZW4vYXJjaC94 > ODYvb3Byb2ZpbGUvbm1pX2ludC5jIHhlbi0yLjAuNS1wcm9mL3hlbi9hcmNoL3g4Ni9vcHJvZmls > ZS9ubWlfaW50LmMKLS0tIHhlbi0yLjAuNS94ZW4vYXJjaC94ODYvb3Byb2ZpbGUvbm1pX2ludC5j > CTE5NjktMTItMzEgMTY6MDA6MDAuMDAwMDAwMDAwIC0wODAwCisrKyB4ZW4tMi4wLjUtcHJvZi94 > ZW4vYXJjaC94ODYvb3Byb2ZpbGUvbm1pX2ludC5jCTIwMDUtMDQtMDcgMTY6NDA6MjAuMDAwMDAw > MDAwIC0wNzAwCkBAIC0wLDAgKzEsNDMxIEBACisvKioKKyAqIEBmaWxlIG5taV9pbnQuYworICoK > KyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycworICogQHJlbWFyayBS > ZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIEpvaG4gTGV2b24gPGxldm9uQG1v > dmVtZW50YXJpYW4ub3JnPgorICoKKyAqIE1vZGlmaWVkIGJ5IEFyYXZpbmQgTWVub24gZm9yIFhl > bgorICogVGhlc2UgbW9kaWZpY2F0aW9ucyBhcmU6CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgSGV3 > bGV0dC1QYWNrYXJkIENvLgorICovCisKKyNpbmNsdWRlIDx4ZW4vZXZlbnQuaD4KKyNpbmNsdWRl > IDx4ZW4vdHlwZXMuaD4KKyNpbmNsdWRlIDx4ZW4vZXJybm8uaD4KKyNpbmNsdWRlIDx4ZW4vaW5p > dC5oPgorI2luY2x1ZGUgPHB1YmxpYy94ZW4uaD4KKyNpbmNsdWRlIDxhc20vbm1pLmg+CisjaW5j > bHVkZSA8YXNtL21zci5oPgorI2luY2x1ZGUgPGFzbS9hcGljLmg+CisgCisjaW5jbHVkZSAib3Bf > Y291bnRlci5oIgorI2luY2x1ZGUgIm9wX3g4Nl9tb2RlbC5oIgorIAorc3RhdGljIHN0cnVjdCBv > cF94ODZfbW9kZWxfc3BlYyBjb25zdCAqIG1vZGVsOworc3RhdGljIHN0cnVjdCBvcF9tc3JzIGNw > dV9tc3JzW05SX0NQVVNdOworc3RhdGljIHVuc2lnbmVkIGxvbmcgc2F2ZWRfbHZ0cGNbTlJfQ1BV > U107CisKKyNkZWZpbmUgVklSUV9CSVRNQVNLX1NJWkUJKE1BWF9PUFJPRl9ET01BSU5TLzMyICsg > MSkKKworZXh0ZXJuIGludCBhY3RpdmVfZG9tYWluc1tNQVhfT1BST0ZfRE9NQUlOU107CitleHRl > cm4gdW5zaWduZWQgaW50IGFkb21haW5zOworCitleHRlcm4gc3RydWN0IGRvbWFpbiAqIHByaW1h > cnlfcHJvZmlsZXI7CitleHRlcm4gc3RydWN0IGRvbWFpbiAqIGFkb21haW5fcHRyc1tNQVhfT1BS > T0ZfRE9NQUlOU107CitleHRlcm4gdW5zaWduZWQgbG9uZyB2aXJxX292Zl9wZW5kaW5nW1ZJUlFf > QklUTUFTS19TSVpFXTsKKworZXh0ZXJuIGludCBpc19hY3RpdmUoc3RydWN0IGRvbWFpbiAqZCk7 > CitleHRlcm4gaW50IGFjdGl2ZV9pZChzdHJ1Y3QgZG9tYWluICpkKTsKK2V4dGVybiBpbnQgaXNf > cGFzc2l2ZShzdHJ1Y3QgZG9tYWluICpkKTsKK2V4dGVybiBpbnQgaXNfcHJvZmlsZWQoc3RydWN0 > IGRvbWFpbiAqZCk7CisKKworaW50IG5taV9wcm9maWxpbmdfc3RhcnRlZCA9IDA7CisKK2ludCBh > Y3RpdmVfdmlycV9jb3VudCA9IDA7CitpbnQgcGFzc2l2ZV92aXJxX2NvdW50ID0gMDsKK2ludCBv > dGhlcl92aXJxX2NvdW50ID0gMDsKK2ludCBvdGhlcl9pZCA9IC0xOworaW50IHhlbl9jb3VudCA9 > IDA7CitpbnQgZG9tX2NvdW50ID0gMDsgCitpbnQgb3ZmID0gMDsKKworaW50IG5taV9jYWxsYmFj > ayhzdHJ1Y3QgeGVuX3JlZ3MgKiByZWdzLCBpbnQgY3B1KQoreworCWludCB4ZW5fbW9kZSA9IDA7 > CisKKwlvdmYgPSBtb2RlbC0+Y2hlY2tfY3RycyhjcHUsICZjcHVfbXNyc1tjcHVdLCByZWdzKTsK > Kwl4ZW5fbW9kZSA9IFJJTkdfMChyZWdzKTsKKwlpZiAob3ZmKSB7CisJCWlmICh4ZW5fbW9kZSkK > KwkJCXhlbl9jb3VudCsrOworCQllbHNlCisJCQlkb21fY291bnQrKzsKKworCQlpZiAoaXNfYWN0 > aXZlKGN1cnJlbnQpKSB7CisJCS8qIFRoaXMgaXMgbGlnaHRseSBpbmNvcnJlY3QuIElmIHdlIGRv > IG5vdCBkZWxpdmVyIAorCQkJT1ZGIHZpcnR1YWwgaW50ZXJydXB0cyBpbiBhIHN5bmNocm9ub3Vz > IAorCQkJbWFubmVyLCBhIHByb2Nlc3Mgc3dpdGNoIG1heSBoYXBwZW4gaW4gdGhlIGRvbWFpbiAK > KwkJCWJldHdlZW4gdGhlIHBvaW50IHRoZSBzYW1wbGUgd2FzIGNvbGxlY3RlZCBhbmQgCisJCQl0 > aGUgcG9pbnQgYXQgd2hpY2ggYSBWSVJRIHdhcyBkZWxpdmVyZWQuIEhvd2V2ZXIsIAorCQkJaXQg > aXMgbm90IHNhZmUgdG8gY2FsbCBzZW5kX2d1ZXN0X3ZpcnEgZnJvbSB0aGlzIAorCQkJTk1JIGNv > bnRleHQsIGl0IG1heSBsZWFkIHRvIGEgZGVhZGxvY2sgc2luY2UgTk1JcyBhcmUgCisJCQl1bm1h > c2thYmxlLiBPbmUgb3B0aW1pemF0aW9uIHRoYXQgd2UgY2FuIGRvIGlzIAorCQkJdGhhdCBpZiB0 > aGUgc2FtcGxlIG9jY3VycyB3aGlsZSBkb21haW4gY29kZSBpcyAKKwkJCXJ1bm5uZywgd2Uga25v > dyB0aGF0IGl0IGlzIHNhZmUgdG8gY2FsbCAKKwkJCXNlbmRfZ3Vlc3RfdmlycSwgc2luY2Ugd2Ug > a25vdyBubyBYZW4gY29kZSAKKwkJCWlzIHJ1bm5pbmcgYXQgdGhhdCB0aW1lLgorCQkJSG93ZXZl > ciwgdGhpcyBtYXkgZGlzdG9ydCB0aGUgc2FtcGxlIGRpc3RyaWJ1dGlvbiwKKwkJCWJlY2F1c2Ug > d2UgbWF5IGxvc2UgbW9yZSBYZW4gbW9kZSBzYW1wbGVzLiovCisJCQlhY3RpdmVfdmlycV9jb3Vu > dCsrOworCQkJaWYgKCF4ZW5fbW9kZSkgeworCQkJCXNlbmRfZ3Vlc3RfdmlycShjdXJyZW50LCBW > SVJRX1BNQ19PVkYpOworCQkJCWNsZWFyX2JpdChhY3RpdmVfaWQoY3VycmVudCksICZ2aXJxX292 > Zl9wZW5kaW5nWzBdKTsKKwkJCX0gZWxzZSAKKwkJCQlzZXRfYml0KGFjdGl2ZV9pZChjdXJyZW50 > KSwgJnZpcnFfb3ZmX3BlbmRpbmdbMF0pOworCQkJcHJpbWFyeV9wcm9maWxlci0+c2hhcmVkX2lu > Zm8tPmFjdGl2ZV9zYW1wbGVzKys7CisJCX0KKwkJZWxzZSBpZiAoaXNfcGFzc2l2ZShjdXJyZW50 > KSkgeworCQkJc2V0X2JpdChhY3RpdmVfaWQocHJpbWFyeV9wcm9maWxlciksICZ2aXJxX292Zl9w > ZW5kaW5nWzBdKTsKKwkJCXBhc3NpdmVfdmlycV9jb3VudCsrOworCQkJcHJpbWFyeV9wcm9maWxl > ci0+c2hhcmVkX2luZm8tPnBhc3NpdmVfc2FtcGxlcysrOworCQl9CisJCWVsc2UgeworCQkJb3Ro > ZXJfdmlycV9jb3VudCsrOworCQkJb3RoZXJfaWQgPSBjdXJyZW50LT5pZDsKKwkJCXByaW1hcnlf > cHJvZmlsZXItPnNoYXJlZF9pbmZvLT5vdGhlcl9zYW1wbGVzKys7CisJCX0KKwl9CisJcmV0dXJu > IDE7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfbXNycyh2b2lkKQoreworCWludCBpOworCWZvciAo > aSA9IDA7IGkgPCBOUl9DUFVTOyArK2kpIHsKKwkJeGZyZWUoY3B1X21zcnNbaV0uY291bnRlcnMp > OworCQljcHVfbXNyc1tpXS5jb3VudGVycyA9IE5VTEw7CisJCXhmcmVlKGNwdV9tc3JzW2ldLmNv > bnRyb2xzKTsKKwkJY3B1X21zcnNbaV0uY29udHJvbHMgPSBOVUxMOworCX0KK30KKyAKK3N0YXRp > YyBpbnQgYWxsb2NhdGVfbXNycyh2b2lkKQoreworCWludCBzdWNjZXNzID0gMTsKKwlzaXplX3Qg > Y29udHJvbHNfc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgb3BfbXNyKSAqIG1vZGVsLT5udW1fY29udHJv > bHM7CisJc2l6ZV90IGNvdW50ZXJzX3NpemUgPSBzaXplb2Yoc3RydWN0IG9wX21zcikgKiBtb2Rl > bC0+bnVtX2NvdW50ZXJzOworCisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IE5SX0NQVVM7ICsr > aSkgeworCQkvL2lmICghY3B1X29ubGluZShpKSkKKwkJaWYgKCF0ZXN0X2JpdChpLCAmY3B1X29u > bGluZV9tYXApKQorCQkJY29udGludWU7CisKKwkJY3B1X21zcnNbaV0uY291bnRlcnMgPSB4bWFs > bG9jKGNvdW50ZXJzX3NpemUpOworCQlpZiAoIWNwdV9tc3JzW2ldLmNvdW50ZXJzKSB7CisJCQlz > dWNjZXNzID0gMDsKKwkJCWJyZWFrOworCQl9CisJCWNwdV9tc3JzW2ldLmNvbnRyb2xzID0geG1h > bGxvYyhjb250cm9sc19zaXplKTsKKwkJaWYgKCFjcHVfbXNyc1tpXS5jb250cm9scykgeworCQkJ > c3VjY2VzcyA9IDA7CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAoIXN1Y2Nlc3MpCisJCWZyZWVf > bXNycygpOworCisJcmV0dXJuIHN1Y2Nlc3M7Cit9CisKK3N0YXRpYyB2b2lkIG5taV9jcHVfc2F2 > ZV9yZWdpc3RlcnMoc3RydWN0IG9wX21zcnMgKiBtc3JzKQoreworCXVuc2lnbmVkIGludCBjb25z > dCBucl9jdHJzID0gbW9kZWwtPm51bV9jb3VudGVyczsKKwl1bnNpZ25lZCBpbnQgY29uc3QgbnJf > Y3RybHMgPSBtb2RlbC0+bnVtX2NvbnRyb2xzOyAKKwlzdHJ1Y3Qgb3BfbXNyICogY291bnRlcnMg > PSBtc3JzLT5jb3VudGVyczsKKwlzdHJ1Y3Qgb3BfbXNyICogY29udHJvbHMgPSBtc3JzLT5jb250 > cm9sczsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBucl9jdHJzOyArK2kp > IHsKKwkJcmRtc3IoY291bnRlcnNbaV0uYWRkciwKKwkJCWNvdW50ZXJzW2ldLnNhdmVkLmxvdywK > KwkJCWNvdW50ZXJzW2ldLnNhdmVkLmhpZ2gpOworCX0KKyAKKwlmb3IgKGkgPSAwOyBpIDwgbnJf > Y3RybHM7ICsraSkgeworCQlyZG1zcihjb250cm9sc1tpXS5hZGRyLAorCQkJY29udHJvbHNbaV0u > c2F2ZWQubG93LAorCQkJY29udHJvbHNbaV0uc2F2ZWQuaGlnaCk7CisJfQorfQorCitzdGF0aWMg > dm9pZCBubWlfc2F2ZV9yZWdpc3RlcnModm9pZCAqIGR1bW15KQoreworCWludCBjcHUgPSBzbXBf > cHJvY2Vzc29yX2lkKCk7CisJc3RydWN0IG9wX21zcnMgKiBtc3JzID0gJmNwdV9tc3JzW2NwdV07 > CisJbW9kZWwtPmZpbGxfaW5fYWRkcmVzc2VzKG1zcnMpOworCW5taV9jcHVfc2F2ZV9yZWdpc3Rl > cnMobXNycyk7Cit9CisKK2ludCBubWlfcmVzZXJ2ZV9jb3VudGVycyh2b2lkKQoreworCWlmICgh > YWxsb2NhdGVfbXNycygpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIFdlIHdhbGsgYSB0aGlu > IGxpbmUgYmV0d2VlbiBsYXcgYW5kIHJhcGUgaGVyZS4KKwkgKiBXZSBuZWVkIHRvIGJlIGNhcmVm > dWwgdG8gaW5zdGFsbCBvdXIgTk1JIGhhbmRsZXIKKwkgKiB3aXRob3V0IGFjdHVhbGx5IHRyaWdn > ZXJpbmcgYW55IE5NSXMgYXMgdGhpcyB3aWxsCisJICogYnJlYWsgdGhlIGNvcmUgY29kZSBob3Jy > aWZpY2FsbHkuCisJICovCisJLyogRG9uJ3Qgd2UgbmVlZCB0byBkbyB0aGlzIG9uIGFsbCBDUFVz > PyovCisJaWYgKHJlc2VydmVfbGFwaWNfbm1pKCkgPCAwKSB7CisJCWZyZWVfbXNycygpOworCQly > ZXR1cm4gLUVCVVNZOworCX0KKwkvKiBXZSBuZWVkIHRvIHNlcmlhbGl6ZSBzYXZlIGFuZCBzZXR1 > cCBmb3IgSFQgYmVjYXVzZSB0aGUgc3Vic2V0CisJICogb2YgbXNycyBhcmUgZGlzdGluY3QgZm9y > IHNhdmUgYW5kIHNldHVwIG9wZXJhdGlvbnMKKwkgKi8KKwlvbl9lYWNoX2NwdShubWlfc2F2ZV9y > ZWdpc3RlcnMsIE5VTEwsIDAsIDEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBubWlf > Y3B1X3NldHVwKHZvaWQgKiBkdW1teSkKK3sKKwlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgp > OworCXN0cnVjdCBvcF9tc3JzICogbXNycyA9ICZjcHVfbXNyc1tjcHVdOworCW1vZGVsLT5zZXR1 > cF9jdHJzKG1zcnMpOworfQorCitpbnQgbm1pX3NldHVwX2V2ZW50cyh2b2lkKQoreworCW9uX2Vh > Y2hfY3B1KG5taV9jcHVfc2V0dXAsIE5VTEwsIDAsIDEpOworCXJldHVybiAwOworfQorCitpbnQg > bm1pX2VuYWJsZV92aXJxKCkKK3sKKwlzZXRfbm1pX2NhbGxiYWNrKG5taV9jYWxsYmFjayk7CisJ > cmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG5taV9jcHVfc3RhcnQodm9pZCAqIGR1bW15KQor > eworCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJc3RydWN0IG9wX21zcnMgY29uc3Qg > KiBtc3JzID0gJmNwdV9tc3JzW2NwdV07CisJc2F2ZWRfbHZ0cGNbY3B1XSA9IGFwaWNfcmVhZChB > UElDX0xWVFBDKTsKKwlhcGljX3dyaXRlKEFQSUNfTFZUUEMsIEFQSUNfRE1fTk1JKTsKKwltb2Rl > bC0+c3RhcnQobXNycyk7Cit9CisKK2ludCBubWlfc3RhcnQodm9pZCkKK3sKKwlvbl9lYWNoX2Nw > dShubWlfY3B1X3N0YXJ0LCBOVUxMLCAwLCAxKTsKKwlubWlfcHJvZmlsaW5nX3N0YXJ0ZWQgPSAx > OworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBubWlfY3B1X3N0b3Aodm9pZCAqIGR1bW15 > KQoreworCXVuc2lnbmVkIGludCB2OworCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJ > c3RydWN0IG9wX21zcnMgY29uc3QgKiBtc3JzID0gJmNwdV9tc3JzW2NwdV07CisJbW9kZWwtPnN0 > b3AobXNycyk7CisKKwkvKiByZXN0b3JpbmcgQVBJQ19MVlRQQyBjYW4gdHJpZ2dlciBhbiBhcGlj > IGVycm9yIGJlY2F1c2UgdGhlIGRlbGl2ZXJ5CisJICogbW9kZSBhbmQgdmVjdG9yIG5yIGNvbWJp > bmF0aW9uIGNhbiBiZSBpbGxlZ2FsLiBUaGF0J3MgYnkgZGVzaWduOiBvbgorCSAqIHBvd2VyIG9u > IGFwaWMgbHZ0IGNvbnRhaW4gYSB6ZXJvIHZlY3RvciBuciB3aGljaCBhcmUgbGVnYWwgb25seSBm > b3IKKwkgKiBOTUkgZGVsaXZlcnkgbW9kZS4gU28gaW5oaWJpdCBhcGljIGVyciBiZWZvcmUgcmVz > dG9yaW5nIGx2dHBjCisJICovCisJaWYgKCEoYXBpY19yZWFkKEFQSUNfTFZUUEMpICYgQVBJQ19E > TV9OTUkpCisJCXx8IChhcGljX3JlYWQoQVBJQ19MVlRQQykgJiBBUElDX0xWVF9NQVNLRUQpKSB7 > CisJCXByaW50aygibm1pX3N0b3A6IEFQSUMgbm90IGdvb2QgJXBcbiIsIGFwaWNfcmVhZChBUElD > X0xWVFBDKSk7CisJCW1kZWxheSg1MDAwKTsKKwl9CisJdiA9IGFwaWNfcmVhZChBUElDX0xWVEVS > Uik7CisJYXBpY193cml0ZShBUElDX0xWVEVSUiwgdiB8IEFQSUNfTFZUX01BU0tFRCk7CisJYXBp > Y193cml0ZShBUElDX0xWVFBDLCBzYXZlZF9sdnRwY1tjcHVdKTsKKwlhcGljX3dyaXRlKEFQSUNf > TFZURVJSLCB2KTsKK30KKyAKK3ZvaWQgbm1pX3N0b3Aodm9pZCkKK3sKKwlubWlfcHJvZmlsaW5n > X3N0YXJ0ZWQgPSAwOworCW9uX2VhY2hfY3B1KG5taV9jcHVfc3RvcCwgTlVMTCwgMCwgMSk7CisJ > YWN0aXZlX3ZpcnFfY291bnQgPSAwOworCXBhc3NpdmVfdmlycV9jb3VudCA9IDA7CisJb3RoZXJf > dmlycV9jb3VudCA9IDA7CisJeGVuX2NvdW50ID0gMDsKKwlkb21fY291bnQgPSAwOworfQorCitl > eHRlcm4gdW5zaWduZWQgaW50IHJlYWRfY3RyKHN0cnVjdCBvcF9tc3JzIGNvbnN0ICogY29uc3Qg > bXNycywgaW50IGN0cik7CisKK3ZvaWQgbm1pX3Nhbml0eV9jaGVjayhzdHJ1Y3QgeGVuX3JlZ3Mg > KnJlZ3MsIGludCBjcHUpCit7CisJaW50IGk7CisJaW50IG1hc2tlZCA9IDA7CisKKwkvKiBXZSBt > YXkgaGF2ZSBtaXNzZWQgc29tZSBOTUkgaW50ZXJydXB0cyBpZiB3ZSB3ZXJlIGFscmVhZHkgCisJ > CWluIGFuIE5NSSBjb250ZXh0IGF0IHRoYXQgdGltZS4gSWYgdGhpcyBoYXBwZW5zLCB0aGVuIAor > CQl0aGUgY291bnRlcnMgYXJlIG5vdCByZXNldCBhbmQgaW4gdGhlIGNhc2Ugb2YgUDQsIHRoZSAK > KwkJQVBJQyBMVlQgZGlzYWJsZSBtYXNrIGlzIHNldC4gSW4gYm90aCBjYXNlcyB3ZSBlbmQgdXAg > CisJCWxvc2luZyBzYW1wbGVzLiBPbiBQNCwgdGhpcyBjb25kaXRpb24gY2FuIGJlIGRldGVjdGVk > IAorCQlieSBjaGVja2luZyB0aGUgQVBJQyBMVlQgbWFzay4gQnV0IGluIFA2LCB3ZSBuZWVkIHRv > IAorCQlleGFtaW5lIHRoZSBjb3VudGVycyBmb3Igb3ZlcmZsb3cuIFNvLCBldmVyeSB0aW1lciAK > KwkJaW50ZXJydXB0LCB3ZSBjaGVjayB0aGF0IGV2ZXJ5dGhpbmcgaXMgT0sgKi8KKworCWlmIChh > cGljX3JlYWQoQVBJQ19MVlRQQykgJiBBUElDX0xWVF9NQVNLRUQpCisJCW1hc2tlZCA9IDE7CisK > KwlubWlfY2FsbGJhY2socmVncywgY3B1KTsKKworCWlmIChvdmYgJiYgbWFza2VkKSB7CisJCWlm > IChpc19hY3RpdmUoY3VycmVudCkpCisJCQljdXJyZW50LT5zaGFyZWRfaW5mby0+bm1pX3Jlc3Rh > cnRzKys7CisJCWVsc2UgaWYgKGlzX3Bhc3NpdmUoY3VycmVudCkpCisJCQlwcmltYXJ5X3Byb2Zp > bGVyLT5zaGFyZWRfaW5mby0+bm1pX3Jlc3RhcnRzKys7CisJfQorCisJLyppZiAoamlmZmllcyAl > MTAwMCA9PSAwKSB7CQorCQlwcmludGsoImNwdSAlZDogc2FtcGxlIGNvdW50ICVkICVkICVkIGF0 > ICV1XG4iLCBjcHUsIGFjdGl2ZV92aXJxX2NvdW50LCBwYXNzaXZlX3ZpcnFfY291bnQsIG90aGVy > X3ZpcnFfY291bnQsIGppZmZpZXMpOworCQlwcmludGsoIm90aGVyIHRhc2sgaWQgJWRcbiIsIG90 > aGVyX2lkKTsKKwkJcHJpbnRrKCIlZCBpbiB4ZW4sICVkIGluIGRvbWFpblxuIiwgeGVuX2NvdW50 > LCBkb21fY291bnQpOworCQlwcmludGsoImNvdW50ZXJzICVwICVwXG4iLCByZWFkX2N0cigmY3B1 > X21zcnNbY3B1XSwgMCksIHJlYWRfY3RyKCZjcHVfbXNyc1tjcHVdLCAxKSk7CisJfSovCisJCisK > Kwlmb3IgKGkgPSAwOyBpIDwgYWRvbWFpbnM7IGkrKykKKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2Jp > dChpLCAmdmlycV9vdmZfcGVuZGluZ1swXSkpIHsKKwkJCXNlbmRfZ3Vlc3RfdmlycShhZG9tYWlu > X3B0cnNbaV0sIFZJUlFfUE1DX09WRik7CisJCX0KK30KKwordm9pZCBubWlfZGlzYWJsZV92aXJx > KHZvaWQpCit7CisJdW5zZXRfbm1pX2NhbGxiYWNrKCk7Cit9IAorCitzdGF0aWMgdm9pZCBubWlf > cmVzdG9yZV9yZWdpc3RlcnMoc3RydWN0IG9wX21zcnMgKiBtc3JzKQoreworCXVuc2lnbmVkIGlu > dCBjb25zdCBucl9jdHJzID0gbW9kZWwtPm51bV9jb3VudGVyczsKKwl1bnNpZ25lZCBpbnQgY29u > c3QgbnJfY3RybHMgPSBtb2RlbC0+bnVtX2NvbnRyb2xzOyAKKwlzdHJ1Y3Qgb3BfbXNyICogY291 > bnRlcnMgPSBtc3JzLT5jb3VudGVyczsKKwlzdHJ1Y3Qgb3BfbXNyICogY29udHJvbHMgPSBtc3Jz > LT5jb250cm9sczsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBucl9jdHJs > czsgKytpKSB7CisJCXdybXNyKGNvbnRyb2xzW2ldLmFkZHIsCisJCQljb250cm9sc1tpXS5zYXZl > ZC5sb3csCisJCQljb250cm9sc1tpXS5zYXZlZC5oaWdoKTsKKwl9CisgCisJZm9yIChpID0gMDsg > aSA8IG5yX2N0cnM7ICsraSkgeworCQl3cm1zcihjb3VudGVyc1tpXS5hZGRyLAorCQkJY291bnRl > cnNbaV0uc2F2ZWQubG93LAorCQkJY291bnRlcnNbaV0uc2F2ZWQuaGlnaCk7CisJfQorfQorIAor > c3RhdGljIHZvaWQgbm1pX2NwdV9zaHV0ZG93bih2b2lkICogZHVtbXkpCit7CisJaW50IGNwdSA9 > IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwlzdHJ1Y3Qgb3BfbXNycyAqIG1zcnMgPSAmY3B1X21zcnNb > Y3B1XTsKKwlubWlfcmVzdG9yZV9yZWdpc3RlcnMobXNycyk7Cit9CisgCit2b2lkIG5taV9yZWxl > YXNlX2NvdW50ZXJzKHZvaWQpCit7CisJb25fZWFjaF9jcHUobm1pX2NwdV9zaHV0ZG93biwgTlVM > TCwgMCwgMSk7CisJcmVsZWFzZV9sYXBpY19ubWkoKTsKKwlmcmVlX21zcnMoKTsKK30KKworc3Ry > dWN0IG9wX2NvdW50ZXJfY29uZmlnIGNvdW50ZXJfY29uZmlnW09QX01BWF9DT1VOVEVSXTsKKwor > c3RhdGljIGludCBfX2luaXQgcDRfaW5pdCh2b2lkKQoreworCV9fdTggY3B1X21vZGVsID0gY3Vy > cmVudF9jcHVfZGF0YS54ODZfbW9kZWw7CisKKwlpZiAoY3B1X21vZGVsID4gMykKKwkJcmV0dXJu > IDA7CisKKyNpZm5kZWYgQ09ORklHX1NNUAorCW1vZGVsID0gJm9wX3A0X3NwZWM7CisJcmV0dXJu > IDE7CisjZWxzZQorCS8vc3dpdGNoIChzbXBfbnVtX3NpYmxpbmdzKSB7CisJaWYgKGNwdV9oYXNf > aHQpIAorCXsKKwkgIG1vZGVsID0gJm9wX3A0X2h0Ml9zcGVjOworCSAgcmV0dXJuIDE7CisJfQor > CWVsc2UKKwl7CisJICBtb2RlbCA9ICZvcF9wNF9zcGVjOworCSAgcmV0dXJuIDE7CisJfQorI2Vu > ZGlmCisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBfX2luaXQgcHByb19pbml0KHZvaWQp > Cit7CisJX191OCBjcHVfbW9kZWwgPSBjdXJyZW50X2NwdV9kYXRhLng4Nl9tb2RlbDsKKworCWlm > IChjcHVfbW9kZWwgPiAweGQpCisJCXJldHVybiAwOworCisJbW9kZWwgPSAmb3BfcHByb19zcGVj > OworCXJldHVybiAxOworfQorCitpbnQgbm1pX2luaXQoaW50ICpudW1fZXZlbnRzLCBpbnQgKmlz > X3ByaW1hcnkpCit7CisJX191OCB2ZW5kb3IgPSBjdXJyZW50X2NwdV9kYXRhLng4Nl92ZW5kb3I7 > CisJX191OCBmYW1pbHkgPSBjdXJyZW50X2NwdV9kYXRhLng4NjsKKwlpbnQgcHJpbSA9IDA7Cisg > CisJaWYgKCFjcHVfaGFzX2FwaWMpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKHByaW1hcnlf > cHJvZmlsZXIgPT0gTlVMTCkgeworCQlwcmltYXJ5X3Byb2ZpbGVyID0gY3VycmVudDsKKwkJcHJp > bSA9IDE7CisJfQorCisJaWYgKHByaW1hcnlfcHJvZmlsZXIgIT0gY3VycmVudCkKKwkJZ290byBv > dXQ7CisKKwlzd2l0Y2ggKHZlbmRvcikgeworCQljYXNlIFg4Nl9WRU5ET1JfSU5URUw6CisJCQlz > d2l0Y2ggKGZhbWlseSkgeworCQkJCS8qIFBlbnRpdW0gSVYgKi8KKwkJCQljYXNlIDB4ZjoKKwkJ > CQkJaWYgKCFwNF9pbml0KCkpCisJCQkJCQlyZXR1cm4gLUVOT0RFVjsKKwkJCQkJYnJlYWs7CisJ > CQkJLyogQSBQNi1jbGFzcyBwcm9jZXNzb3IgKi8KKwkJCQljYXNlIDY6CisJCQkJCWlmICghcHBy > b19pbml0KCkpCisJCQkJCQlyZXR1cm4gLUVOT0RFVjsKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVs > dDoKKwkJCQkJcmV0dXJuIC1FTk9ERVY7CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJ > CXJldHVybiAtRU5PREVWOworCX0KK291dDoKKwlpZiAoY29weV90b191c2VyKCh2b2lkICopbnVt > X2V2ZW50cywgKHZvaWQgKikmbW9kZWwtPm51bV9jb3VudGVycywgc2l6ZW9mKGludCkpKQorCQly > ZXR1cm4gLUVGQVVMVDsKKwlpZiAoY29weV90b191c2VyKCh2b2lkICopaXNfcHJpbWFyeSwgKHZv > aWQgKikmcHJpbSwgc2l6ZW9mKGludCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldHVybiAw > OworfQorCmRpZmYgLVBOYXVyIHhlbi0yLjAuNS94ZW4vYXJjaC94ODYvb3Byb2ZpbGUvb3BfY291 > bnRlci5oIHhlbi0yLjAuNS1wcm9mL3hlbi9hcmNoL3g4Ni9vcHJvZmlsZS9vcF9jb3VudGVyLmgK > LS0tIHhlbi0yLjAuNS94ZW4vYXJjaC94ODYvb3Byb2ZpbGUvb3BfY291bnRlci5oCTE5NjktMTIt > MzEgMTY6MDA6MDAuMDAwMDAwMDAwIC0wODAwCisrKyB4ZW4tMi4wLjUtcHJvZi94ZW4vYXJjaC94 > ODYvb3Byb2ZpbGUvb3BfY291bnRlci5oCTIwMDUtMDQtMDYgMDk6Mjc6MTMuMDAwMDAwMDAwIC0w > NzAwCkBAIC0wLDAgKzEsMzMgQEAKKy8qKgorICogQGZpbGUgb3BfY291bnRlci5oCisgKgorICog > QHJlbWFyayBDb3B5cmlnaHQgMjAwMiBPUHJvZmlsZSBhdXRob3JzCisgKiBAcmVtYXJrIFJlYWQg > dGhlIGZpbGUgQ09QWUlORworICoKKyAqIEBhdXRob3IgSm9obiBMZXZvbgorICoKKyAqIE1vZGlm > aWVkIGJ5IEFyYXZpbmQgTWVub24gZm9yIFhlbgorICogVGhlc2UgbW9kaWZpY2F0aW9ucyBhcmU6 > CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgSGV3bGV0dC1QYWNrYXJkIENvLgorICovCisgCisjaWZu > ZGVmIE9QX0NPVU5URVJfSAorI2RlZmluZSBPUF9DT1VOVEVSX0gKKyAKKyNkZWZpbmUgT1BfTUFY > X0NPVU5URVIgOAorIAorLyogUGVyLXBlcmZjdHIgY29uZmlndXJhdGlvbiBhcyBzZXQgdmlhCisg > KiBvcHJvZmlsZWZzLgorICovCitzdHJ1Y3Qgb3BfY291bnRlcl9jb25maWcgeworICAgICAgICB1 > bnNpZ25lZCBsb25nIGNvdW50OworICAgICAgICB1bnNpZ25lZCBsb25nIGVuYWJsZWQ7CisgICAg > ICAgIHVuc2lnbmVkIGxvbmcgZXZlbnQ7CisgICAgICAgIHVuc2lnbmVkIGxvbmcga2VybmVsOwor > ICAgICAgICB1bnNpZ25lZCBsb25nIHVzZXI7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgdW5pdF9t > YXNrOworfTsKKworZXh0ZXJuIHN0cnVjdCBvcF9jb3VudGVyX2NvbmZpZyBjb3VudGVyX2NvbmZp > Z1tdOworCisjZW5kaWYgLyogT1BfQ09VTlRFUl9IICovCmRpZmYgLVBOYXVyIHhlbi0yLjAuNS94 > ZW4vYXJjaC94ODYvb3Byb2ZpbGUvb3BfbW9kZWxfcDQuYyB4ZW4tMi4wLjUtcHJvZi94ZW4vYXJj > aC94ODYvb3Byb2ZpbGUvb3BfbW9kZWxfcDQuYwotLS0geGVuLTIuMC41L3hlbi9hcmNoL3g4Ni9v > cHJvZmlsZS9vcF9tb2RlbF9wNC5jCTE5NjktMTItMzEgMTY6MDA6MDAuMDAwMDAwMDAwIC0wODAw > CisrKyB4ZW4tMi4wLjUtcHJvZi94ZW4vYXJjaC94ODYvb3Byb2ZpbGUvb3BfbW9kZWxfcDQuYwky > MDA1LTA0LTA3IDA5OjA4OjIwLjAwMDAwMDAwMCAtMDcwMApAQCAtMCwwICsxLDc0NCBAQAorLyoq > CisgKiBAZmlsZSBvcF9tb2RlbF9wNC5jCisgKiBQNCBtb2RlbC1zcGVjaWZpYyBNU1Igb3BlcmF0 > aW9ucworICoKKyAqIEByZW1hcmsgQ29weXJpZ2h0IDIwMDIgT1Byb2ZpbGUgYXV0aG9ycworICog > QHJlbWFyayBSZWFkIHRoZSBmaWxlIENPUFlJTkcKKyAqCisgKiBAYXV0aG9yIEdyYXlkb24gSG9h > cmUKKyAqCisgKiBNb2RpZmllZCBieSBBcmF2aW5kIE1lbm9uIGZvciBYZW4KKyAqIFRoZXNlIG1v > ZGlmaWNhdGlvbnMgYXJlOgorICogQ29weXJpZ2h0IChDKSAyMDA1IEhld2xldHQtUGFja2FyZCBD > by4KKyAqLworCisjaW5jbHVkZSA8eGVuL3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21zci5oPgor > I2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9hcGljLmg+CisjaW5jbHVkZSA8YXNt > L3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPHhlbi9zY2hlZC5oPgorCisjaW5jbHVkZSAib3BfeDg2 > X21vZGVsLmgiCisjaW5jbHVkZSAib3BfY291bnRlci5oIgorCisjZGVmaW5lIE5VTV9FVkVOVFMg > MzkKKworI2RlZmluZSBOVU1fQ09VTlRFUlNfTk9OX0hUIDgKKyNkZWZpbmUgTlVNX0VTQ1JTX05P > Tl9IVCA0NQorI2RlZmluZSBOVU1fQ0NDUlNfTk9OX0hUIDE4CisjZGVmaW5lIE5VTV9DT05UUk9M > U19OT05fSFQgKE5VTV9FU0NSU19OT05fSFQgKyBOVU1fQ0NDUlNfTk9OX0hUKQorCisjZGVmaW5l > IE5VTV9DT1VOVEVSU19IVDIgNAorI2RlZmluZSBOVU1fRVNDUlNfSFQyIDIzCisjZGVmaW5lIE5V > TV9DQ0NSU19IVDIgOQorI2RlZmluZSBOVU1fQ09OVFJPTFNfSFQyIChOVU1fRVNDUlNfSFQyICsg > TlVNX0NDQ1JTX0hUMikKKworc3RhdGljIHVuc2lnbmVkIGludCBudW1fY291bnRlcnMgPSBOVU1f > Q09VTlRFUlNfTk9OX0hUOworCisKKy8qIHRoaXMgaGFzIHRvIGJlIGNoZWNrZWQgZHluYW1pY2Fs > bHkgc2luY2UgdGhlCisgICBoeXBlci10aHJlYWRlZG5lc3Mgb2YgYSBjaGlwIGlzIGRpc2NvdmVy > ZWQgYXQKKyAgIGtlcm5lbCBib290LXRpbWUuICovCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0dXBf > bnVtX2NvdW50ZXJzKHZvaWQpCit7CisjaWZkZWYgQ09ORklHX1NNUAorCWlmIChjcHVfaGFzX2h0 > KQorCQludW1fY291bnRlcnMgPSBOVU1fQ09VTlRFUlNfSFQyOworI2VuZGlmCit9CisKK3N0YXRp > YyBpbnQgaW5saW5lIGFkZHJfaW5jcmVtZW50KHZvaWQpCit7CisjaWZkZWYgQ09ORklHX1NNUAor > CXJldHVybiBjcHVfaGFzX2h0ID8gMiA6IDE7CisjZWxzZQorCXJldHVybiAxOworI2VuZGlmCit9 > CisKKworLyogdGFibGVzIHRvIHNpbXVsYXRlIHNpbXBsaWZpZWQgaGFyZHdhcmUgdmlldyBvZiBw > NCByZWdpc3RlcnMgKi8KK3N0cnVjdCBwNF9jb3VudGVyX2JpbmRpbmcgeworCWludCB2aXJ0X2Nv > dW50ZXI7CisJaW50IGNvdW50ZXJfYWRkcmVzczsKKwlpbnQgY2Njcl9hZGRyZXNzOworfTsKKwor > c3RydWN0IHA0X2V2ZW50X2JpbmRpbmcgeworCWludCBlc2NyX3NlbGVjdDsgIC8qIHZhbHVlIHRv > IHB1dCBpbiBDQ0NSICovCisJaW50IGV2ZW50X3NlbGVjdDsgLyogdmFsdWUgdG8gcHV0IGluIEVT > Q1IgKi8KKwlzdHJ1Y3QgeworCQlpbnQgdmlydF9jb3VudGVyOyAvKiBmb3IgdGhpcyBjb3VudGVy > Li4uICovCisJCWludCBlc2NyX2FkZHJlc3M7IC8qIHVzZSB0aGlzIEVTQ1IgICAgICAgKi8KKwl9 > IGJpbmRpbmdzWzJdOworfTsKKworLyogbmI6IHRoZXNlIENUUl8qIGRlZmluZXMgYXJlIGEgZHVw > bGljYXRlIG9mIGRlZmluZXMgaW4KKyAgIGV2ZW50L2kzODYucDQqZXZlbnRzLiAqLworCisKKyNk > ZWZpbmUgQ1RSX0JQVV8wICAgICAgKDEgPDwgMCkKKyNkZWZpbmUgQ1RSX01TXzAgICAgICAgKDEg > PDwgMSkKKyNkZWZpbmUgQ1RSX0ZMQU1FXzAgICAgKDEgPDwgMikKKyNkZWZpbmUgQ1RSX0lRXzQg > ICAgICAgKDEgPDwgMykKKyNkZWZpbmUgQ1RSX0JQVV8yICAgICAgKDEgPDwgNCkKKyNkZWZpbmUg > Q1RSX01TXzIgICAgICAgKDEgPDwgNSkKKyNkZWZpbmUgQ1RSX0ZMQU1FXzIgICAgKDEgPDwgNikK > KyNkZWZpbmUgQ1RSX0lRXzUgICAgICAgKDEgPDwgNykKKworc3RhdGljIHN0cnVjdCBwNF9jb3Vu > dGVyX2JpbmRpbmcgcDRfY291bnRlcnMgW05VTV9DT1VOVEVSU19OT05fSFRdID0geworCXsgQ1RS > X0JQVV8wLCAgIE1TUl9QNF9CUFVfUEVSRkNUUjAsICAgTVNSX1A0X0JQVV9DQ0NSMCB9LAorCXsg > Q1RSX01TXzAsICAgIE1TUl9QNF9NU19QRVJGQ1RSMCwgICAgTVNSX1A0X01TX0NDQ1IwIH0sCisJ > eyBDVFJfRkxBTUVfMCwgTVNSX1A0X0ZMQU1FX1BFUkZDVFIwLCBNU1JfUDRfRkxBTUVfQ0NDUjAg > fSwKKwl7IENUUl9JUV80LCAgICBNU1JfUDRfSVFfUEVSRkNUUjQsICAgIE1TUl9QNF9JUV9DQ0NS > NCB9LAorCXsgQ1RSX0JQVV8yLCAgIE1TUl9QNF9CUFVfUEVSRkNUUjIsICAgTVNSX1A0X0JQVV9D > Q0NSMiB9LAorCXsgQ1RSX01TXzIsICAgIE1TUl9QNF9NU19QRVJGQ1RSMiwgICAgTVNSX1A0X01T > X0NDQ1IyIH0sCisJeyBDVFJfRkxBTUVfMiwgTVNSX1A0X0ZMQU1FX1BFUkZDVFIyLCBNU1JfUDRf > RkxBTUVfQ0NDUjIgfSwKKwl7IENUUl9JUV81LCAgICBNU1JfUDRfSVFfUEVSRkNUUjUsICAgIE1T > Ul9QNF9JUV9DQ0NSNSB9Cit9OworCisjZGVmaW5lIE5VTV9VTlVTRURfQ0NDUlMJTlVNX0NDQ1JT > X05PTl9IVCAtIE5VTV9DT1VOVEVSU19OT05fSFQKKworLyogQWxsIGNjY3Igd2UgZG9uJ3QgdXNl > LiAqLworc3RhdGljIGludCBwNF91bnVzZWRfY2NjcltOVU1fVU5VU0VEX0NDQ1JTXSA9IHsKKwlN > U1JfUDRfQlBVX0NDQ1IxLAlNU1JfUDRfQlBVX0NDQ1IzLAorCU1TUl9QNF9NU19DQ0NSMSwJTVNS > X1A0X01TX0NDQ1IzLAorCU1TUl9QNF9GTEFNRV9DQ0NSMSwJTVNSX1A0X0ZMQU1FX0NDQ1IzLAor > CU1TUl9QNF9JUV9DQ0NSMCwJTVNSX1A0X0lRX0NDQ1IxLAorCU1TUl9QNF9JUV9DQ0NSMiwJTVNS > X1A0X0lRX0NDQ1IzCit9OworCisvKiBwNCBldmVudCBjb2RlcyBpbiBsaWJvcC9vcF9ldmVudC5o > IGFyZSBpbmRpY2VzIGludG8gdGhpcyB0YWJsZS4gKi8KKworc3RhdGljIHN0cnVjdCBwNF9ldmVu > dF9iaW5kaW5nIHA0X2V2ZW50c1tOVU1fRVZFTlRTXSA9IHsKKwkKKwl7IC8qIEJSQU5DSF9SRVRJ > UkVEICovCisJCTB4MDUsIDB4MDYsIAorCQl7IHtDVFJfSVFfNCwgTVNSX1A0X0NSVV9FU0NSMn0s > CisJCSAge0NUUl9JUV81LCBNU1JfUDRfQ1JVX0VTQ1IzfSB9CisJfSwKKwkKKwl7IC8qIE1JU1BS > RURfQlJBTkNIX1JFVElSRUQgKi8KKwkJMHgwNCwgMHgwMywgCisJCXsgeyBDVFJfSVFfNCwgTVNS > X1A0X0NSVV9FU0NSMH0sCisJCSAgeyBDVFJfSVFfNSwgTVNSX1A0X0NSVV9FU0NSMX0gfQorCX0s > CisJCisJeyAvKiBUQ19ERUxJVkVSX01PREUgKi8KKwkJMHgwMSwgMHgwMSwKKwkJeyB7IENUUl9N > U18wLCBNU1JfUDRfVENfRVNDUjB9LCAgCisJCSAgeyBDVFJfTVNfMiwgTVNSX1A0X1RDX0VTQ1Ix > fSB9CisJfSwKKwkKKwl7IC8qIEJQVV9GRVRDSF9SRVFVRVNUICovCisJCTB4MDAsIDB4MDMsIAor > CQl7IHsgQ1RSX0JQVV8wLCBNU1JfUDRfQlBVX0VTQ1IwfSwKKwkJICB7IENUUl9CUFVfMiwgTVNS > X1A0X0JQVV9FU0NSMX0gfQorCX0sCisKKwl7IC8qIElUTEJfUkVGRVJFTkNFICovCisJCTB4MDMs > IDB4MTgsCisJCXsgeyBDVFJfQlBVXzAsIE1TUl9QNF9JVExCX0VTQ1IwfSwKKwkJICB7IENUUl9C > UFVfMiwgTVNSX1A0X0lUTEJfRVNDUjF9IH0KKwl9LAorCisJeyAvKiBNRU1PUllfQ0FOQ0VMICov > CisJCTB4MDUsIDB4MDIsCisJCXsgeyBDVFJfRkxBTUVfMCwgTVNSX1A0X0RBQ19FU0NSMH0sCisJ > CSAgeyBDVFJfRkxBTUVfMiwgTVNSX1A0X0RBQ19FU0NSMX0gfQorCX0sCisKKwl7IC8qIE1FTU9S > WV9DT01QTEVURSAqLworCQkweDAyLCAweDA4LAorCQl7IHsgQ1RSX0ZMQU1FXzAsIE1TUl9QNF9T > QUFUX0VTQ1IwfSwKKwkJICB7IENUUl9GTEFNRV8yLCBNU1JfUDRfU0FBVF9FU0NSMX0gfQorCX0s > CisKKwl7IC8qIExPQURfUE9SVF9SRVBMQVkgKi8KKwkJMHgwMiwgMHgwNCwgCisJCXsgeyBDVFJf > RkxBTUVfMCwgTVNSX1A0X1NBQVRfRVNDUjB9LAorCQkgIHsgQ1RSX0ZMQU1FXzIsIE1TUl9QNF9T > QUFUX0VTQ1IxfSB9CisJfSwKKworCXsgLyogU1RPUkVfUE9SVF9SRVBMQVkgKi8KKwkJMHgwMiwg > MHgwNSwKKwkJeyB7IENUUl9GTEFNRV8wLCBNU1JfUDRfU0FBVF9FU0NSMH0sCisJCSAgeyBDVFJf > RkxBTUVfMiwgTVNSX1A0X1NBQVRfRVNDUjF9IH0KKwl9LAorCisJeyAvKiBNT0JfTE9BRF9SRVBM > QVkgKi8KKwkJMHgwMiwgMHgwMywKKwkJeyB7IENUUl9CUFVfMCwgTVNSX1A0X01PQl9FU0NSMH0s > CisJCSAgeyBDVFJfQlBVXzIsIE1TUl9QNF9NT0JfRVNDUjF9IH0KKwl9LAorCisJeyAvKiBQQUdF > X1dBTEtfVFlQRSAqLworCQkweDA0LCAweDAxLAorCQl7IHsgQ1RSX0JQVV8wLCBNU1JfUDRfUE1I > X0VTQ1IwfSwKKwkJICB7IENUUl9CUFVfMiwgTVNSX1A0X1BNSF9FU0NSMX0gfQorCX0sCisKKwl7 > IC8qIEJTUV9DQUNIRV9SRUZFUkVOQ0UgKi8KKwkJMHgwNywgMHgwYywgCisJCXsgeyBDVFJfQlBV > XzAsIE1TUl9QNF9CU1VfRVNDUjB9LAorCQkgIHsgQ1RSX0JQVV8yLCBNU1JfUDRfQlNVX0VTQ1Ix > fSB9CisJfSwKKworCXsgLyogSU9RX0FMTE9DQVRJT04gKi8KKwkJMHgwNiwgMHgwMywgCisJCXsg > eyBDVFJfQlBVXzAsIE1TUl9QNF9GU0JfRVNDUjB9LAorCQkgIHsgMCwgMCB9IH0KKwl9LAorCisJ > eyAvKiBJT1FfQUNUSVZFX0VOVFJJRVMgKi8KKwkJMHgwNiwgMHgxYSwgCisJCXsgeyBDVFJfQlBV > XzIsIE1TUl9QNF9GU0JfRVNDUjF9LAorCQkgIHsgMCwgMCB9IH0KKwl9LAorCisJeyAvKiBGU0Jf > REFUQV9BQ1RJVklUWSAqLworCQkweDA2LCAweDE3LCAKKwkJeyB7IENUUl9CUFVfMCwgTVNSX1A0 > X0ZTQl9FU0NSMH0sCisJCSAgeyBDVFJfQlBVXzIsIE1TUl9QNF9GU0JfRVNDUjF9IH0KKwl9LAor > CisJeyAvKiBCU1FfQUxMT0NBVElPTiAqLworCQkweDA3LCAweDA1LCAKKwkJeyB7IENUUl9CUFVf > MCwgTVNSX1A0X0JTVV9FU0NSMH0sCisJCSAgeyAwLCAwIH0gfQorCX0sCisKKwl7IC8qIEJTUV9B > Q1RJVkVfRU5UUklFUyAqLworCQkweDA3LCAweDA2LAorCQl7IHsgQ1RSX0JQVV8yLCBNU1JfUDRf > QlNVX0VTQ1IxIC8qIGd1ZXNzICovfSwgIAorCQkgIHsgMCwgMCB9IH0KKwl9LAorCisJeyAvKiBY > ODdfQVNTSVNUICovCisJCTB4MDUsIDB4MDMsIAorCQl7IHsgQ1RSX0lRXzQsIE1TUl9QNF9DUlVf > RVNDUjJ9LAorCQkgIHsgQ1RSX0lRXzUsIE1TUl9QNF9DUlVfRVNDUjN9IH0KKwl9LAorCisJeyAv > KiBTU0VfSU5QVVRfQVNTSVNUICovCisJCTB4MDEsIDB4MzQsCisJCXsgeyBDVFJfRkxBTUVfMCwg > TVNSX1A0X0ZJUk1fRVNDUjB9LAorCQkgIHsgQ1RSX0ZMQU1FXzIsIE1TUl9QNF9GSVJNX0VTQ1Ix > fSB9CisJfSwKKyAgCisJeyAvKiBQQUNLRURfU1BfVU9QICovCisJCTB4MDEsIDB4MDgsIAorCQl7 > IHsgQ1RSX0ZMQU1FXzAsIE1TUl9QNF9GSVJNX0VTQ1IwfSwKKwkJICB7IENUUl9GTEFNRV8yLCBN > U1JfUDRfRklSTV9FU0NSMX0gfQorCX0sCisgIAorCXsgLyogUEFDS0VEX0RQX1VPUCAqLworCQkw > eDAxLCAweDBjLCAKKwkJeyB7IENUUl9GTEFNRV8wLCBNU1JfUDRfRklSTV9FU0NSMH0sCisJCSAg > eyBDVFJfRkxBTUVfMiwgTVNSX1A0X0ZJUk1fRVNDUjF9IH0KKwl9LAorCisJeyAvKiBTQ0FMQVJf > U1BfVU9QICovCisJCTB4MDEsIDB4MGEsIAorCQl7IHsgQ1RSX0ZMQU1FXzAsIE1TUl9QNF9GSVJN > X0VTQ1IwfSwKKwkJICB7IENUUl9GTEFNRV8yLCBNU1JfUDRfRklSTV9FU0NSMX0gfQorCX0sCisK > Kwl7IC8qIFNDQUxBUl9EUF9VT1AgKi8KKwkJMHgwMSwgMHgwZSwKKwkJeyB7IENUUl9GTEFNRV8w > LCBNU1JfUDRfRklSTV9FU0NSMH0sCisJCSAgeyBDVFJfRkxBTUVfMiwgTVNSX1A0X0ZJUk1fRVND > UjF9IH0KKwl9LAorCisJeyAvKiA2NEJJVF9NTVhfVU9QICovCisJCTB4MDEsIDB4MDIsIAorCQl7 > IHsgQ1RSX0ZMQU1FXzAsIE1TUl9QNF9GSVJNX0VTQ1IwfSwKKwkJICB7IENUUl9GTEFNRV8yLCBN > U1JfUDRfRklSTV9FU0NSMX0gfQorCX0sCisgIAorCXsgLyogMTI4QklUX01NWF9VT1AgKi8KKwkJ > MHgwMSwgMHgxYSwgCisJCXsgeyBDVFJfRkxBTUVfMCwgTVNSX1A0X0ZJUk1fRVNDUjB9LAorCQkg > IHsgQ1RSX0ZMQU1FXzIsIE1TUl9QNF9GSVJNX0VTQ1IxfSB9CisJfSwKKworCXsgLyogWDg3X0ZQ > X1VPUCAqLworCQkweDAxLCAweDA0LCAKKwkJeyB7IENUUl9GTEFNRV8wLCBNU1JfUDRfRklSTV9F > U0NSMH0sCisJCSAgeyBDVFJfRkxBTUVfMiwgTVNSX1A0X0ZJUk1fRVNDUjF9IH0KKwl9LAorICAK > Kwl7IC8qIFg4N19TSU1EX01PVkVTX1VPUCAqLworCQkweDAxLCAweDJlLCAKKwkJeyB7IENUUl9G > TEFNRV8wLCBNU1JfUDRfRklSTV9FU0NSMH0sCisJCSAgeyBDVFJfRkxBTUVfMiwgTVNSX1A0X0ZJ > Uk1fRVNDUjF9IH0KKwl9LAorICAKKwl7IC8qIE1BQ0hJTkVfQ0xFQVIgKi8KKwkJMHgwNSwgMHgw > MiwgCisJCXsgeyBDVFJfSVFfNCwgTVNSX1A0X0NSVV9FU0NSMn0sCisJCSAgeyBDVFJfSVFfNSwg > TVNSX1A0X0NSVV9FU0NSM30gfQorCX0sCisKKwl7IC8qIEdMT0JBTF9QT1dFUl9FVkVOVFMgKi8K > KwkJMHgwNiwgMHgxMyAvKiBvbGRlciBtYW51YWwgc2F5cyAweDA1LCBuZXdlciAweDEzICovLAor > CQl7IHsgQ1RSX0JQVV8wLCBNU1JfUDRfRlNCX0VTQ1IwfSwKKwkJICB7IENUUl9CUFVfMiwgTVNS > X1A0X0ZTQl9FU0NSMX0gfQorCX0sCisgIAorCXsgLyogVENfTVNfWEZFUiAqLworCQkweDAwLCAw > eDA1LCAKKwkJeyB7IENUUl9NU18wLCBNU1JfUDRfTVNfRVNDUjB9LAorCQkgIHsgQ1RSX01TXzIs > IE1TUl9QNF9NU19FU0NSMX0gfQorCX0sCisKKwl7IC8qIFVPUF9RVUVVRV9XUklURVMgKi8KKwkJ > MHgwMCwgMHgwOSwKKwkJeyB7IENUUl9NU18wLCBNU1JfUDRfTVNfRVNDUjB9LAorCQkgIHsgQ1RS > X01TXzIsIE1TUl9QNF9NU19FU0NSMX0gfQorCX0sCisKKwl7IC8qIEZST05UX0VORF9FVkVOVCAq > LworCQkweDA1LCAweDA4LAorCQl7IHsgQ1RSX0lRXzQsIE1TUl9QNF9DUlVfRVNDUjJ9LAorCQkg > IHsgQ1RSX0lRXzUsIE1TUl9QNF9DUlVfRVNDUjN9IH0KKwl9LAorCisJeyAvKiBFWEVDVVRJT05f > RVZFTlQgKi8KKwkJMHgwNSwgMHgwYywKKwkJeyB7IENUUl9JUV80LCBNU1JfUDRfQ1JVX0VTQ1Iy > fSwKKwkJICB7IENUUl9JUV81LCBNU1JfUDRfQ1JVX0VTQ1IzfSB9CisJfSwKKworCXsgLyogUkVQ > TEFZX0VWRU5UICovCisJCTB4MDUsIDB4MDksCisJCXsgeyBDVFJfSVFfNCwgTVNSX1A0X0NSVV9F > U0NSMn0sCisJCSAgeyBDVFJfSVFfNSwgTVNSX1A0X0NSVV9FU0NSM30gfQorCX0sCisKKwl7IC8q > IElOU1RSX1JFVElSRUQgKi8KKwkJMHgwNCwgMHgwMiwgCisJCXsgeyBDVFJfSVFfNCwgTVNSX1A0 > X0NSVV9FU0NSMH0sCisJCSAgeyBDVFJfSVFfNSwgTVNSX1A0X0NSVV9FU0NSMX0gfQorCX0sCisK > Kwl7IC8qIFVPUFNfUkVUSVJFRCAqLworCQkweDA0LCAweDAxLAorCQl7IHsgQ1RSX0lRXzQsIE1T > Ul9QNF9DUlVfRVNDUjB9LAorCQkgIHsgQ1RSX0lRXzUsIE1TUl9QNF9DUlVfRVNDUjF9IH0KKwl9 > LAorCisJeyAvKiBVT1BfVFlQRSAqLyAgICAKKwkJMHgwMiwgMHgwMiwgCisJCXsgeyBDVFJfSVFf > NCwgTVNSX1A0X1JBVF9FU0NSMH0sCisJCSAgeyBDVFJfSVFfNSwgTVNSX1A0X1JBVF9FU0NSMX0g > fQorCX0sCisKKwl7IC8qIFJFVElSRURfTUlTUFJFRF9CUkFOQ0hfVFlQRSAqLworCQkweDAyLCAw > eDA1LCAKKwkJeyB7IENUUl9NU18wLCBNU1JfUDRfVEJQVV9FU0NSMH0sCisJCSAgeyBDVFJfTVNf > MiwgTVNSX1A0X1RCUFVfRVNDUjF9IH0KKwl9LAorCisJeyAvKiBSRVRJUkVEX0JSQU5DSF9UWVBF > ICovCisJCTB4MDIsIDB4MDQsCisJCXsgeyBDVFJfTVNfMCwgTVNSX1A0X1RCUFVfRVNDUjB9LAor > CQkgIHsgQ1RSX01TXzIsIE1TUl9QNF9UQlBVX0VTQ1IxfSB9CisJfQorfTsKKworCisjZGVmaW5l > IE1JU0NfUE1DX0VOQUJMRURfUCh4KSAoKHgpICYgMSA8PCA3KQorCisjZGVmaW5lIEVTQ1JfUkVT > RVJWRURfQklUUyAweDgwMDAwMDAzCisjZGVmaW5lIEVTQ1JfQ0xFQVIoZXNjcikgKChlc2NyKSAm > PSBFU0NSX1JFU0VSVkVEX0JJVFMpCisjZGVmaW5lIEVTQ1JfU0VUX1VTUl8wKGVzY3IsIHVzcikg > KChlc2NyKSB8PSAoKCh1c3IpICYgMSkgPDwgMikpCisjZGVmaW5lIEVTQ1JfU0VUX09TXzAoZXNj > ciwgb3MpICgoZXNjcikgfD0gKCgob3MpICYgMSkgPDwgMykpCisjZGVmaW5lIEVTQ1JfU0VUX1VT > Ul8xKGVzY3IsIHVzcikgKChlc2NyKSB8PSAoKCh1c3IpICYgMSkpKQorI2RlZmluZSBFU0NSX1NF > VF9PU18xKGVzY3IsIG9zKSAoKGVzY3IpIHw9ICgoKG9zKSAmIDEpIDw8IDEpKQorI2RlZmluZSBF > U0NSX1NFVF9FVkVOVF9TRUxFQ1QoZXNjciwgc2VsKSAoKGVzY3IpIHw9ICgoKHNlbCkgJiAweDNm > KSA8PCAyNSkpCisjZGVmaW5lIEVTQ1JfU0VUX0VWRU5UX01BU0soZXNjciwgbWFzaykgKChlc2Ny > KSB8PSAoKChtYXNrKSAmIDB4ZmZmZikgPDwgOSkpCisjZGVmaW5lIEVTQ1JfUkVBRChlc2NyLGhp > Z2gsZXYsaSkgZG8ge3JkbXNyKGV2LT5iaW5kaW5nc1soaSldLmVzY3JfYWRkcmVzcywgKGVzY3Ip > LCAoaGlnaCkpO30gd2hpbGUgKDApCisjZGVmaW5lIEVTQ1JfV1JJVEUoZXNjcixoaWdoLGV2LGkp > IGRvIHt3cm1zcihldi0+YmluZGluZ3NbKGkpXS5lc2NyX2FkZHJlc3MsIChlc2NyKSwgKGhpZ2gp > KTt9IHdoaWxlICgwKQorCisjZGVmaW5lIENDQ1JfUkVTRVJWRURfQklUUyAweDM4MDMwRkZGCisj > ZGVmaW5lIENDQ1JfQ0xFQVIoY2NjcikgKChjY2NyKSAmPSBDQ0NSX1JFU0VSVkVEX0JJVFMpCisj > ZGVmaW5lIENDQ1JfU0VUX1JFUVVJUkVEX0JJVFMoY2NjcikgKChjY2NyKSB8PSAweDAwMDMwMDAw > KQorI2RlZmluZSBDQ0NSX1NFVF9FU0NSX1NFTEVDVChjY2NyLCBzZWwpICgoY2NjcikgfD0gKCgo > c2VsKSAmIDB4MDcpIDw8IDEzKSkKKyNkZWZpbmUgQ0NDUl9TRVRfUE1JX09WRl8wKGNjY3IpICgo > Y2NjcikgfD0gKDE8PDI2KSkKKyNkZWZpbmUgQ0NDUl9TRVRfUE1JX09WRl8xKGNjY3IpICgoY2Nj > cikgfD0gKDE8PDI3KSkKKyNkZWZpbmUgQ0NDUl9TRVRfRU5BQkxFKGNjY3IpICgoY2NjcikgfD0g > KDE8PDEyKSkKKyNkZWZpbmUgQ0NDUl9TRVRfRElTQUJMRShjY2NyKSAoKGNjY3IpICY9IH4oMTw8 > MTIpKQorI2RlZmluZSBDQ0NSX1JFQUQobG93LCBoaWdoLCBpKSBkbyB7cmRtc3IocDRfY291bnRl > cnNbKGkpXS5jY2NyX2FkZHJlc3MsIChsb3cpLCAoaGlnaCkpO30gd2hpbGUgKDApCisjZGVmaW5l > IENDQ1JfV1JJVEUobG93LCBoaWdoLCBpKSBkbyB7d3Jtc3IocDRfY291bnRlcnNbKGkpXS5jY2Ny > X2FkZHJlc3MsIChsb3cpLCAoaGlnaCkpO30gd2hpbGUgKDApCisjZGVmaW5lIENDQ1JfT1ZGX1Ao > Y2NjcikgKChjY2NyKSAmICgxVTw8MzEpKQorI2RlZmluZSBDQ0NSX0NMRUFSX09WRihjY2NyKSAo > KGNjY3IpICY9ICh+KDFVPDwzMSkpKQorCisjZGVmaW5lIENUUl9SRUFEKGwsaCxpKSBkbyB7cmRt > c3IocDRfY291bnRlcnNbKGkpXS5jb3VudGVyX2FkZHJlc3MsIChsKSwgKGgpKTt9IHdoaWxlICgw > KQorI2RlZmluZSBDVFJfV1JJVEUobCxpKSBkbyB7d3Jtc3IocDRfY291bnRlcnNbKGkpXS5jb3Vu > dGVyX2FkZHJlc3MsIC0odTMyKShsKSwgLTEpO30gd2hpbGUgKDApCisjZGVmaW5lIENUUl9PVkVS > RkxPV19QKGN0cikgKCEoKGN0cikgJiAweDgwMDAwMDAwKSkKKworCisvKiB0aGlzIGFzc2lnbnMg > YSAic3RhZ2dlciIgdG8gdGhlIGN1cnJlbnQgQ1BVLCB3aGljaCBpcyB1c2VkIHRocm91Z2hvdXQK > KyAgIHRoZSBjb2RlIGluIHRoaXMgbW9kdWxlIGFzIGFuIGV4dHJhIGFycmF5IG9mZnNldCwgdG8g > c2VsZWN0IHRoZSAiZXZlbiIKKyAgIG9yICJvZGQiIHBhcnQgb2YgYWxsIHRoZSBkaXZpZGVkIHJl > c291cmNlcy4gKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X3N0YWdnZXIodm9pZCkKK3sKKyNp > ZmRlZiBDT05GSUdfU01QCisJLyppbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCXJldHVy > biAoY3B1ICE9IGZpcnN0X2NwdShjcHVfc2libGluZ19tYXBbY3B1XSkpOyovCisJLyogV2Ugd2Fu > dCB0aGUgdHdvIGxvZ2ljYWwgY3B1cyBvZiBhIHBoeXNpY2FsIGNwdSB0byB1c2UKKwlkaXNqb2lu > dCBzZXQgb2YgY291bnRlcnMuIFRoZSBmb2xsb3dpbmcgY29kZSBpcyB3cm9uZy4gKi8KKwlyZXR1 > cm4gMDsKKyNlbmRpZgkKKwlyZXR1cm4gMDsKK30KKworCisvKiBmaW5hbGx5LCBtZWRpYXRlIGFj > Y2VzcyB0byBhIHJlYWwgaGFyZHdhcmUgY291bnRlcgorICAgYnkgcGFzc2luZyBhICJ2aXJ0dWFs > IiBjb3VudGVyIG51bWVyIHRvIHRoaXMgbWFjcm8sCisgICBhbG9uZyB3aXRoIHlvdXIgc3RhZ2dl > ciBzZXR0aW5nLiAqLworI2RlZmluZSBWSVJUX0NUUihzdGFnZ2VyLCBpKSAoKGkpICsgKChudW1f > Y291bnRlcnMpICogKHN0YWdnZXIpKSkKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgcmVzZXRfdmFs > dWVbTlVNX0NPVU5URVJTX05PTl9IVF07CisKKworc3RhdGljIHZvaWQgcDRfZmlsbF9pbl9hZGRy > ZXNzZXMoc3RydWN0IG9wX21zcnMgKiBjb25zdCBtc3JzKQoreworCXVuc2lnbmVkIGludCBpOyAK > Kwl1bnNpZ25lZCBpbnQgYWRkciwgc3RhZzsKKworCXNldHVwX251bV9jb3VudGVycygpOworCXN0 > YWcgPSBnZXRfc3RhZ2dlcigpOworCisJLyogdGhlIGNvdW50ZXIgcmVnaXN0ZXJzIHdlIHBheSBh > dHRlbnRpb24gdG8gKi8KKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2NvdW50ZXJzOyArK2kpIHsKKwkJ > bXNycy0+Y291bnRlcnNbaV0uYWRkciA9IAorCQkJcDRfY291bnRlcnNbVklSVF9DVFIoc3RhZywg > aSldLmNvdW50ZXJfYWRkcmVzczsKKwl9CisKKwkvKiBGSVhNRTogYmFkIGZlZWxpbmcsIHdlIGRv > bid0IHNhdmUgdGhlIDEwIGNvdW50ZXJzIHdlIGRvbid0IHVzZS4gKi8KKworCS8qIDE4IENDQ1Ig > cmVnaXN0ZXJzICovCisJZm9yIChpID0gMCwgYWRkciA9IE1TUl9QNF9CUFVfQ0NDUjAgKyBzdGFn > OworCSAgICAgYWRkciA8PSBNU1JfUDRfSVFfQ0NDUjU7ICsraSwgYWRkciArPSBhZGRyX2luY3Jl > bWVudCgpKSB7CisJCW1zcnMtPmNvbnRyb2xzW2ldLmFkZHIgPSBhZGRyOworCX0KKwkKKwkvKiA0 > MyBFU0NSIHJlZ2lzdGVycyBpbiB0aHJlZSBvciBmb3VyIGRpc2NvbnRpZ3VvdXMgZ3JvdXAgKi8K > Kwlmb3IgKGFkZHIgPSBNU1JfUDRfQlNVX0VTQ1IwICsgc3RhZzsKKwkgICAgIGFkZHIgPCBNU1Jf > UDRfSVFfRVNDUjA7ICsraSwgYWRkciArPSBhZGRyX2luY3JlbWVudCgpKSB7CisJCW1zcnMtPmNv > bnRyb2xzW2ldLmFkZHIgPSBhZGRyOworCX0KKworCS8qIG5vIElRX0VTQ1IwLzEgb24gc29tZSBt > b2RlbHMsIHdlIHNhdmUgYSBzZWNvbmRlIHRpbWUgQlNVX0VTQ1IwLzEKKwkgKiB0byBhdm9pZCBz > cGVjaWFsIGNhc2UgaW4gbm1pX3tzYXZlfHJlc3RvcmV9X3JlZ2lzdGVycygpICovCisJaWYgKGJv > b3RfY3B1X2RhdGEueDg2X21vZGVsID49IDB4MykgeworCQlmb3IgKGFkZHIgPSBNU1JfUDRfQlNV > X0VTQ1IwICsgc3RhZzsKKwkJICAgICBhZGRyIDw9IE1TUl9QNF9CU1VfRVNDUjE7ICsraSwgYWRk > ciArPSBhZGRyX2luY3JlbWVudCgpKSB7CisJCQltc3JzLT5jb250cm9sc1tpXS5hZGRyID0gYWRk > cjsKKwkJfQorCX0gZWxzZSB7CisJCWZvciAoYWRkciA9IE1TUl9QNF9JUV9FU0NSMCArIHN0YWc7 > CisJCSAgICAgYWRkciA8PSBNU1JfUDRfSVFfRVNDUjE7ICsraSwgYWRkciArPSBhZGRyX2luY3Jl > bWVudCgpKSB7CisJCQltc3JzLT5jb250cm9sc1tpXS5hZGRyID0gYWRkcjsKKwkJfQorCX0KKwor > CWZvciAoYWRkciA9IE1TUl9QNF9SQVRfRVNDUjAgKyBzdGFnOworCSAgICAgYWRkciA8PSBNU1Jf > UDRfU1NVX0VTQ1IwOyArK2ksIGFkZHIgKz0gYWRkcl9pbmNyZW1lbnQoKSkgeworCQltc3JzLT5j > b250cm9sc1tpXS5hZGRyID0gYWRkcjsKKwl9CisJCisJZm9yIChhZGRyID0gTVNSX1A0X01TX0VT > Q1IwICsgc3RhZzsKKwkgICAgIGFkZHIgPD0gTVNSX1A0X1RDX0VTQ1IxOyArK2ksIGFkZHIgKz0g > YWRkcl9pbmNyZW1lbnQoKSkgeyAKKwkJbXNycy0+Y29udHJvbHNbaV0uYWRkciA9IGFkZHI7CisJ > fQorCQorCWZvciAoYWRkciA9IE1TUl9QNF9JWF9FU0NSMCArIHN0YWc7CisJICAgICBhZGRyIDw9 > IE1TUl9QNF9DUlVfRVNDUjM7ICsraSwgYWRkciArPSBhZGRyX2luY3JlbWVudCgpKSB7IAorCQlt > c3JzLT5jb250cm9sc1tpXS5hZGRyID0gYWRkcjsKKwl9CisKKwkvKiB0aGVyZSBhcmUgMiByZW1h > aW5pbmcgbm9uLWNvbnRpZ3VvdXNseSBsb2NhdGVkIEVTQ1JzICovCisKKwlpZiAobnVtX2NvdW50 > ZXJzID09IE5VTV9DT1VOVEVSU19OT05fSFQpIHsJCQorCQkvKiBzdGFuZGFyZCBub24tSFQgQ1BV > cyBoYW5kbGUgYm90aCByZW1haW5pbmcgRVNDUnMqLworCQltc3JzLT5jb250cm9sc1tpKytdLmFk > ZHIgPSBNU1JfUDRfQ1JVX0VTQ1I1OworCQltc3JzLT5jb250cm9sc1tpKytdLmFkZHIgPSBNU1Jf > UDRfQ1JVX0VTQ1I0OworCisJfSBlbHNlIGlmIChzdGFnID09IDApIHsKKwkJLyogSFQgQ1BVcyBn > aXZlIHRoZSBmaXJzdCByZW1haW5kZXIgdG8gdGhlIGV2ZW4gdGhyZWFkLCBhcworCQkgICB0aGUg > MzJuZCBjb250cm9sIHJlZ2lzdGVyICovCisJCW1zcnMtPmNvbnRyb2xzW2krK10uYWRkciA9IE1T > Ul9QNF9DUlVfRVNDUjQ7CisKKwl9IGVsc2UgeworCQkvKiBhbmQgdHdvIGNvcGllcyBvZiB0aGUg > c2Vjb25kIHRvIHRoZSBvZGQgdGhyZWFkLAorCQkgICBmb3IgdGhlIDIyc3QgYW5kIDIzbmQgY29u > dHJvbCByZWdpc3RlcnMgKi8KKwkJbXNycy0+Y29udHJvbHNbaSsrXS5hZGRyID0gTVNSX1A0X0NS > VV9FU0NSNTsKKwkJbXNycy0+Y29udHJvbHNbaSsrXS5hZGRyID0gTVNSX1A0X0NSVV9FU0NSNTsK > Kwl9Cit9CisKKworc3RhdGljIHZvaWQgcG1jX3NldHVwX29uZV9wNF9jb3VudGVyKHVuc2lnbmVk > IGludCBjdHIpCit7CisJaW50IGk7CisJaW50IGNvbnN0IG1heGJpbmQgPSAyOworCXVuc2lnbmVk > IGludCBjY2NyID0gMDsKKwl1bnNpZ25lZCBpbnQgZXNjciA9IDA7CisJdW5zaWduZWQgaW50IGhp > Z2ggPSAwOworCXVuc2lnbmVkIGludCBjb3VudGVyX2JpdDsKKwlzdHJ1Y3QgcDRfZXZlbnRfYmlu > ZGluZyAqZXYgPSBOVUxMOworCXVuc2lnbmVkIGludCBzdGFnOworCisJc3RhZyA9IGdldF9zdGFn > Z2VyKCk7CisJCisJLyogY29udmVydCBmcm9tIGNvdW50ZXIgKm51bWJlciogdG8gY291bnRlciAq > Yml0KiAqLworCWNvdW50ZXJfYml0ID0gMSA8PCBWSVJUX0NUUihzdGFnLCBjdHIpOworCQorCS8q > IGZpbmQgb3VyIGV2ZW50IGJpbmRpbmcgc3RydWN0dXJlLiAqLworCWlmIChjb3VudGVyX2NvbmZp > Z1tjdHJdLmV2ZW50IDw9IDAgfHwgY291bnRlcl9jb25maWdbY3RyXS5ldmVudCA+IE5VTV9FVkVO > VFMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIAorCQkgICAgICAgIm9wcm9maWxlOiBQNCBldmVudCBj > b2RlIDB4JWx4IG91dCBvZiByYW5nZVxuIiwgCisJCSAgICAgICBjb3VudGVyX2NvbmZpZ1tjdHJd > LmV2ZW50KTsKKwkJcmV0dXJuOworCX0KKwkKKwlldiA9ICYocDRfZXZlbnRzW2NvdW50ZXJfY29u > ZmlnW2N0cl0uZXZlbnQgLSAxXSk7CisJCisJZm9yIChpID0gMDsgaSA8IG1heGJpbmQ7IGkrKykg > eworCQlpZiAoZXYtPmJpbmRpbmdzW2ldLnZpcnRfY291bnRlciAmIGNvdW50ZXJfYml0KSB7CisK > KwkJCS8qIG1vZGlmeSBFU0NSICovCisJCQlFU0NSX1JFQUQoZXNjciwgaGlnaCwgZXYsIGkpOwor > CQkJRVNDUl9DTEVBUihlc2NyKTsKKwkJCWlmIChzdGFnID09IDApIHsKKwkJCQlFU0NSX1NFVF9V > U1JfMChlc2NyLCBjb3VudGVyX2NvbmZpZ1tjdHJdLnVzZXIpOworCQkJCUVTQ1JfU0VUX09TXzAo > ZXNjciwgY291bnRlcl9jb25maWdbY3RyXS5rZXJuZWwpOworCQkJfSBlbHNlIHsKKwkJCQlFU0NS > X1NFVF9VU1JfMShlc2NyLCBjb3VudGVyX2NvbmZpZ1tjdHJdLnVzZXIpOworCQkJCUVTQ1JfU0VU > X09TXzEoZXNjciwgY291bnRlcl9jb25maWdbY3RyXS5rZXJuZWwpOworCQkJfQorCQkJRVNDUl9T > RVRfRVZFTlRfU0VMRUNUKGVzY3IsIGV2LT5ldmVudF9zZWxlY3QpOworCQkJRVNDUl9TRVRfRVZF > TlRfTUFTSyhlc2NyLCBjb3VudGVyX2NvbmZpZ1tjdHJdLnVuaXRfbWFzayk7CQkJCisJCQlFU0NS > X1dSSVRFKGVzY3IsIGhpZ2gsIGV2LCBpKTsKKwkJICAgICAgIAorCQkJLyogbW9kaWZ5IENDQ1Ig > Ki8KKwkJCUNDQ1JfUkVBRChjY2NyLCBoaWdoLCBWSVJUX0NUUihzdGFnLCBjdHIpKTsKKwkJCUND > Q1JfQ0xFQVIoY2Njcik7CisJCQlDQ0NSX1NFVF9SRVFVSVJFRF9CSVRTKGNjY3IpOworCQkJQ0ND > Ul9TRVRfRVNDUl9TRUxFQ1QoY2NjciwgZXYtPmVzY3Jfc2VsZWN0KTsKKwkJCWlmIChzdGFnID09 > IDApIHsKKwkJCQlDQ0NSX1NFVF9QTUlfT1ZGXzAoY2Njcik7CisJCQl9IGVsc2UgeworCQkJCUND > Q1JfU0VUX1BNSV9PVkZfMShjY2NyKTsKKwkJCX0KKwkJCUNDQ1JfV1JJVEUoY2NjciwgaGlnaCwg > VklSVF9DVFIoc3RhZywgY3RyKSk7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwlwcmludGsoS0VS > Tl9FUlIgCisJICAgICAgICJvcHJvZmlsZTogUDQgZXZlbnQgY29kZSAweCVseCBubyBiaW5kaW5n > LCBzdGFnICVkIGN0ciAlZFxuIiwKKwkgICAgICAgY291bnRlcl9jb25maWdbY3RyXS5ldmVudCwg > c3RhZywgY3RyKTsKK30KKworCitzdGF0aWMgdm9pZCBwNF9zZXR1cF9jdHJzKHN0cnVjdCBvcF9t > c3JzIGNvbnN0ICogY29uc3QgbXNycykKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwl1bnNpZ25lZCBp > bnQgbG93LCBoaWdoOworCXVuc2lnbmVkIGludCBhZGRyOworCXVuc2lnbmVkIGludCBzdGFnOwor > CisJc3RhZyA9IGdldF9zdGFnZ2VyKCk7CisKKwlyZG1zcihNU1JfSUEzMl9NSVNDX0VOQUJMRSwg > bG93LCBoaWdoKTsKKwlpZiAoISBNSVNDX1BNQ19FTkFCTEVEX1AobG93KSkgeworCQlwcmludGso > S0VSTl9FUlIgIm9wcm9maWxlOiBQNCBQTUMgbm90IGF2YWlsYWJsZVxuIik7CisJCXJldHVybjsK > Kwl9CisKKwkvKiBjbGVhciB0aGUgY2NjcnMgd2Ugd2lsbCB1c2UgKi8KKwlmb3IgKGkgPSAwIDsg > aSA8IG51bV9jb3VudGVycyA7IGkrKykgeworCQlyZG1zcihwNF9jb3VudGVyc1tWSVJUX0NUUihz > dGFnLCBpKV0uY2Njcl9hZGRyZXNzLCBsb3csIGhpZ2gpOworCQlDQ0NSX0NMRUFSKGxvdyk7CisJ > CUNDQ1JfU0VUX1JFUVVJUkVEX0JJVFMobG93KTsKKwkJd3Jtc3IocDRfY291bnRlcnNbVklSVF9D > VFIoc3RhZywgaSldLmNjY3JfYWRkcmVzcywgbG93LCBoaWdoKTsKKwl9CisKKwkvKiBjbGVhciBj > Y2NycyBvdXRzaWRlIG91ciBjb25jZXJuICovCisJZm9yIChpID0gc3RhZyA7IGkgPCBOVU1fVU5V > U0VEX0NDQ1JTIDsgaSArPSBhZGRyX2luY3JlbWVudCgpKSB7CisJCXJkbXNyKHA0X3VudXNlZF9j > Y2NyW2ldLCBsb3csIGhpZ2gpOworCQlDQ0NSX0NMRUFSKGxvdyk7CisJCUNDQ1JfU0VUX1JFUVVJ > UkVEX0JJVFMobG93KTsKKwkJd3Jtc3IocDRfdW51c2VkX2NjY3JbaV0sIGxvdywgaGlnaCk7CisJ > fQorCisJLyogY2xlYXIgYWxsIGVzY3JzIChpbmNsdWRpbmcgdGhvc2Ugb3V0c2lkZSBvdXIgY29u > Y2VybikgKi8KKwlmb3IgKGFkZHIgPSBNU1JfUDRfQlNVX0VTQ1IwICsgc3RhZzsKKwkgICAgIGFk > ZHIgPCAgTVNSX1A0X0lRX0VTQ1IwOyBhZGRyICs9IGFkZHJfaW5jcmVtZW50KCkpIHsKKwkJd3Jt > c3IoYWRkciwgMCwgMCk7CisJfQorCisJLyogT24gb2xkZXIgbW9kZWxzIGNsZWFyIGFsc28gTVNS > X1A0X0lRX0VTQ1IwLzEgKi8KKwlpZiAoYm9vdF9jcHVfZGF0YS54ODZfbW9kZWwgPCAweDMpIHsK > KwkJd3Jtc3IoTVNSX1A0X0lRX0VTQ1IwLCAwLCAwKTsKKwkJd3Jtc3IoTVNSX1A0X0lRX0VTQ1Ix > LCAwLCAwKTsKKwl9CisKKwlmb3IgKGFkZHIgPSBNU1JfUDRfUkFUX0VTQ1IwICsgc3RhZzsKKwkg > ICAgIGFkZHIgPD0gTVNSX1A0X1NTVV9FU0NSMDsgKytpLCBhZGRyICs9IGFkZHJfaW5jcmVtZW50 > KCkpIHsKKwkJd3Jtc3IoYWRkciwgMCwgMCk7CisJfQorCQorCWZvciAoYWRkciA9IE1TUl9QNF9N > U19FU0NSMCArIHN0YWc7CisJICAgICBhZGRyIDw9IE1TUl9QNF9UQ19FU0NSMTsgYWRkciArPSBh > ZGRyX2luY3JlbWVudCgpKXsgCisJCXdybXNyKGFkZHIsIDAsIDApOworCX0KKwkKKwlmb3IgKGFk > ZHIgPSBNU1JfUDRfSVhfRVNDUjAgKyBzdGFnOworCSAgICAgYWRkciA8PSBNU1JfUDRfQ1JVX0VT > Q1IzOyBhZGRyICs9IGFkZHJfaW5jcmVtZW50KCkpeyAKKwkJd3Jtc3IoYWRkciwgMCwgMCk7CisJ > fQorCisJaWYgKG51bV9jb3VudGVycyA9PSBOVU1fQ09VTlRFUlNfTk9OX0hUKSB7CQkKKwkJd3Jt > c3IoTVNSX1A0X0NSVV9FU0NSNCwgMCwgMCk7CisJCXdybXNyKE1TUl9QNF9DUlVfRVNDUjUsIDAs > IDApOworCX0gZWxzZSBpZiAoc3RhZyA9PSAwKSB7CisJCXdybXNyKE1TUl9QNF9DUlVfRVNDUjQs > IDAsIDApOworCX0gZWxzZSB7CisJCXdybXNyKE1TUl9QNF9DUlVfRVNDUjUsIDAsIDApOworCX0J > CQorCQorCS8qIHNldHVwIGFsbCBjb3VudGVycyAqLworCWZvciAoaSA9IDAgOyBpIDwgbnVtX2Nv > dW50ZXJzIDsgKytpKSB7CisJCWlmIChjb3VudGVyX2NvbmZpZ1tpXS5lbmFibGVkKSB7CisJCQly > ZXNldF92YWx1ZVtpXSA9IGNvdW50ZXJfY29uZmlnW2ldLmNvdW50OworCQkJcG1jX3NldHVwX29u > ZV9wNF9jb3VudGVyKGkpOworCQkJQ1RSX1dSSVRFKGNvdW50ZXJfY29uZmlnW2ldLmNvdW50LCBW > SVJUX0NUUihzdGFnLCBpKSk7CisJCX0gZWxzZSB7CisJCQlyZXNldF92YWx1ZVtpXSA9IDA7CisJ > CX0KKwl9Cit9CisKKworZXh0ZXJuIHZvaWQgcG1jX2xvZ19ldmVudChzdHJ1Y3QgZG9tYWluICpk > LCB1bnNpZ25lZCBpbnQgZWlwLCBpbnQgbW9kZSwgaW50IGV2ZW50KTsKK2V4dGVybiBpbnQgaXNf > cHJvZmlsZWQoc3RydWN0IGRvbWFpbiAqIGQpOworZXh0ZXJuIHN0cnVjdCBkb21haW4gKiBwcmlt > YXJ5X3Byb2ZpbGVyOworCitzdGF0aWMgaW50IHA0X2NoZWNrX2N0cnModW5zaWduZWQgaW50IGNv > bnN0IGNwdSwgCisJCQkgIHN0cnVjdCBvcF9tc3JzIGNvbnN0ICogY29uc3QgbXNycywKKwkJCSAg > c3RydWN0IHhlbl9yZWdzICogY29uc3QgcmVncykKK3sKKwl1bnNpZ25lZCBsb25nIGN0ciwgbG93 > LCBoaWdoLCBzdGFnLCByZWFsOworCWludCBpLCBvdmYgPSAwOworCXVuc2lnbmVkIGxvbmcgZWlw > ID0gcmVncy0+ZWlwOworCWludCBtb2RlID0gMDsKKworCWlmIChSSU5HXzEocmVncykpCisJCW1v > ZGUgPSAxOworCWVsc2UgaWYgKFJJTkdfMChyZWdzKSkKKwkJbW9kZSA9IDI7CisKKwlzdGFnID0g > Z2V0X3N0YWdnZXIoKTsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fY291bnRlcnM7ICsraSkgewor > CQlpZiAoIXJlc2V0X3ZhbHVlW2ldKSAKKwkJCWNvbnRpbnVlOworCisJCS8qIAorCQkgKiB0aGVy > ZSBpcyBzb21lIGVjY2VudHJpY2l0eSBpbiB0aGUgaGFyZHdhcmUgd2hpY2gKKwkJICogcmVxdWly > ZXMgdGhhdCB3ZSBwZXJmb3JtIDIgZXh0cmEgY29ycmVjdGlvbnM6CisJCSAqCisJCSAqIC0gY2hl > Y2sgYm90aCB0aGUgQ0NDUjpPVkYgZmxhZyBmb3Igb3ZlcmZsb3cgYW5kIHRoZQorCQkgKiAgIGNv > dW50ZXIgaGlnaCBiaXQgZm9yIHVuLWZsYWdnZWQgb3ZlcmZsb3dzLgorCQkgKgorCQkgKiAtIHdy > aXRlIHRoZSBjb3VudGVyIGJhY2sgdHdpY2UgdG8gZW5zdXJlIGl0IGdldHMKKwkJICogICB1cGRh > dGVkIHByb3Blcmx5LgorCQkgKiAKKwkJICogdGhlIGZvcm1lciBzZWVtcyB0byBiZSByZWxhdGVk > IHRvIGV4dHJhIE5NSXMgaGFwcGVuaW5nCisJCSAqIGR1cmluZyB0aGUgY3VycmVudCBOTUk7IHRo > ZSBsYXR0ZXIgaXMgcmVwb3J0ZWQgYXMgZXJyYXRhCisJCSAqIE4xNSBpbiBpbnRlbCBkb2MgMjQ5 > MTk5LTAyOSwgcGVudGl1bSA0IHNwZWNpZmljYXRpb24KKwkJICogdXBkYXRlLCB0aG91Z2ggdGhl > aXIgc3VnZ2VzdGVkIHdvcmstYXJvdW5kIGRvZXMgbm90CisJCSAqIGFwcGVhciB0byBzb2x2ZSB0 > aGUgcHJvYmxlbS4KKwkJICovCisJCQorCQlyZWFsID0gVklSVF9DVFIoc3RhZywgaSk7CisKKwkJ > Q0NDUl9SRUFEKGxvdywgaGlnaCwgcmVhbCk7CisgCQlDVFJfUkVBRChjdHIsIGhpZ2gsIHJlYWwp > OworCQlpZiAoQ0NDUl9PVkZfUChsb3cpIHx8IENUUl9PVkVSRkxPV19QKGN0cikpIHsKKwkJCXBt > Y19sb2dfZXZlbnQoY3VycmVudCwgZWlwLCBtb2RlLCBpKTsKKyAJCQlDVFJfV1JJVEUocmVzZXRf > dmFsdWVbaV0sIHJlYWwpOworCQkJQ0NDUl9DTEVBUl9PVkYobG93KTsKKwkJCUNDQ1JfV1JJVEUo > bG93LCBoaWdoLCByZWFsKTsKKyAJCQlDVFJfV1JJVEUocmVzZXRfdmFsdWVbaV0sIHJlYWwpOwor > CQkJb3ZmID0gMTsKKwkJfQorCX0KKworCS8qIFA0IHF1aXJrOiB5b3UgaGF2ZSB0byByZS11bm1h > c2sgdGhlIGFwaWMgdmVjdG9yICovCisJYXBpY193cml0ZShBUElDX0xWVFBDLCBhcGljX3JlYWQo > QVBJQ19MVlRQQykgJiB+QVBJQ19MVlRfTUFTS0VEKTsKKworCS8qIFNlZSBvcF9tb2RlbF9wcHJv > LmMgKi8KKwlyZXR1cm4gb3ZmOworfQorCisKK3N0YXRpYyB2b2lkIHA0X3N0YXJ0KHN0cnVjdCBv > cF9tc3JzIGNvbnN0ICogY29uc3QgbXNycykKK3sKKwl1bnNpZ25lZCBpbnQgbG93LCBoaWdoLCBz > dGFnOworCWludCBpOworCisJc3RhZyA9IGdldF9zdGFnZ2VyKCk7CisKKwlmb3IgKGkgPSAwOyBp > IDwgbnVtX2NvdW50ZXJzOyArK2kpIHsKKwkJaWYgKCFyZXNldF92YWx1ZVtpXSkKKwkJCWNvbnRp > bnVlOworCQlDQ0NSX1JFQUQobG93LCBoaWdoLCBWSVJUX0NUUihzdGFnLCBpKSk7CisJCUNDQ1Jf > U0VUX0VOQUJMRShsb3cpOworCQlDQ0NSX1dSSVRFKGxvdywgaGlnaCwgVklSVF9DVFIoc3RhZywg > aSkpOworCX0KK30KKworCitzdGF0aWMgdm9pZCBwNF9zdG9wKHN0cnVjdCBvcF9tc3JzIGNvbnN0 > ICogY29uc3QgbXNycykKK3sKKwl1bnNpZ25lZCBpbnQgbG93LCBoaWdoLCBzdGFnOworCWludCBp > OworCisJc3RhZyA9IGdldF9zdGFnZ2VyKCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2NvdW50 > ZXJzOyArK2kpIHsKKwkJQ0NDUl9SRUFEKGxvdywgaGlnaCwgVklSVF9DVFIoc3RhZywgaSkpOwor > CQlDQ0NSX1NFVF9ESVNBQkxFKGxvdyk7CisJCUNDQ1JfV1JJVEUobG93LCBoaWdoLCBWSVJUX0NU > UihzdGFnLCBpKSk7CisJfQorfQorCisKKyNpZmRlZiBDT05GSUdfU01QCitzdHJ1Y3Qgb3BfeDg2 > X21vZGVsX3NwZWMgY29uc3Qgb3BfcDRfaHQyX3NwZWMgPSB7CisJLm51bV9jb3VudGVycyA9IE5V > TV9DT1VOVEVSU19IVDIsCisJLm51bV9jb250cm9scyA9IE5VTV9DT05UUk9MU19IVDIsCisJLmZp > bGxfaW5fYWRkcmVzc2VzID0gJnA0X2ZpbGxfaW5fYWRkcmVzc2VzLAorCS5zZXR1cF9jdHJzID0g > JnA0X3NldHVwX2N0cnMsCisJLmNoZWNrX2N0cnMgPSAmcDRfY2hlY2tfY3RycywKKwkuc3RhcnQg > PSAmcDRfc3RhcnQsCisJLnN0b3AgPSAmcDRfc3RvcAorfTsKKyNlbmRpZgorCitzdHJ1Y3Qgb3Bf > eDg2X21vZGVsX3NwZWMgY29uc3Qgb3BfcDRfc3BlYyA9IHsKKwkubnVtX2NvdW50ZXJzID0gTlVN > X0NPVU5URVJTX05PTl9IVCwKKwkubnVtX2NvbnRyb2xzID0gTlVNX0NPTlRST0xTX05PTl9IVCwK > KwkuZmlsbF9pbl9hZGRyZXNzZXMgPSAmcDRfZmlsbF9pbl9hZGRyZXNzZXMsCisJLnNldHVwX2N0 > cnMgPSAmcDRfc2V0dXBfY3RycywKKwkuY2hlY2tfY3RycyA9ICZwNF9jaGVja19jdHJzLAorCS5z > dGFydCA9ICZwNF9zdGFydCwKKwkuc3RvcCA9ICZwNF9zdG9wCit9OwpkaWZmIC1QTmF1ciB4ZW4t > Mi4wLjUveGVuL2FyY2gveDg2L29wcm9maWxlL29wX21vZGVsX3Bwcm8uYyB4ZW4tMi4wLjUtcHJv > Zi94ZW4vYXJjaC94ODYvb3Byb2ZpbGUvb3BfbW9kZWxfcHByby5jCi0tLSB4ZW4tMi4wLjUveGVu > L2FyY2gveDg2L29wcm9maWxlL29wX21vZGVsX3Bwcm8uYwkxOTY5LTEyLTMxIDE2OjAwOjAwLjAw > MDAwMDAwMCAtMDgwMAorKysgeGVuLTIuMC41LXByb2YveGVuL2FyY2gveDg2L29wcm9maWxlL29w > X21vZGVsX3Bwcm8uYwkyMDA1LTA0LTA2IDA5OjI3OjEzLjAwMDAwMDAwMCAtMDcwMApAQCAtMCww > ICsxLDE2NiBAQAorLyoqCisgKiBAZmlsZSBvcF9tb2RlbF9wcHJvLmgKKyAqIHBlbnRpdW0gcHJv > IC8gUDYgbW9kZWwtc3BlY2lmaWMgTVNSIG9wZXJhdGlvbnMKKyAqCisgKiBAcmVtYXJrIENvcHly > aWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVhZCB0aGUgZmlsZSBDT1BZ > SU5HCisgKgorICogQGF1dGhvciBKb2huIExldm9uCisgKiBAYXV0aG9yIFBoaWxpcHBlIEVsaWUK > KyAqIEBhdXRob3IgR3JheWRvbiBIb2FyZQorICoKKyAqIE1vZGlmaWVkIGJ5IEFyYXZpbmQgTWVu > b24gZm9yIFhlbgorICogVGhlc2UgbW9kaWZpY2F0aW9ucyBhcmU6CisgKiBDb3B5cmlnaHQgKEMp > IDIwMDUgSGV3bGV0dC1QYWNrYXJkIENvLgorICovCisKKyNpbmNsdWRlIDx4ZW4vdHlwZXMuaD4K > KyNpbmNsdWRlIDxhc20vbXNyLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNt > L2FwaWMuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8eGVuL3NjaGVk > Lmg+CisgCisjaW5jbHVkZSAib3BfeDg2X21vZGVsLmgiCisjaW5jbHVkZSAib3BfY291bnRlci5o > IgorCisjZGVmaW5lIE5VTV9DT1VOVEVSUyAyCisjZGVmaW5lIE5VTV9DT05UUk9MUyAyCisKKyNk > ZWZpbmUgQ1RSX1JFQUQobCxoLG1zcnMsYykgZG8ge3JkbXNyKG1zcnMtPmNvdW50ZXJzWyhjKV0u > YWRkciwgKGwpLCAoaCkpO30gd2hpbGUgKDApCisjZGVmaW5lIENUUl9XUklURShsLG1zcnMsYykg > ZG8ge3dybXNyKG1zcnMtPmNvdW50ZXJzWyhjKV0uYWRkciwgLSh1MzIpKGwpLCAtMSk7fSB3aGls > ZSAoMCkKKyNkZWZpbmUgQ1RSX09WRVJGTE9XRUQobikgKCEoKG4pICYgKDFVPDwzMSkpKQorCisj > ZGVmaW5lIENUUkxfUkVBRChsLGgsbXNycyxjKSBkbyB7cmRtc3IoKG1zcnMtPmNvbnRyb2xzWyhj > KV0uYWRkciksIChsKSwgKGgpKTt9IHdoaWxlICgwKQorI2RlZmluZSBDVFJMX1dSSVRFKGwsaCxt > c3JzLGMpIGRvIHt3cm1zcigobXNycy0+Y29udHJvbHNbKGMpXS5hZGRyKSwgKGwpLCAoaCkpO30g > d2hpbGUgKDApCisjZGVmaW5lIENUUkxfU0VUX0FDVElWRShuKSAobiB8PSAoMTw8MjIpKQorI2Rl > ZmluZSBDVFJMX1NFVF9JTkFDVElWRShuKSAobiAmPSB+KDE8PDIyKSkKKyNkZWZpbmUgQ1RSTF9D > TEVBUih4KSAoeCAmPSAoMTw8MjEpKQorI2RlZmluZSBDVFJMX1NFVF9FTkFCTEUodmFsKSAodmFs > IHw9IDE8PDIwKQorI2RlZmluZSBDVFJMX1NFVF9VU1IodmFsLHUpICh2YWwgfD0gKCh1ICYgMSkg > PDwgMTYpKQorI2RlZmluZSBDVFJMX1NFVF9LRVJOKHZhbCxrKSAodmFsIHw9ICgoayAmIDEpIDw8 > IDE3KSkKKyNkZWZpbmUgQ1RSTF9TRVRfVU0odmFsLCBtKSAodmFsIHw9IChtIDw8IDgpKQorI2Rl > ZmluZSBDVFJMX1NFVF9FVkVOVCh2YWwsIGUpICh2YWwgfD0gZSkKKworc3RhdGljIHVuc2lnbmVk > IGxvbmcgcmVzZXRfdmFsdWVbTlVNX0NPVU5URVJTXTsKKyAKK3N0YXRpYyB2b2lkIHBwcm9fZmls > bF9pbl9hZGRyZXNzZXMoc3RydWN0IG9wX21zcnMgKiBjb25zdCBtc3JzKQoreworCW1zcnMtPmNv > dW50ZXJzWzBdLmFkZHIgPSBNU1JfUDZfUEVSRkNUUjA7CisJbXNycy0+Y291bnRlcnNbMV0uYWRk > ciA9IE1TUl9QNl9QRVJGQ1RSMTsKKwkKKwltc3JzLT5jb250cm9sc1swXS5hZGRyID0gTVNSX1A2 > X0VWTlRTRUwwOworCW1zcnMtPmNvbnRyb2xzWzFdLmFkZHIgPSBNU1JfUDZfRVZOVFNFTDE7Cit9 > CisKKworc3RhdGljIHZvaWQgcHByb19zZXR1cF9jdHJzKHN0cnVjdCBvcF9tc3JzIGNvbnN0ICog > Y29uc3QgbXNycykKK3sKKwl1bnNpZ25lZCBpbnQgbG93LCBoaWdoOworCWludCBpOworCisJLyog > Y2xlYXIgYWxsIGNvdW50ZXJzICovCisJZm9yIChpID0gMCA7IGkgPCBOVU1fQ09OVFJPTFM7ICsr > aSkgeworCQlDVFJMX1JFQUQobG93LCBoaWdoLCBtc3JzLCBpKTsKKwkJQ1RSTF9DTEVBUihsb3cp > OworCQlDVFJMX1dSSVRFKGxvdywgaGlnaCwgbXNycywgaSk7CisJfQorCQorCS8qIGF2b2lkIGEg > ZmFsc2UgZGV0ZWN0aW9uIG9mIGN0ciBvdmVyZmxvd3MgaW4gTk1JIGhhbmRsZXIgKi8KKwlmb3Ig > KGkgPSAwOyBpIDwgTlVNX0NPVU5URVJTOyArK2kpIHsKKwkJQ1RSX1dSSVRFKDEsIG1zcnMsIGkp > OworCX0KKworCS8qIGVuYWJsZSBhY3RpdmUgY291bnRlcnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwg > TlVNX0NPVU5URVJTOyArK2kpIHsKKwkJaWYgKGNvdW50ZXJfY29uZmlnW2ldLmVuYWJsZWQpIHsK > KwkJCXJlc2V0X3ZhbHVlW2ldID0gY291bnRlcl9jb25maWdbaV0uY291bnQ7CisKKwkJCUNUUl9X > UklURShjb3VudGVyX2NvbmZpZ1tpXS5jb3VudCwgbXNycywgaSk7CisKKwkJCUNUUkxfUkVBRChs > b3csIGhpZ2gsIG1zcnMsIGkpOworCQkJQ1RSTF9DTEVBUihsb3cpOworCQkJQ1RSTF9TRVRfRU5B > QkxFKGxvdyk7CisJCQlDVFJMX1NFVF9VU1IobG93LCBjb3VudGVyX2NvbmZpZ1tpXS51c2VyKTsK > KwkJCUNUUkxfU0VUX0tFUk4obG93LCBjb3VudGVyX2NvbmZpZ1tpXS5rZXJuZWwpOworCQkJQ1RS > TF9TRVRfVU0obG93LCBjb3VudGVyX2NvbmZpZ1tpXS51bml0X21hc2spOworCQkJQ1RSTF9TRVRf > RVZFTlQobG93LCBjb3VudGVyX2NvbmZpZ1tpXS5ldmVudCk7CisJCQlDVFJMX1dSSVRFKGxvdywg > aGlnaCwgbXNycywgaSk7CisJCX0KKwl9Cit9CisKK2V4dGVybiB2b2lkIHBtY19sb2dfZXZlbnQo > c3RydWN0IGRvbWFpbiAqZCwgdW5zaWduZWQgaW50IGVpcCwgaW50IG1vZGUsIGludCBldmVudCk7 > CitleHRlcm4gaW50IGlzX3Byb2ZpbGVkKHN0cnVjdCBkb21haW4gKiBkKTsKK2V4dGVybiBzdHJ1 > Y3QgZG9tYWluICogcHJpbWFyeV9wcm9maWxlcjsKKworc3RhdGljIGludCBwcHJvX2NoZWNrX2N0 > cnModW5zaWduZWQgaW50IGNvbnN0IGNwdSwgCisJCQkgICAgc3RydWN0IG9wX21zcnMgY29uc3Qg > KiBjb25zdCBtc3JzLAorCQkJICAgIHN0cnVjdCB4ZW5fcmVncyAqIGNvbnN0IHJlZ3MpCit7CisJ > dW5zaWduZWQgaW50IGxvdywgaGlnaDsKKwlpbnQgaSwgb3ZmID0gMDsKKwl1bnNpZ25lZCBsb25n > IGVpcCA9IHJlZ3MtPmVpcDsKKwlpbnQgbW9kZSA9IDA7CisKKwlpZiAoUklOR18xKHJlZ3MpKSAK > KwkJbW9kZSA9IDE7CisJZWxzZSBpZiAoUklOR18wKHJlZ3MpKQorCQltb2RlID0gMjsKKworCWZv > ciAoaSA9IDAgOyBpIDwgTlVNX0NPVU5URVJTOyArK2kpIHsKKwkJQ1RSX1JFQUQobG93LCBoaWdo > LCBtc3JzLCBpKTsKKwkJaWYgKENUUl9PVkVSRkxPV0VEKGxvdykpIHsKKwkJCXBtY19sb2dfZXZl > bnQoY3VycmVudCwgZWlwLCBtb2RlLCBpKTsKKwkJCUNUUl9XUklURShyZXNldF92YWx1ZVtpXSwg > bXNycywgaSk7CisJCQlvdmYgPSAxOworCQl9CisJfQorCisJLyogT25seSBQNiBiYXNlZCBQZW50 > aXVtIE0gbmVlZCB0byByZS11bm1hc2sgdGhlIGFwaWMgdmVjdG9yIGJ1dCBpdAorCSAqIGRvZXNu > J3QgaHVydCBvdGhlciBQNiB2YXJpYW50ICovCisJYXBpY193cml0ZShBUElDX0xWVFBDLCBhcGlj > X3JlYWQoQVBJQ19MVlRQQykgJiB+QVBJQ19MVlRfTUFTS0VEKTsKKworCS8qIFdlIGNhbid0IHdv > cmsgb3V0IGlmIHdlIHJlYWxseSBoYW5kbGVkIGFuIGludGVycnVwdC4gV2UKKwkgKiBtaWdodCBo > YXZlIGNhdWdodCBhICpzZWNvbmQqIGNvdW50ZXIganVzdCBhZnRlciBvdmVyZmxvd2luZworCSAq > IHRoZSBpbnRlcnJ1cHQgZm9yIHRoaXMgY291bnRlciB0aGVuIGFycml2ZXMKKwkgKiBhbmQgd2Ug > ZG9uJ3QgZmluZCBhIGNvdW50ZXIgdGhhdCdzIG92ZXJmbG93ZWQsIHNvIHdlCisJICogd291bGQg > cmV0dXJuIDAgYW5kIGdldCBkYXplZCArIGNvbmZ1c2VkLiBJbnN0ZWFkIHdlIGFsd2F5cworCSAq > IGFzc3VtZSB3ZSBmb3VuZCBhbiBvdmVyZmxvdy4gVGhpcyBzdWNrcy4KKwkgKi8KKwlyZXR1cm4g > b3ZmOworfQorCisgCitzdGF0aWMgdm9pZCBwcHJvX3N0YXJ0KHN0cnVjdCBvcF9tc3JzIGNvbnN0 > ICogY29uc3QgbXNycykKK3sKKwl1bnNpZ25lZCBpbnQgbG93LGhpZ2g7CisJQ1RSTF9SRUFEKGxv > dywgaGlnaCwgbXNycywgMCk7CisJQ1RSTF9TRVRfQUNUSVZFKGxvdyk7CisJQ1RSTF9XUklURShs > b3csIGhpZ2gsIG1zcnMsIDApOworfQorCitzdGF0aWMgdm9pZCBwcHJvX3N0b3Aoc3RydWN0IG9w > X21zcnMgY29uc3QgKiBjb25zdCBtc3JzKQoreworCXVuc2lnbmVkIGludCBsb3csaGlnaDsKKwlD > VFJMX1JFQUQobG93LCBoaWdoLCBtc3JzLCAwKTsKKwlDVFJMX1NFVF9JTkFDVElWRShsb3cpOwor > CUNUUkxfV1JJVEUobG93LCBoaWdoLCBtc3JzLCAwKTsKK30KKwordW5zaWduZWQgaW50IHJlYWRf > Y3RyKHN0cnVjdCBvcF9tc3JzIGNvbnN0ICogY29uc3QgbXNycywgaW50IGkpCit7CisJdW5zaWdu > ZWQgaW50IGxvdywgaGlnaDsKKwlDVFJfUkVBRChsb3csIGhpZ2gsIG1zcnMsIGkpOworCXJldHVy > biBsb3c7Cit9CisKK3N0cnVjdCBvcF94ODZfbW9kZWxfc3BlYyBjb25zdCBvcF9wcHJvX3NwZWMg > PSB7CisJLm51bV9jb3VudGVycyA9IE5VTV9DT1VOVEVSUywKKwkubnVtX2NvbnRyb2xzID0gTlVN > X0NPTlRST0xTLAorCS5maWxsX2luX2FkZHJlc3NlcyA9ICZwcHJvX2ZpbGxfaW5fYWRkcmVzc2Vz > LAorCS5zZXR1cF9jdHJzID0gJnBwcm9fc2V0dXBfY3RycywKKwkuY2hlY2tfY3RycyA9ICZwcHJv > X2NoZWNrX2N0cnMsCisJLnN0YXJ0ID0gJnBwcm9fc3RhcnQsCisJLnN0b3AgPSAmcHByb19zdG9w > Cit9OwpkaWZmIC1QTmF1ciB4ZW4tMi4wLjUveGVuL2FyY2gveDg2L29wcm9maWxlL29wX3g4Nl9t > b2RlbC5oIHhlbi0yLjAuNS1wcm9mL3hlbi9hcmNoL3g4Ni9vcHJvZmlsZS9vcF94ODZfbW9kZWwu > aAotLS0geGVuLTIuMC41L3hlbi9hcmNoL3g4Ni9vcHJvZmlsZS9vcF94ODZfbW9kZWwuaAkxOTY5 > LTEyLTMxIDE2OjAwOjAwLjAwMDAwMDAwMCAtMDgwMAorKysgeGVuLTIuMC41LXByb2YveGVuL2Fy > Y2gveDg2L29wcm9maWxlL29wX3g4Nl9tb2RlbC5oCTIwMDUtMDQtMDYgMDk6Mjc6MTMuMDAwMDAw > MDAwIC0wNzAwCkBAIC0wLDAgKzEsNTUgQEAKKy8qKgorICogQGZpbGUgb3BfeDg2X21vZGVsLmgK > KyAqIGludGVyZmFjZSB0byB4ODYgbW9kZWwtc3BlY2lmaWMgTVNSIG9wZXJhdGlvbnMKKyAqCisg > KiBAcmVtYXJrIENvcHlyaWdodCAyMDAyIE9Qcm9maWxlIGF1dGhvcnMKKyAqIEByZW1hcmsgUmVh > ZCB0aGUgZmlsZSBDT1BZSU5HCisgKgorICogQGF1dGhvciBHcmF5ZG9uIEhvYXJlCisgKgorICog > TW9kaWZpZWQgYnkgQXJhdmluZCBNZW5vbiBmb3IgWGVuCisgKiBUaGVzZSBtb2RpZmljYXRpb25z > IGFyZToKKyAqIENvcHlyaWdodCAoQykgMjAwNSBIZXdsZXR0LVBhY2thcmQgQ28uCisgKi8KKwor > I2lmbmRlZiBPUF9YODZfTU9ERUxfSAorI2RlZmluZSBPUF9YODZfTU9ERUxfSAorCitzdHJ1Y3Qg > b3Bfc2F2ZWRfbXNyIHsKKwl1bnNpZ25lZCBpbnQgaGlnaDsKKwl1bnNpZ25lZCBpbnQgbG93Owor > fTsKKworc3RydWN0IG9wX21zciB7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCXN0cnVjdCBvcF9z > YXZlZF9tc3Igc2F2ZWQ7Cit9OworCitzdHJ1Y3Qgb3BfbXNycyB7CisJc3RydWN0IG9wX21zciAq > IGNvdW50ZXJzOworCXN0cnVjdCBvcF9tc3IgKiBjb250cm9sczsKK307CisKK3N0cnVjdCBwdF9y > ZWdzOworCisvKiBUaGUgbW9kZWwgdnRhYmxlIGFic3RyYWN0cyB0aGUgZGlmZmVyZW5jZXMgYmV0 > d2VlbgorICogdmFyaW91cyB4ODYgQ1BVIG1vZGVsJ3MgcGVyZmN0ciBzdXBwb3J0LgorICovCitz > dHJ1Y3Qgb3BfeDg2X21vZGVsX3NwZWMgeworCXVuc2lnbmVkIGludCBjb25zdCBudW1fY291bnRl > cnM7CisJdW5zaWduZWQgaW50IGNvbnN0IG51bV9jb250cm9sczsKKwl2b2lkICgqZmlsbF9pbl9h > ZGRyZXNzZXMpKHN0cnVjdCBvcF9tc3JzICogY29uc3QgbXNycyk7CisJdm9pZCAoKnNldHVwX2N0 > cnMpKHN0cnVjdCBvcF9tc3JzIGNvbnN0ICogY29uc3QgbXNycyk7CisJaW50ICgqY2hlY2tfY3Ry > cykodW5zaWduZWQgaW50IGNvbnN0IGNwdSwgCisJCXN0cnVjdCBvcF9tc3JzIGNvbnN0ICogY29u > c3QgbXNycywKKwkJc3RydWN0IHhlbl9yZWdzICogY29uc3QgcmVncyk7CisJdm9pZCAoKnN0YXJ0 > KShzdHJ1Y3Qgb3BfbXNycyBjb25zdCAqIGNvbnN0IG1zcnMpOworCXZvaWQgKCpzdG9wKShzdHJ1 > Y3Qgb3BfbXNycyBjb25zdCAqIGNvbnN0IG1zcnMpOworfTsKKworZXh0ZXJuIHN0cnVjdCBvcF94 > ODZfbW9kZWxfc3BlYyBjb25zdCBvcF9wcHJvX3NwZWM7CitleHRlcm4gc3RydWN0IG9wX3g4Nl9t > b2RlbF9zcGVjIGNvbnN0IG9wX3A0X3NwZWM7CitleHRlcm4gc3RydWN0IG9wX3g4Nl9tb2RlbF9z > cGVjIGNvbnN0IG9wX3A0X2h0Ml9zcGVjOworZXh0ZXJuIHN0cnVjdCBvcF94ODZfbW9kZWxfc3Bl > YyBjb25zdCBvcF9hdGhsb25fc3BlYzsKKworI2VuZGlmIC8qIE9QX1g4Nl9NT0RFTF9IICovCmRp > ZmYgLVBOYXVyIHhlbi0yLjAuNS94ZW4vYXJjaC94ODYvb3Byb2ZpbGUvcG1jLmMgeGVuLTIuMC41 > LXByb2YveGVuL2FyY2gveDg2L29wcm9maWxlL3BtYy5jCi0tLSB4ZW4tMi4wLjUveGVuL2FyY2gv > eDg2L29wcm9maWxlL3BtYy5jCTE5NjktMTItMzEgMTY6MDA6MDAuMDAwMDAwMDAwIC0wODAwCisr > KyB4ZW4tMi4wLjUtcHJvZi94ZW4vYXJjaC94ODYvb3Byb2ZpbGUvcG1jLmMJMjAwNS0wNC0wNiAw > OToyNzoxMy4wMDAwMDAwMDAgLTA3MDAKQEAgLTAsMCArMSwyODEgQEAKKy8qCisgKiBDb3B5cmln > aHQgKEMpIDIwMDUgSGV3bGV0dC1QYWNrYXJkIENvLgorICogd3JpdHRlbiBieSBBcmF2aW5kIE1l > bm9uLCBlbWFpbDogeGVub3Byb2ZAZ3JvdXBzLmhwLmNvbQorICovCisKKyNpbmNsdWRlIDx4ZW4v > c2NoZWQuaD4KKworI2luY2x1ZGUgIm9wX2NvdW50ZXIuaCIKKworaW50IGFjdGl2ZV9kb21haW5z > W01BWF9PUFJPRl9ET01BSU5TXTsKK2ludCBwYXNzaXZlX2RvbWFpbnNbTUFYX09QUk9GX0RPTUFJ > TlNdOwordW5zaWduZWQgaW50IGFkb21haW5zID0gMDsKK3Vuc2lnbmVkIGludCBwZG9tYWlucyA9 > IDA7Cit1bnNpZ25lZCBpbnQgYWN0aXZhdGVkID0gMDsKKworI2RlZmluZSBWSVJRX0JJVE1BU0tf > U0laRQkoTUFYX09QUk9GX0RPTUFJTlMvMzIgKyAxKQorCitzdHJ1Y3QgZG9tYWluICogcHJpbWFy > eV9wcm9maWxlciA9IE5VTEw7CitzdHJ1Y3QgZG9tYWluICogYWRvbWFpbl9wdHJzW01BWF9PUFJP > Rl9ET01BSU5TXTsKK3Vuc2lnbmVkIGludCB2aXJxX292Zl9wZW5kaW5nW1ZJUlFfQklUTUFTS19T > SVpFXTsKKworaW50IGlzX2FjdGl2ZShzdHJ1Y3QgZG9tYWluICpkKSAKK3sKKwlpbnQgaTsKKwlm > b3IgKGkgPSAwOyBpIDwgYWRvbWFpbnM7IGkrKykKKwkJaWYgKGQtPmlkID09IGFjdGl2ZV9kb21h > aW5zW2ldKQorCQkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKK2ludCBhY3RpdmVfaWQoc3Ry > dWN0IGRvbWFpbiAqZCkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgYWRvbWFpbnM7IGkr > KykKKwkJaWYgKGQgPT0gYWRvbWFpbl9wdHJzW2ldKQorCQkJcmV0dXJuIGk7CisJcmV0dXJuIC0x > OworfQorCit2b2lkIGZyZWVfYWRvbWFpbl9wdHJzKCkgCit7CisJaW50IGk7CisJaW50IG51bSA9 > IGFkb21haW5zOworCisJYWRvbWFpbnMgPSAwOworCWZvciAoaSA9IDA7IGkgPCBWSVJRX0JJVE1B > U0tfU0laRTsgaSsrKQorCQl2aXJxX292Zl9wZW5kaW5nW2ldID0gMDsKKworCWZvciAoaSA9IDA7 > IGkgPCBudW07IGkrKykgeworCQlwdXRfZG9tYWluKGFkb21haW5fcHRyc1tpXSk7CisJCWFkb21h > aW5fcHRyc1tpXSA9IE5VTEw7CisJfQorfQorCitpbnQgc2V0X2Fkb21haW5fcHRycyhpbnQgbnVt > KQoreworCWludCBpOworCXN0cnVjdCBkb21haW4gKmQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgVklS > UV9CSVRNQVNLX1NJWkU7IGkrKykKKwkJdmlycV9vdmZfcGVuZGluZ1tpXSA9IDA7CisKKwlmb3Ig > KGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKKwkJZCA9IGZpbmRfZG9tYWluX2J5X2lkKGFjdGl2ZV9k > b21haW5zW2ldKTsKKwkJaWYgKCFkKSB7CisJCQlmcmVlX2Fkb21haW5fcHRycygpOworCQkJcmV0 > dXJuIC1FRkFVTFQ7CisJCX0KKwkJYWRvbWFpbl9wdHJzW2ldID0gZDsKKwkJYWRvbWFpbnMrKzsK > Kwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCBzZXRfYWN0aXZlKHN0cnVjdCBkb21haW4gKmQpCit7 > CisJaWYgKGlzX2FjdGl2ZShkKSkKKwkJcmV0dXJuIDA7CisJLyogaGFjayBpZiB3ZSBydW4gb3V0 > IG9mIHNwYWNlICovCisJaWYgKGFkb21haW5zID49IE1BWF9PUFJPRl9ET01BSU5TKSB7CisJCWFk > b21haW5zLS07CisJCXB1dF9kb21haW4oYWRvbWFpbl9wdHJzW2Fkb21haW5zXSk7CisJfQorCWFj > dGl2ZV9kb21haW5zW2Fkb21haW5zXSA9IGQtPmlkOworCWlmIChnZXRfZG9tYWluKGQpKQorCQlh > ZG9tYWluX3B0cnNbYWRvbWFpbnMrK10gPSBkOworCWVsc2UgeworCQlmcmVlX2Fkb21haW5fcHRy > cygpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCBpc19wYXNz > aXZlKHN0cnVjdCBkb21haW4gKmQpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IHBkb21h > aW5zOyBpKyspCisJCWlmIChkLT5pZCA9PSBwYXNzaXZlX2RvbWFpbnNbaV0pCisJCQlyZXR1cm4g > MTsKKwlyZXR1cm4gMDsKK30KKworaW50IGlzX3Byb2ZpbGVkKHN0cnVjdCBkb21haW4gKmQpCit7 > CisJaWYgKGlzX2FjdGl2ZShkKSB8fCBpc19wYXNzaXZlKGQpKQorCQlyZXR1cm4gMTsKKwlyZXR1 > cm4gMDsKK30KKwordm9pZCBwbWNfbG9nX2V2ZW50KHN0cnVjdCBkb21haW4gKmQsIHVuc2lnbmVk > IGludCBlaXAsIGludCBtb2RlLCBpbnQgZXZlbnQpIAoreworCXNoYXJlZF9pbmZvX3QgKnMgPSBO > VUxMOworCXN0cnVjdCBkb21haW4gKmRlc3QgPSBkOworCWludCBoZWFkID0gMDsKKworCWlmICgh > aXNfcHJvZmlsZWQoZCkpCisJCXJldHVybjsKKworCWlmIChpc19wYXNzaXZlKGQpKSB7CisJCWRl > c3QgPSBwcmltYXJ5X3Byb2ZpbGVyOworCQlnb3RvIGxvZ19wYXNzaXZlOworCX0KKwkJCitsb2df > YWN0aXZlOgorCXMgPSBkZXN0LT5zaGFyZWRfaW5mbzsKKworCWhlYWQgPSBzLT5ldmVudF9oZWFk > OworCWlmIChoZWFkID49IE1BWF9PUFJPRl9FVkVOVFMpCisJCWhlYWQgPSAwOworCisJaWYgKHMt > Pmxvc2luZ19zYW1wbGVzKQorCQlzLT5zYW1wbGVzX2xvc3QrKzsKKwlpZiAoaGVhZCA9PSBzLT5l > dmVudF90YWlsIC0gMSB8fCAoaGVhZCA9PSBNQVhfT1BST0ZfRVZFTlRTIC0gMSAmJiBzLT5ldmVu > dF90YWlsID09IDApKQorCQlzLT5sb3Npbmdfc2FtcGxlcyA9IDE7CisKKwlzLT5ldmVudF9sb2db > aGVhZF0uZWlwID0gZWlwOworCXMtPmV2ZW50X2xvZ1toZWFkXS5tb2RlID0gbW9kZTsKKwlzLT5l > dmVudF9sb2dbaGVhZF0uZXZlbnQgPSBldmVudDsKKwloZWFkKys7CisJcy0+ZXZlbnRfaGVhZCA9 > IGhlYWQ7CisJcmV0dXJuOworCitsb2dfcGFzc2l2ZToKKwkvKiBXZSB1c2UgdGhlIGZvbGxvd2lu > ZyBpbmVmZmljaWVudCBmb3JtYXQgZm9yIGxvZ2dpbmcgZXZlbnRzIGZyb20gb3RoZXIKKwkJZG9t > YWlucy4gV2UgcHV0IGEgc3BlY2lhbCByZWNvcmQgaW5kaWNhdGluZyB0aGF0IHRoZSBuZXh0IHJl > Y29yZCBpcworCQlmb3IgYW5vdGhlciBkb21haW4uIFRoaXMgaXMgZG9uZSBmb3IgZWFjaCBzYW1w > bGUgZnJvbSBhbm90aGVyCisJCWRvbWFpbiAqLyAKKwlzID0gZGVzdC0+c2hhcmVkX2luZm87CisK > KwloZWFkID0gcy0+ZXZlbnRfaGVhZDsKKwlpZiAoaGVhZCA+PSBNQVhfT1BST0ZfRVZFTlRTKQor > CQloZWFkID0gMDsKKworCWlmIChzLT5sb3Npbmdfc2FtcGxlcykKKwkJcy0+c2FtcGxlc19sb3N0 > Kys7CisJaWYgKGhlYWQgPT0gcy0+ZXZlbnRfdGFpbCAtIDEgfHwgKGhlYWQgPT0gTUFYX09QUk9G > X0VWRU5UUyAtIDEgJiYgcy0+ZXZlbnRfdGFpbCA9PSAwKSkKKwkJcy0+bG9zaW5nX3NhbXBsZXMg > PSAxOworCisJcy0+ZXZlbnRfbG9nW2hlYWRdLmVpcCA9IH4xVUw7CisJcy0+ZXZlbnRfbG9nW2hl > YWRdLm1vZGUgPSB+MDsKKwlzLT5ldmVudF9sb2dbaGVhZF0uZXZlbnQgPSBkLT5pZDsKKwloZWFk > Kys7CisJcy0+ZXZlbnRfaGVhZCA9IGhlYWQ7CisJZ290byBsb2dfYWN0aXZlOworfQorCitzdGF0 > aWMgdm9pZCBwbWNfZXZlbnRfaW5pdChzdHJ1Y3QgZG9tYWluICpkKQoreworCXNoYXJlZF9pbmZv > X3QgKnMgPSBkLT5zaGFyZWRfaW5mbzsKKwlzLT5ldmVudF9oZWFkID0gMDsKKwlzLT5ldmVudF90 > YWlsID0gMDsKKwlzLT5sb3Npbmdfc2FtcGxlcyA9IDA7CisJcy0+c2FtcGxlc19sb3N0ID0gMDsK > KwlzLT5ubWlfcmVzdGFydHMgPSAwOworCXMtPmFjdGl2ZV9zYW1wbGVzID0gMDsKKwlzLT5wYXNz > aXZlX3NhbXBsZXMgPSAwOworCXMtPm90aGVyX3NhbXBsZXMgPSAwOworfQorCitleHRlcm4gaW50 > IG5taV9pbml0KGludCAqbnVtX2V2ZW50cywgaW50ICppc19wcmltYXJ5KTsKK2V4dGVybiBpbnQg > bm1pX3Jlc2VydmVfY291bnRlcnModm9pZCk7CitleHRlcm4gaW50IG5taV9zZXR1cF9ldmVudHMo > dm9pZCk7CitleHRlcm4gaW50IG5taV9lbmFibGVfdmlycSh2b2lkKTsKK2V4dGVybiBpbnQgbm1p > X3N0YXJ0KHZvaWQpOworZXh0ZXJuIHZvaWQgbm1pX3N0b3Aodm9pZCk7CitleHRlcm4gdm9pZCBu > bWlfZGlzYWJsZV92aXJxKHZvaWQpOworZXh0ZXJuIHZvaWQgbm1pX3JlbGVhc2VfY291bnRlcnMo > dm9pZCk7CisKKyNkZWZpbmUgUFJJVl9PUChvcCkJKChvcCA9PSBQTUNfU0VUX0FDVElWRSkgfHwg > KG9wID09IFBNQ19TRVRfUEFTU0lWRSkgfHwgKG9wID09IFBNQ19SRVNFUlZFX0NPVU5URVJTKSBc > CisJCQl8fCAob3AgPT0gUE1DX1NFVFVQX0VWRU5UUykgfHwgKG9wID09IFBNQ19TVEFSVCkgfHwg > KG9wID09IFBNQ19TVE9QKSBcCisJCQl8fCAob3AgPT0gUE1DX1JFTEVBU0VfQ09VTlRFUlMpIHx8 > IChvcCA9PSBQTUNfU0hVVERPV04pKQorCitpbnQgZG9fcG1jX29wKGludCBvcCwgdW5zaWduZWQg > aW50IGFyZzEsIHVuc2lnbmVkIGludCBhcmcyKQoreworCWludCByZXQgPSAwOworCisJaWYgKFBS > SVZfT1Aob3ApICYmIGN1cnJlbnQgIT0gcHJpbWFyeV9wcm9maWxlcikKKwkJcmV0dXJuIC1FUEVS > TTsKKworCXN3aXRjaCAob3ApIHsKKwkJY2FzZSBQTUNfSU5JVDoKKwkJCXJldCA9IG5taV9pbml0 > KChpbnQgKilhcmcxLCAoaW50ICopYXJnMik7CisJCQlicmVhazsKKworCQljYXNlIFBNQ19TRVRf > QUNUSVZFOgorCQkJaWYgKGFkb21haW5zICE9IDApCisJCQkJcmV0dXJuIC1FUEVSTTsKKwkJCWlm > IChjb3B5X2Zyb21fdXNlcigodm9pZCAqKSZhY3RpdmVfZG9tYWlucywKKwkJCQkodm9pZCAqKWFy > ZzEsIGFyZzIqc2l6ZW9mKGludCkpKQorCQkJCXJldHVybiAtRUZBVUxUOworCQkJaWYgKHNldF9h > ZG9tYWluX3B0cnMoYXJnMikpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQlpZiAoc2V0X2FjdGl2 > ZShjdXJyZW50KSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCWJyZWFrOworCisJCWNhc2UgUE1D > X1NFVF9QQVNTSVZFOgorCQkJaWYgKHBkb21haW5zICE9IDApCisJCQkJcmV0dXJuIC1FUEVSTTsK > KwkJCWlmIChjb3B5X2Zyb21fdXNlcigodm9pZCAqKSZwYXNzaXZlX2RvbWFpbnMsCisJCQkJKHZv > aWQgKilhcmcxLCBhcmcyKnNpemVvZihpbnQpKSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCXBk > b21haW5zID0gYXJnMjsKKwkJCWJyZWFrOworCisJCWNhc2UgUE1DX1JFU0VSVkVfQ09VTlRFUlM6 > CisJCQlyZXQgPSBubWlfcmVzZXJ2ZV9jb3VudGVycygpOworCQkJYnJlYWs7CisKKwkJY2FzZSBQ > TUNfU0VUVVBfRVZFTlRTOgorCQkJaWYgKGNvcHlfZnJvbV91c2VyKCh2b2lkICopJmNvdW50ZXJf > Y29uZmlnLCAKKwkJCQkodm9pZCAqKWFyZzEsIGFyZzIqc2l6ZW9mKHN0cnVjdCBvcF9jb3VudGVy > X2NvbmZpZykpKQorCQkJCXJldHVybiAtRUZBVUxUOworCQkJcmV0ID0gbm1pX3NldHVwX2V2ZW50 > cygpOworCQkJYnJlYWs7CisKKwkJY2FzZSBQTUNfRU5BQkxFX1ZJUlE6CisJCQlpZiAoIWlzX2Fj > dGl2ZShjdXJyZW50KSkgeworCQkJCWlmIChjdXJyZW50ICE9IHByaW1hcnlfcHJvZmlsZXIpCisJ > CQkJCXJldHVybiAtRVBFUk07CisJCQkJZWxzZQorCQkJCQlzZXRfYWN0aXZlKGN1cnJlbnQpOwor > CQkJfQorCQkJcmV0ID0gbm1pX2VuYWJsZV92aXJxKCk7CisJCQlwbWNfZXZlbnRfaW5pdChjdXJy > ZW50KTsKKwkJCWFjdGl2YXRlZCsrOworCQkJYnJlYWs7CisKKwkJY2FzZSBQTUNfU1RBUlQ6CisJ > CQlpZiAoYWN0aXZhdGVkIDwgYWRvbWFpbnMpCisJCQkJcmV0dXJuIC1FUEVSTTsKKwkJCXJldCA9 > IG5taV9zdGFydCgpOworCQkJYnJlYWs7CisKKwkJY2FzZSBQTUNfU1RPUDoKKwkJCW5taV9zdG9w > KCk7CisJCQlicmVhazsKKworCQljYXNlIFBNQ19ESVNBQkxFX1ZJUlE6CisJCQlpZiAoIWlzX2Fj > dGl2ZShjdXJyZW50KSkKKwkJCQlyZXR1cm4gLUVQRVJNOworCQkJbm1pX2Rpc2FibGVfdmlycSgp > OworCQkJYWN0aXZhdGVkLS07CisJCQlicmVhazsKKworCQljYXNlIFBNQ19SRUxFQVNFX0NPVU5U > RVJTOgorCQkJbm1pX3JlbGVhc2VfY291bnRlcnMoKTsKKwkJCWJyZWFrOworCisJCWNhc2UgUE1D > X1NIVVRET1dOOgorCQkJZnJlZV9hZG9tYWluX3B0cnMoKTsKKwkJCXBkb21haW5zID0gMDsKKwkJ > CWFjdGl2YXRlZCA9IDA7CisJCQlwcmltYXJ5X3Byb2ZpbGVyID0gTlVMTDsKKwkJCWJyZWFrOwor > CisJCWRlZmF1bHQ6CisJCQlyZXQgPSAtRUlOVkFMOworCX0KKwlyZXR1cm4gcmV0OworfQpkaWZm > IC1QTmF1ciB4ZW4tMi4wLjUveGVuL2FyY2gveDg2L3RyYXBzLmMgeGVuLTIuMC41LXByb2YveGVu > L2FyY2gveDg2L3RyYXBzLmMKLS0tIHhlbi0yLjAuNS94ZW4vYXJjaC94ODYvdHJhcHMuYwkyMDA1 > LTAzLTEwIDExOjUyOjE1LjAwMDAwMDAwMCAtMDgwMAorKysgeGVuLTIuMC41LXByb2YveGVuL2Fy > Y2gveDg2L3RyYXBzLmMJMjAwNS0wNC0wNiAxMDoyOTowNC4wMDAwMDAwMDAgLTA3MDAKQEAgLTIs > NiArMiwxMCBAQAogICogYXJjaC9pMzg2L3RyYXBzLmMKICAqIAogICogTW9kaWZpY2F0aW9ucyB0 > byBMaW51eCBvcmlnaW5hbCBhcmUgY29weXJpZ2h0IChjKSAyMDAyLTIwMDQsIEsgQSBGcmFzZXIK > KyAqCisgKiBNb2RpZmllZCBieSBBcmF2aW5kIE1lbm9uIGZvciBzdXBwb3J0aW5nIG9wcm9maWxl > CisgKiBUaGVzZSBtb2RpZmljYXRpb25zIGFyZToKKyAqIENvcHlyaWdodCAoQykgMjAwNSBIZXds > ZXR0LVBhY2thcmQgQ28uCiAgKiAKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5 > b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVy > bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAt > NTEsNiArNTUsNyBAQAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2kz > ODcuaD4KICNpbmNsdWRlIDxhc20vZGVidWdnZXIuaD4KKyNpbmNsdWRlIDxhc20vbm1pLmg+CiAK > IC8qCiAgKiBvcHRfbm1pOiBvbmUgb2YgJ2lnbm9yZScsICdkb20wJywgb3IgJ2ZhdGFsJy4KQEAg > LTU5OCw3ICs2MDMsNyBAQAogICAgIHByaW50aygiRG8geW91IGhhdmUgYSBzdHJhbmdlIHBvd2Vy > IHNhdmluZyBtb2RlIGVuYWJsZWQ/XG4iKTsKIH0KIAotYXNtbGlua2FnZSB2b2lkIGRvX25taShz > dHJ1Y3QgeGVuX3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgcmVhc29uKQorc3RhdGljIHZvaWQg > ZGVmYXVsdF9kb19ubWkoc3RydWN0IHhlbl9yZWdzICogcmVncywgdW5zaWduZWQgbG9uZyByZWFz > b24pCiB7CiAgICAgKytubWlfY291bnQoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIApAQCAtNjEwLDYg > KzYxNSwzNSBAQAogICAgICAgICB1bmtub3duX25taV9lcnJvcigodW5zaWduZWQgY2hhcikocmVh > c29uJjB4ZmYpKTsKIH0KIAorc3RhdGljIGludCBkdW1teV9ubWlfY2FsbGJhY2soc3RydWN0IHhl > bl9yZWdzICogcmVncywgaW50IGNwdSkKK3sKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRp > YyBubWlfY2FsbGJhY2tfdCBubWlfY2FsbGJhY2sgPSBkdW1teV9ubWlfY2FsbGJhY2s7CisKK2Fz > bWxpbmthZ2Ugdm9pZCBkb19ubWkoc3RydWN0IHhlbl9yZWdzICogcmVncywgdW5zaWduZWQgbG9u > ZyByZWFzb24pCit7CisJaW50IGNwdTsKKyAgICAgICAgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgp > OworCisgICAgICAgIGlmICghbm1pX2NhbGxiYWNrKHJlZ3MsIGNwdSkpIAorICAgICAgICAgICAg > ICAgIGRlZmF1bHRfZG9fbm1pKHJlZ3MsIHJlYXNvbik7Cit9CisKK3ZvaWQgc2V0X25taV9jYWxs > YmFjayhubWlfY2FsbGJhY2tfdCBjYWxsYmFjaykKK3sKKyAgICAgICAgbm1pX2NhbGxiYWNrID0g > Y2FsbGJhY2s7Cit9CisKK3ZvaWQgdW5zZXRfbm1pX2NhbGxiYWNrKHZvaWQpCit7CisgICAgICAg > IG5taV9jYWxsYmFjayA9IGR1bW15X25taV9jYWxsYmFjazsKK30KKworRVhQT1JUX1NZTUJPTChz > ZXRfbm1pX2NhbGxiYWNrKTsKK0VYUE9SVF9TWU1CT0wodW5zZXRfbm1pX2NhbGxiYWNrKTsKKwog > dW5zaWduZWQgbG9uZyBubWlfc29mdGlycV9yZWFzb247CiBzdGF0aWMgdm9pZCBubWlfc29mdGly > cSh2b2lkKQogewpkaWZmIC1QTmF1ciB4ZW4tMi4wLjUveGVuL2FyY2gveDg2L3g4Nl8zMi9lbnRy > eS5TIHhlbi0yLjAuNS1wcm9mL3hlbi9hcmNoL3g4Ni94ODZfMzIvZW50cnkuUwotLS0geGVuLTIu > MC41L3hlbi9hcmNoL3g4Ni94ODZfMzIvZW50cnkuUwkyMDA1LTAzLTEwIDExOjUyOjE2LjAwMDAw > MDAwMCAtMDgwMAorKysgeGVuLTIuMC41LXByb2YveGVuL2FyY2gveDg2L3g4Nl8zMi9lbnRyeS5T > CTIwMDUtMDQtMDYgMTA6MjM6NDYuMDAwMDAwMDAwIC0wNzAwCkBAIC0zLDYgKzMsMTAgQEAKICAq > CiAgKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNCwgSyBBIEZyYXNlcgogICogQ29weXJpZ2h0IChj > KSAxOTkxLCAxOTkyIExpbnVzIFRvcnZhbGRzCisgKgorICogTW9kaWZpZWQgYnkgQXJhdmluZCBN > ZW5vbiBmb3Igc3VwcG9ydGluZyBvcHJvZmlsZQorICogVGhlc2UgbW9kaWZpY2F0aW9ucyBhcmU6 > CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgSGV3bGV0dC1QYWNrYXJkIENvLgogICogCiAgKiBDYWxs > aW5nIGJhY2sgdG8gYSBndWVzdCBPUzoKICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PQpA > QCAtNDk4LDEwICs1MDIsMTAgQEAKICAgICAgICAgam56ICAgZG9fd2F0Y2hkb2dfdGljawogICAg > ICAgICBtb3ZsICAlZHMsJWVheAogICAgICAgICBjbXB3ICAkKF9fSFlQRVJWSVNPUl9EUyksJWF4 > Ci0gICAgICAgIGpuZSAgIGRlZmVyX25taQorICAgICAgICBqbmUgICBmb3JjZV9ubWkKICAgICAg > ICAgbW92bCAgJWVzLCVlYXgKICAgICAgICAgY21wdyAgJChfX0hZUEVSVklTT1JfRFMpLCVheAot > ICAgICAgICBqbmUgICBkZWZlcl9ubWkKKyAgICAgICAgam5lICAgZm9yY2Vfbm1pCiAKIGRvX3dh > dGNoZG9nX3RpY2s6CiAgICAgICAgIG1vdmwgICQoX19IWVBFUlZJU09SX0RTKSwlZWR4CkBAIC01 > MTIsMTIgKzUxNiw0NCBAQAogCXB1c2hsICVlZHggICAjIHJlZ3MKICAgICAgICAgY2FsbCAgU1lN > Qk9MX05BTUUoZG9fbm1pKQogCWFkZGwgICQ4LCVlc3AKKworCS8qIHhlbm9wcm9mOiBXZSBuZWVk > IHRvIGNoZWNrIGlmIHZpcnR1YWwgaW50ZXJydXB0IG11c3QgYmUgZ2VuZXJhdGVkICovCisJam1w > IHJldF9mcm9tX2ludHIKKworCS8qCiAgICAgICAgIG1vdmwgIFhSRUdTX2VmbGFncyglZXNwKSwl > ZWF4CiAgICAgICAgIG1vdmIgIFhSRUdTX2NzKCVlc3ApLCVhbAogICAgICAgICB0ZXN0bCAkKDN8 > WDg2X0VGTEFHU19WTSksJWVheAogCWp6ICAgIHJlc3RvcmVfYWxsX3hlbgogICAgICAgICBHRVRf > Q1VSUkVOVCglZWJ4KQogICAgICAgICBqbXAgICByZXN0b3JlX2FsbF9ndWVzdAorCSovCisKK2Zv > cmNlX25taToKKwltb3ZsICVkcywtNCglZXNwKQorCW1vdmwgJWVzLC04KCVlc3ApCisJbW92bCAl > ZnMsLTEyKCVlc3ApCisJbW92bCAlZ3MsLTE2KCVlc3ApCisJc3VibCAkMTYsJWVzcAorCisJbW92 > bCAkKF9fSFlQRVJWSVNPUl9EUyksJWVkeAorCW1vdmwgJWVkeCwlZHMKKwltb3ZsICVlZHgsJWVz > CisJCisJbW92bCAlZXNwLCVlZHgKKwlhZGRsICQxNiwlZWR4CisJcHVzaGwgJWVieAorCXB1c2hs > ICVlZHgKKwljYWxsIFNZTUJPTF9OQU1FKGRvX25taSkKKwlhZGRsICQ4LCVlc3AKKworCWFkZGwg > JDE2LCVlc3AKKwltb3ZsIC00KCVlc3ApLCVkcworCW1vdmwgLTgoJWVzcCksJWVzCisJbW92bCAt > MTIoJWVzcCksJWZzCisJbW92bCAtMTYoJWVzcCksJWdzCisKKwlqbXAgcmVzdG9yZV9hbGxfeGVu > CiAKIGRlZmVyX25taToKICAgICAgICAgbW92bCAgJEZJWE1BUF9hcGljX2Jhc2UsJWVheApAQCAt > Njc0LDYgKzcxMCw3IEBACiAgICAgICAgIC5sb25nIFNZTUJPTF9OQU1FKGRvX3ZtX2Fzc2lzdCkK > ICAgICAgICAgLmxvbmcgU1lNQk9MX05BTUUoZG9fdXBkYXRlX3ZhX21hcHBpbmdfb3RoZXJkb21h > aW4pCiAgICAgICAgIC5sb25nIFNZTUJPTF9OQU1FKGRvX3N3aXRjaF92bTg2KQorICAgICAgICAu > bG9uZyBTWU1CT0xfTkFNRShkb19wbWNfb3ApCiAgICAgICAgIC5yZXB0IE5SX2h5cGVyY2FsbHMt > KCguLWh5cGVyY2FsbF90YWJsZSkvNCkKICAgICAgICAgLmxvbmcgU1lNQk9MX05BTUUoZG9fbmlf > aHlwZXJjYWxsKQogICAgICAgICAuZW5kcgpkaWZmIC1QTmF1ciB4ZW4tMi4wLjUveGVuL2luY2x1 > ZGUvYXNtLXg4Ni9hcGljLmggeGVuLTIuMC41LXByb2YveGVuL2luY2x1ZGUvYXNtLXg4Ni9hcGlj > LmgKLS0tIHhlbi0yLjAuNS94ZW4vaW5jbHVkZS9hc20teDg2L2FwaWMuaAkyMDA1LTAzLTEwIDEx > OjUyOjEyLjAwMDAwMDAwMCAtMDgwMAorKysgeGVuLTIuMC41LXByb2YveGVuL2luY2x1ZGUvYXNt > LXg4Ni9hcGljLmgJMjAwNS0wNC0wNiAwOToyNzoxMy4wMDAwMDAwMDAgLTA3MDAKQEAgLTc3LDYg > Kzc3LDggQEAKIGV4dGVybiB2b2lkIHNtcF9sb2NhbF90aW1lcl9pbnRlcnJ1cHQgKHN0cnVjdCB4 > ZW5fcmVncyAqIHJlZ3MpOwogZXh0ZXJuIHZvaWQgc2V0dXBfQVBJQ19jbG9ja3MgKHZvaWQpOwog > ZXh0ZXJuIHZvaWQgc2V0dXBfYXBpY19ubWlfd2F0Y2hkb2cgKHZvaWQpOworZXh0ZXJuIGludCBy > ZXNlcnZlX2xhcGljX25taSh2b2lkKTsKK2V4dGVybiB2b2lkIHJlbGVhc2VfbGFwaWNfbm1pKHZv > aWQpOwogZXh0ZXJuIHZvaWQgbm1pX3dhdGNoZG9nX3RpY2sgKHN0cnVjdCB4ZW5fcmVncyAqIHJl > Z3MpOwogZXh0ZXJuIHZvaWQgdG91Y2hfbm1pX3dhdGNoZG9nKHZvaWQpOwogZXh0ZXJuIGludCBB > UElDX2luaXRfdW5pcHJvY2Vzc29yICh2b2lkKTsKZGlmZiAtUE5hdXIgeGVuLTIuMC41L3hlbi9p > bmNsdWRlL2FzbS14ODYvbXNyLmggeGVuLTIuMC41LXByb2YveGVuL2luY2x1ZGUvYXNtLXg4Ni9t > c3IuaAotLS0geGVuLTIuMC41L3hlbi9pbmNsdWRlL2FzbS14ODYvbXNyLmgJMjAwNS0wMy0xMCAx > MTo1MjoxNS4wMDAwMDAwMDAgLTA4MDAKKysrIHhlbi0yLjAuNS1wcm9mL3hlbi9pbmNsdWRlL2Fz > bS14ODYvbXNyLmgJMjAwNS0wNC0wNiAwOToyNzoxMy4wMDAwMDAwMDAgLTA3MDAKQEAgLTgsMzgg > KzgsMzggQEAKICAqLwogCiAjZGVmaW5lIHJkbXNyKG1zcix2YWwxLHZhbDIpIFwKLSAgICAgX19h > c21fXyBfX3ZvbGF0aWxlX18oInJkbXNyIiBcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oInJkbXNy > IiBcCiAJCQkgIDogIj1hIiAodmFsMSksICI9ZCIgKHZhbDIpIFwKIAkJCSAgOiAiYyIgKG1zcikp > CiAKLSNkZWZpbmUgcmRtc3JsKG1zcix2YWwpIGRvIHsgdW5zaWduZWQgbG9uZyBhX18sYl9fOyBc > Ci0gICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oInJkbXNyIiBcCi0JCQkgICAgOiAiPWEiIChh > X18pLCAiPWQiIChiX18pIFwKLQkJCSAgICA6ICJjIiAobXNyKSk7IFwKLSAgICAgICB2YWwgPSBh > X18gfCAoYl9fPDwzMik7IFwKLX0gd2hpbGUoMCk7IAotCiAjZGVmaW5lIHdybXNyKG1zcix2YWwx > LHZhbDIpIFwKLSAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oIndybXNyIiBcCisJX19hc21fXyBf > X3ZvbGF0aWxlX18oIndybXNyIiBcCiAJCQkgIDogLyogbm8gb3V0cHV0cyAqLyBcCiAJCQkgIDog > ImMiIChtc3IpLCAiYSIgKHZhbDEpLCAiZCIgKHZhbDIpKQogCisjZGVmaW5lIHJkbXNybChtc3Is > dmFsKSBkbyB7IFwKKwl1bnNpZ25lZCBsb25nIGxfXyxoX187IFwKKwlyZG1zciAobXNyLCBsX18s > IGhfXyk7ICBcCisJdmFsID0gbF9fOyAgXAorCXZhbCB8PSAoKHU2NCloX188PDMyKTsgIFwKK30g > d2hpbGUoMCkKKworc3RhdGljIGlubGluZSB2b2lkIHdybXNybCAodW5zaWduZWQgbG9uZyBtc3Is > IHVuc2lnbmVkIGxvbmcgbG9uZyB2YWwpCit7CisJdW5zaWduZWQgbG9uZyBsbywgaGk7CisJbG8g > PSAodW5zaWduZWQgbG9uZykgdmFsOworCWhpID0gdmFsID4+IDMyOworCXdybXNyIChtc3IsIGxv > LCBoaSk7Cit9CisKICNkZWZpbmUgcmR0c2MobG93LGhpZ2gpIFwKICAgICAgX19hc21fXyBfX3Zv > bGF0aWxlX18oInJkdHNjIiA6ICI9YSIgKGxvdyksICI9ZCIgKGhpZ2gpKQogCiAjZGVmaW5lIHJk > dHNjbChsb3cpIFwKICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oInJkdHNjIiA6ICI9YSIgKGxv > dykgOiA6ICJlZHgiKQogCi0jaWYgZGVmaW5lZChfX2kzODZfXykKICNkZWZpbmUgcmR0c2NsbCh2 > YWwpIFwKICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oInJkdHNjIiA6ICI9QSIgKHZhbCkpCi0j > ZWxpZiBkZWZpbmVkKF9feDg2XzY0X18pCi0jZGVmaW5lIHJkdHNjbGwodmFsKSBkbyB7IFwKLSAg > ICAgdW5zaWduZWQgaW50IGEsZDsgXAotICAgICBhc20gdm9sYXRpbGUoInJkdHNjIiA6ICI9YSIg > KGEpLCAiPWQiIChkKSk7IFwKLSAgICAgKHZhbCkgPSAoKHVuc2lnbmVkIGxvbmcpYSkgfCAoKCh1 > bnNpZ25lZCBsb25nKWQpPDwzMik7IFwKLX0gd2hpbGUoMCkKLSNlbmRpZgogCiAjZGVmaW5lIHdy > aXRlX3RzYyh2YWwxLHZhbDIpIHdybXNyKDB4MTAsIHZhbDEsIHZhbDIpCiAKQEAgLTU1LDY2ICs1 > NSw2IEBACiAjZGVmaW5lIE1TUl9JQTMyX1BMQVRGT1JNX0lECQkweDE3CiAjZGVmaW5lIE1TUl9J > QTMyX0VCTF9DUl9QT1dFUk9OCQkweDJhCiAKLS8qIEFNRC9LOCBzcGVjaWZpYyBNU1JzICovIAot > I2RlZmluZSBNU1JfRUZFUiAweGMwMDAwMDgwCQkvKiBleHRlbmRlZCBmZWF0dXJlIHJlZ2lzdGVy > ICovCi0jZGVmaW5lIE1TUl9TVEFSIDB4YzAwMDAwODEJCS8qIGxlZ2FjeSBtb2RlIFNZU0NBTEwg > dGFyZ2V0ICovCi0jZGVmaW5lIE1TUl9MU1RBUiAweGMwMDAwMDgyIAkJLyogbG9uZyBtb2RlIFNZ > U0NBTEwgdGFyZ2V0ICovCi0jZGVmaW5lIE1TUl9DU1RBUiAweGMwMDAwMDgzCQkvKiBjb21wYXRp > YmlsaXR5IG1vZGUgU1lTQ0FMTCB0YXJnZXQgKi8KLSNkZWZpbmUgTVNSX1NZU0NBTExfTUFTSyAw > eGMwMDAwMDg0CS8qIEVGTEFHUyBtYXNrIGZvciBzeXNjYWxsICovCi0jZGVmaW5lIE1TUl9GU19C > QVNFIDB4YzAwMDAxMDAJCS8qIDY0Yml0IEdTIGJhc2UgKi8KLSNkZWZpbmUgTVNSX0dTX0JBU0Ug > MHhjMDAwMDEwMQkJLyogNjRiaXQgRlMgYmFzZSAqLwotI2RlZmluZSBNU1JfS0VSTkVMX0dTX0JB > U0UgIDB4YzAwMDAxMDIJLyogU3dhcEdTIEdTIHNoYWRvdyAob3IgVVNFUl9HUyBmcm9tIGtlcm5l > bCkgKi8gCi0vKiBFRkVSIGJpdHM6ICovIAotI2RlZmluZSBfRUZFUl9TQ0UgMCAgLyogU1lTQ0FM > TC9TWVNSRVQgKi8KLSNkZWZpbmUgX0VGRVJfTE1FIDggIC8qIExvbmcgbW9kZSBlbmFibGUgKi8K > LSNkZWZpbmUgX0VGRVJfTE1BIDEwIC8qIExvbmcgbW9kZSBhY3RpdmUgKHJlYWQtb25seSkgKi8K > LSNkZWZpbmUgX0VGRVJfTlggMTEgIC8qIE5vIGV4ZWN1dGUgZW5hYmxlICovCi0KLSNkZWZpbmUg > RUZFUl9TQ0UgKDE8PF9FRkVSX1NDRSkKLSNkZWZpbmUgRUZFUl9MTUUgKDE8PF9FRkVSX0xNRSkK > LSNkZWZpbmUgRUZFUl9MTUEgKDE8PF9FRkVSX0xNQSkKLSNkZWZpbmUgRUZFUl9OWCAoMTw8X0VG > RVJfTlgpCi0KLS8qIEludGVsIE1TUnMuIFNvbWUgYWxzbyBhdmFpbGFibGUgb24gb3RoZXIgQ1BV > cyAqLwotI2RlZmluZSBNU1JfSUEzMl9QTEFURk9STV9JRAkweDE3Ci0KLSNkZWZpbmUgTVNSX0lB > MzJfUEVSRkNUUjAgICAgICAweGMxCi0jZGVmaW5lIE1TUl9JQTMyX1BFUkZDVFIxICAgICAgMHhj > MgotCi0jZGVmaW5lIE1TUl9NVFJSY2FwCQkweDBmZQotI2RlZmluZSBNU1JfSUEzMl9CQkxfQ1Jf > Q1RMICAgICAgICAweDExOQotCi0jZGVmaW5lIE1TUl9JQTMyX01DR19DQVAgICAgICAgMHgxNzkK > LSNkZWZpbmUgTVNSX0lBMzJfTUNHX1NUQVRVUyAgICAgICAgMHgxN2EKLSNkZWZpbmUgTVNSX0lB > MzJfTUNHX0NUTCAgICAgICAweDE3YgotCi0jZGVmaW5lIE1TUl9JQTMyX0VWTlRTRUwwICAgICAg > MHgxODYKLSNkZWZpbmUgTVNSX0lBMzJfRVZOVFNFTDEgICAgICAweDE4NwotCi0jZGVmaW5lIE1T > Ul9JQTMyX0RFQlVHQ1RMTVNSICAgICAgIDB4MWQ5Ci0jZGVmaW5lIE1TUl9JQTMyX0xBU1RCUkFO > Q0hGUk9NSVAgIDB4MWRiCi0jZGVmaW5lIE1TUl9JQTMyX0xBU1RCUkFOQ0hUT0lQICAgICAgICAw > eDFkYwotI2RlZmluZSBNU1JfSUEzMl9MQVNUSU5URlJPTUlQICAgICAweDFkZAotI2RlZmluZSBN > U1JfSUEzMl9MQVNUSU5UVE9JUCAgICAgICAweDFkZQotCi0jZGVmaW5lIE1TUl9NVFJSZml4NjRL > XzAwMDAwCTB4MjUwCi0jZGVmaW5lIE1TUl9NVFJSZml4MTZLXzgwMDAwCTB4MjU4Ci0jZGVmaW5l > IE1TUl9NVFJSZml4MTZLX0EwMDAwCTB4MjU5Ci0jZGVmaW5lIE1TUl9NVFJSZml4NEtfQzAwMDAJ > MHgyNjgKLSNkZWZpbmUgTVNSX01UUlJmaXg0S19DODAwMAkweDI2OQotI2RlZmluZSBNU1JfTVRS > UmZpeDRLX0QwMDAwCTB4MjZhCi0jZGVmaW5lIE1TUl9NVFJSZml4NEtfRDgwMDAJMHgyNmIKLSNk > ZWZpbmUgTVNSX01UUlJmaXg0S19FMDAwMAkweDI2YwotI2RlZmluZSBNU1JfTVRSUmZpeDRLX0U4 > MDAwCTB4MjZkCi0jZGVmaW5lIE1TUl9NVFJSZml4NEtfRjAwMDAJMHgyNmUKLSNkZWZpbmUgTVNS > X01UUlJmaXg0S19GODAwMAkweDI2ZgotI2RlZmluZSBNU1JfTVRSUmRlZlR5cGUJCTB4MmZmCi0K > LSNkZWZpbmUgTVNSX0lBMzJfTUMwX0NUTCAgICAgICAweDQwMAotI2RlZmluZSBNU1JfSUEzMl9N > QzBfU1RBVFVTICAgICAgICAweDQwMQotI2RlZmluZSBNU1JfSUEzMl9NQzBfQUREUiAgICAgIDB4 > NDAyCi0jZGVmaW5lIE1TUl9JQTMyX01DMF9NSVNDICAgICAgMHg0MDMKLQogI2RlZmluZSBNU1Jf > SUEzMl9BUElDQkFTRQkJMHgxYgogI2RlZmluZSBNU1JfSUEzMl9BUElDQkFTRV9CU1AJCSgxPDw4 > KQogI2RlZmluZSBNU1JfSUEzMl9BUElDQkFTRV9FTkFCTEUJKDE8PDExKQpAQCAtMTIzLDEyICs2 > MywzOCBAQAogI2RlZmluZSBNU1JfSUEzMl9VQ09ERV9XUklURQkJMHg3OQogI2RlZmluZSBNU1Jf > SUEzMl9VQ09ERV9SRVYJCTB4OGIKIAorI2RlZmluZSBNU1JfUDZfUEVSRkNUUjAJCTB4YzEKKyNk > ZWZpbmUgTVNSX1A2X1BFUkZDVFIxCQkweGMyCisKICNkZWZpbmUgTVNSX0lBMzJfQkJMX0NSX0NU > TAkJMHgxMTkKIAorI2RlZmluZSBNU1JfSUEzMl9TWVNFTlRFUl9DUwkJMHgxNzQKKyNkZWZpbmUg > TVNSX0lBMzJfU1lTRU5URVJfRVNQCQkweDE3NQorI2RlZmluZSBNU1JfSUEzMl9TWVNFTlRFUl9F > SVAJCTB4MTc2CisKICNkZWZpbmUgTVNSX0lBMzJfTUNHX0NBUAkJMHgxNzkKICNkZWZpbmUgTVNS > X0lBMzJfTUNHX1NUQVRVUwkJMHgxN2EKICNkZWZpbmUgTVNSX0lBMzJfTUNHX0NUTAkJMHgxN2IK > IAorLyogUDQvWGVvbisgc3BlY2lmaWMgKi8KKyNkZWZpbmUgTVNSX0lBMzJfTUNHX0VBWAkJMHgx > ODAKKyNkZWZpbmUgTVNSX0lBMzJfTUNHX0VCWAkJMHgxODEKKyNkZWZpbmUgTVNSX0lBMzJfTUNH > X0VDWAkJMHgxODIKKyNkZWZpbmUgTVNSX0lBMzJfTUNHX0VEWAkJMHgxODMKKyNkZWZpbmUgTVNS > X0lBMzJfTUNHX0VTSQkJMHgxODQKKyNkZWZpbmUgTVNSX0lBMzJfTUNHX0VESQkJMHgxODUKKyNk > ZWZpbmUgTVNSX0lBMzJfTUNHX0VCUAkJMHgxODYKKyNkZWZpbmUgTVNSX0lBMzJfTUNHX0VTUAkJ > MHgxODcKKyNkZWZpbmUgTVNSX0lBMzJfTUNHX0VGTEFHUwkJMHgxODgKKyNkZWZpbmUgTVNSX0lB > MzJfTUNHX0VJUAkJMHgxODkKKyNkZWZpbmUgTVNSX0lBMzJfTUNHX1JFU0VSVkVECQkweDE4QQor > CisjZGVmaW5lIE1TUl9QNl9FVk5UU0VMMAkJCTB4MTg2CisjZGVmaW5lIE1TUl9QNl9FVk5UU0VM > MQkJCTB4MTg3CisKKyNkZWZpbmUgTVNSX0lBMzJfUEVSRl9TVEFUVVMJCTB4MTk4CisjZGVmaW5l > IE1TUl9JQTMyX1BFUkZfQ1RMCQkweDE5OQorCiAjZGVmaW5lIE1TUl9JQTMyX1RIRVJNX0NPTlRS > T0wJCTB4MTlhCiAjZGVmaW5lIE1TUl9JQTMyX1RIRVJNX0lOVEVSUlVQVAkweDE5YgogI2RlZmlu > ZSBNU1JfSUEzMl9USEVSTV9TVEFUVVMJCTB4MTljCkBAIC0xNDUsMjkgKzExMSw5MSBAQAogI2Rl > ZmluZSBNU1JfSUEzMl9NQzBfQUREUgkJMHg0MDIKICNkZWZpbmUgTVNSX0lBMzJfTUMwX01JU0MJ > CTB4NDAzCiAKLSNkZWZpbmUgTVNSX1A2X1BFUkZDVFIwCQkJMHhjMQotI2RlZmluZSBNU1JfUDZf > UEVSRkNUUjEJCQkweGMyCi0jZGVmaW5lIE1TUl9QNl9FVk5UU0VMMAkJCTB4MTg2Ci0jZGVmaW5l > IE1TUl9QNl9FVk5UU0VMMQkJCTB4MTg3CisvKiBQZW50aXVtIElWIHBlcmZvcm1hbmNlIGNvdW50 > ZXIgTVNScyAqLworI2RlZmluZSBNU1JfUDRfQlBVX1BFUkZDVFIwIAkJMHgzMDAKKyNkZWZpbmUg > TVNSX1A0X0JQVV9QRVJGQ1RSMSAJCTB4MzAxCisjZGVmaW5lIE1TUl9QNF9CUFVfUEVSRkNUUjIg > CQkweDMwMgorI2RlZmluZSBNU1JfUDRfQlBVX1BFUkZDVFIzIAkJMHgzMDMKKyNkZWZpbmUgTVNS > X1A0X01TX1BFUkZDVFIwIAkJMHgzMDQKKyNkZWZpbmUgTVNSX1A0X01TX1BFUkZDVFIxIAkJMHgz > MDUKKyNkZWZpbmUgTVNSX1A0X01TX1BFUkZDVFIyIAkJMHgzMDYKKyNkZWZpbmUgTVNSX1A0X01T > X1BFUkZDVFIzIAkJMHgzMDcKKyNkZWZpbmUgTVNSX1A0X0ZMQU1FX1BFUkZDVFIwIAkJMHgzMDgK > KyNkZWZpbmUgTVNSX1A0X0ZMQU1FX1BFUkZDVFIxIAkJMHgzMDkKKyNkZWZpbmUgTVNSX1A0X0ZM > QU1FX1BFUkZDVFIyIAkJMHgzMGEKKyNkZWZpbmUgTVNSX1A0X0ZMQU1FX1BFUkZDVFIzIAkJMHgz > MGIKKyNkZWZpbmUgTVNSX1A0X0lRX1BFUkZDVFIwIAkJMHgzMGMKKyNkZWZpbmUgTVNSX1A0X0lR > X1BFUkZDVFIxIAkJMHgzMGQKKyNkZWZpbmUgTVNSX1A0X0lRX1BFUkZDVFIyIAkJMHgzMGUKKyNk > ZWZpbmUgTVNSX1A0X0lRX1BFUkZDVFIzIAkJMHgzMGYKKyNkZWZpbmUgTVNSX1A0X0lRX1BFUkZD > VFI0IAkJMHgzMTAKKyNkZWZpbmUgTVNSX1A0X0lRX1BFUkZDVFI1IAkJMHgzMTEKKyNkZWZpbmUg > TVNSX1A0X0JQVV9DQ0NSMCAJCTB4MzYwCisjZGVmaW5lIE1TUl9QNF9CUFVfQ0NDUjEgCQkweDM2 > MQorI2RlZmluZSBNU1JfUDRfQlBVX0NDQ1IyIAkJMHgzNjIKKyNkZWZpbmUgTVNSX1A0X0JQVV9D > Q0NSMyAJCTB4MzYzCisjZGVmaW5lIE1TUl9QNF9NU19DQ0NSMCAJCTB4MzY0CisjZGVmaW5lIE1T > Ul9QNF9NU19DQ0NSMSAJCTB4MzY1CisjZGVmaW5lIE1TUl9QNF9NU19DQ0NSMiAJCTB4MzY2Cisj > ZGVmaW5lIE1TUl9QNF9NU19DQ0NSMyAJCTB4MzY3CisjZGVmaW5lIE1TUl9QNF9GTEFNRV9DQ0NS > MCAJCTB4MzY4CisjZGVmaW5lIE1TUl9QNF9GTEFNRV9DQ0NSMSAJCTB4MzY5CisjZGVmaW5lIE1T > Ul9QNF9GTEFNRV9DQ0NSMiAJCTB4MzZhCisjZGVmaW5lIE1TUl9QNF9GTEFNRV9DQ0NSMyAJCTB4 > MzZiCisjZGVmaW5lIE1TUl9QNF9JUV9DQ0NSMCAJCTB4MzZjCisjZGVmaW5lIE1TUl9QNF9JUV9D > Q0NSMSAJCTB4MzZkCisjZGVmaW5lIE1TUl9QNF9JUV9DQ0NSMiAJCTB4MzZlCisjZGVmaW5lIE1T > Ul9QNF9JUV9DQ0NSMyAJCTB4MzZmCisjZGVmaW5lIE1TUl9QNF9JUV9DQ0NSNCAJCTB4MzcwCisj > ZGVmaW5lIE1TUl9QNF9JUV9DQ0NSNSAJCTB4MzcxCisjZGVmaW5lIE1TUl9QNF9BTEZfRVNDUjAg > CQkweDNjYQorI2RlZmluZSBNU1JfUDRfQUxGX0VTQ1IxIAkJMHgzY2IKKyNkZWZpbmUgTVNSX1A0 > X0JQVV9FU0NSMCAJCTB4M2IyCisjZGVmaW5lIE1TUl9QNF9CUFVfRVNDUjEgCQkweDNiMworI2Rl > ZmluZSBNU1JfUDRfQlNVX0VTQ1IwIAkJMHgzYTAKKyNkZWZpbmUgTVNSX1A0X0JTVV9FU0NSMSAJ > CTB4M2ExCisjZGVmaW5lIE1TUl9QNF9DUlVfRVNDUjAgCQkweDNiOAorI2RlZmluZSBNU1JfUDRf > Q1JVX0VTQ1IxIAkJMHgzYjkKKyNkZWZpbmUgTVNSX1A0X0NSVV9FU0NSMiAJCTB4M2NjCisjZGVm > aW5lIE1TUl9QNF9DUlVfRVNDUjMgCQkweDNjZAorI2RlZmluZSBNU1JfUDRfQ1JVX0VTQ1I0IAkJ > MHgzZTAKKyNkZWZpbmUgTVNSX1A0X0NSVV9FU0NSNSAJCTB4M2UxCisjZGVmaW5lIE1TUl9QNF9E > QUNfRVNDUjAgCQkweDNhOAorI2RlZmluZSBNU1JfUDRfREFDX0VTQ1IxIAkJMHgzYTkKKyNkZWZp > bmUgTVNSX1A0X0ZJUk1fRVNDUjAgCQkweDNhNAorI2RlZmluZSBNU1JfUDRfRklSTV9FU0NSMSAJ > CTB4M2E1CisjZGVmaW5lIE1TUl9QNF9GTEFNRV9FU0NSMCAJCTB4M2E2CisjZGVmaW5lIE1TUl9Q > NF9GTEFNRV9FU0NSMSAJCTB4M2E3CisjZGVmaW5lIE1TUl9QNF9GU0JfRVNDUjAgCQkweDNhMgor > I2RlZmluZSBNU1JfUDRfRlNCX0VTQ1IxIAkJMHgzYTMKKyNkZWZpbmUgTVNSX1A0X0lRX0VTQ1Iw > IAkJMHgzYmEKKyNkZWZpbmUgTVNSX1A0X0lRX0VTQ1IxIAkJMHgzYmIKKyNkZWZpbmUgTVNSX1A0 > X0lTX0VTQ1IwIAkJMHgzYjQKKyNkZWZpbmUgTVNSX1A0X0lTX0VTQ1IxIAkJMHgzYjUKKyNkZWZp > bmUgTVNSX1A0X0lUTEJfRVNDUjAgCQkweDNiNgorI2RlZmluZSBNU1JfUDRfSVRMQl9FU0NSMSAJ > CTB4M2I3CisjZGVmaW5lIE1TUl9QNF9JWF9FU0NSMCAJCTB4M2M4CisjZGVmaW5lIE1TUl9QNF9J > WF9FU0NSMSAJCTB4M2M5CisjZGVmaW5lIE1TUl9QNF9NT0JfRVNDUjAgCQkweDNhYQorI2RlZmlu > ZSBNU1JfUDRfTU9CX0VTQ1IxIAkJMHgzYWIKKyNkZWZpbmUgTVNSX1A0X01TX0VTQ1IwIAkJMHgz > YzAKKyNkZWZpbmUgTVNSX1A0X01TX0VTQ1IxIAkJMHgzYzEKKyNkZWZpbmUgTVNSX1A0X1BNSF9F > U0NSMCAJCTB4M2FjCisjZGVmaW5lIE1TUl9QNF9QTUhfRVNDUjEgCQkweDNhZAorI2RlZmluZSBN > U1JfUDRfUkFUX0VTQ1IwIAkJMHgzYmMKKyNkZWZpbmUgTVNSX1A0X1JBVF9FU0NSMSAJCTB4M2Jk > CisjZGVmaW5lIE1TUl9QNF9TQUFUX0VTQ1IwIAkJMHgzYWUKKyNkZWZpbmUgTVNSX1A0X1NBQVRf > RVNDUjEgCQkweDNhZgorI2RlZmluZSBNU1JfUDRfU1NVX0VTQ1IwIAkJMHgzYmUKKyNkZWZpbmUg > TVNSX1A0X1NTVV9FU0NSMSAJCTB4M2JmICAgIC8qIGd1ZXNzOiBub3QgZGVmaW5lZCBpbiBtYW51 > YWwgKi8KKyNkZWZpbmUgTVNSX1A0X1RCUFVfRVNDUjAgCQkweDNjMgorI2RlZmluZSBNU1JfUDRf > VEJQVV9FU0NSMSAJCTB4M2MzCisjZGVmaW5lIE1TUl9QNF9UQ19FU0NSMCAJCTB4M2M0CisjZGVm > aW5lIE1TUl9QNF9UQ19FU0NSMSAJCTB4M2M1CisjZGVmaW5lIE1TUl9QNF9VMkxfRVNDUjAgCQkw > eDNiMAorI2RlZmluZSBNU1JfUDRfVTJMX0VTQ1IxIAkJMHgzYjEKIAotLyogSzcvSzggTVNScy4g > Tm90IGNvbXBsZXRlLiBTZWUgdGhlIGFyY2hpdGVjdHVyZSBtYW51YWwgZm9yIGEgbW9yZSBjb21w > bGV0ZSBsaXN0LiAqLwotI2RlZmluZSBNU1JfSzdfRVZOVFNFTDAgICAgICAgICAgICAweEMwMDEw > MDAwCi0jZGVmaW5lIE1TUl9LN19QRVJGQ1RSMCAgICAgICAgICAgIDB4QzAwMTAwMDQKLSNkZWZp > bmUgTVNSX0s3X0VWTlRTRUwxICAgICAgICAgICAgMHhDMDAxMDAwMQotI2RlZmluZSBNU1JfSzdf > UEVSRkNUUjEgICAgICAgICAgICAweEMwMDEwMDA1Ci0jZGVmaW5lIE1TUl9LN19FVk5UU0VMMiAg > ICAgICAgICAgIDB4QzAwMTAwMDIKLSNkZWZpbmUgTVNSX0s3X1BFUkZDVFIyICAgICAgICAgICAg > MHhDMDAxMDAwNgotI2RlZmluZSBNU1JfSzdfRVZOVFNFTDMgICAgICAgICAgICAweEMwMDEwMDAz > Ci0jZGVmaW5lIE1TUl9LN19QRVJGQ1RSMyAgICAgICAgICAgIDB4QzAwMTAwMDcKLSNkZWZpbmUg > TVNSX0s4X1RPUF9NRU0xCQkgICAweEMwMDEwMDFBCi0jZGVmaW5lIE1TUl9LOF9UT1BfTUVNMgkJ > ICAgMHhDMDAxMDAxRAotI2RlZmluZSBNU1JfSzhfU1lTQ0ZHCQkgICAweEMwMDAwMDEwCQotI2Rl > ZmluZSBNU1JfSzdfSFdDUgkJCTB4QzAwMTAwMTUKLSNkZWZpbmUgTVNSX0s3X0NMS19DVEwJCQkw > eEMwMDEwMDFiCi0jZGVmaW5lIE1TUl9LN19GSURfVklEX0NUTAkJMHhDMDAxMDA0MQotI2RlZmlu > ZSBNU1JfSzdfVklEX1NUQVRVUwkJMHhDMDAxMDA0MgotCi0vKiBLNiBNU1JzICovCisvKiBBTUQg > RGVmaW5lZCBNU1JzICovCiAjZGVmaW5lIE1TUl9LNl9FRkVSCQkJMHhDMDAwMDA4MAogI2RlZmlu > ZSBNU1JfSzZfU1RBUgkJCTB4QzAwMDAwODEKICNkZWZpbmUgTVNSX0s2X1dIQ1IJCQkweEMwMDAw > MDgyCkBAIC0xNzYsNiArMjA0LDI4IEBACiAjZGVmaW5lIE1TUl9LNl9QU09SCQkJMHhDMDAwMDA4 > NwogI2RlZmluZSBNU1JfSzZfUEZJUgkJCTB4QzAwMDAwODgKIAorI2RlZmluZSBNU1JfSzdfRVZO > VFNFTDAJCQkweEMwMDEwMDAwCisjZGVmaW5lIE1TUl9LN19FVk5UU0VMMQkJCTB4QzAwMTAwMDEK > KyNkZWZpbmUgTVNSX0s3X0VWTlRTRUwyCQkJMHhDMDAxMDAwMgorI2RlZmluZSBNU1JfSzdfRVZO > VFNFTDMJCQkweEMwMDEwMDAzCisjZGVmaW5lIE1TUl9LN19QRVJGQ1RSMAkJCTB4QzAwMTAwMDQK > KyNkZWZpbmUgTVNSX0s3X1BFUkZDVFIxCQkJMHhDMDAxMDAwNQorI2RlZmluZSBNU1JfSzdfUEVS > RkNUUjIJCQkweEMwMDEwMDA2CisjZGVmaW5lIE1TUl9LN19QRVJGQ1RSMwkJCTB4QzAwMTAwMDcK > KyNkZWZpbmUgTVNSX0s3X0hXQ1IJCQkweEMwMDEwMDE1CisjZGVmaW5lIE1TUl9LN19DTEtfQ1RM > CQkJMHhDMDAxMDAxYgorI2RlZmluZSBNU1JfSzdfRklEX1ZJRF9DVEwJCTB4QzAwMTAwNDEKKyNk > ZWZpbmUgTVNSX0s3X0ZJRF9WSURfU1RBVFVTCQkweEMwMDEwMDQyCisKKy8qIGV4dGVuZGVkIGZl > YXR1cmUgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTVNSX0VGRVIgCQkJMHhjMDAwMDA4MAorCisvKiBF > RkVSIGJpdHM6ICovCisKKy8qIEV4ZWN1dGUgRGlzYWJsZSBlbmFibGUgKi8KKyNkZWZpbmUgX0VG > RVJfTlgJCQkxMQorI2RlZmluZSBFRkVSX05YCQkJCSgxPDxfRUZFUl9OWCkKKwogLyogQ2VudGF1 > ci1IYXVscy9JRFQgZGVmaW5lZCBNU1JzLiAqLwogI2RlZmluZSBNU1JfSURUX0ZDUjEJCQkweDEw > NwogI2RlZmluZSBNU1JfSURUX0ZDUjIJCQkweDEwOApAQCAtMTk1LDYgKzI0NSw3IEBACiAvKiBW > SUEgQ3lyaXggZGVmaW5lZCBNU1JzKi8KICNkZWZpbmUgTVNSX1ZJQV9GQ1IJCQkweDExMDcKICNk > ZWZpbmUgTVNSX1ZJQV9MT05HSEFVTAkJMHgxMTBhCisjZGVmaW5lIE1TUl9WSUFfUk5HCQkJMHgx > MTBiCiAjZGVmaW5lIE1TUl9WSUFfQkNSMgkJCTB4MTE0NwogCiAvKiBUcmFuc21ldGEgZGVmaW5l > ZCBNU1JzICovCmRpZmYgLVBOYXVyIHhlbi0yLjAuNS94ZW4vaW5jbHVkZS9hc20teDg2L25taS5o > IHhlbi0yLjAuNS1wcm9mL3hlbi9pbmNsdWRlL2FzbS14ODYvbm1pLmgKLS0tIHhlbi0yLjAuNS94 > ZW4vaW5jbHVkZS9hc20teDg2L25taS5oCTE5NjktMTItMzEgMTY6MDA6MDAuMDAwMDAwMDAwIC0w > ODAwCisrKyB4ZW4tMi4wLjUtcHJvZi94ZW4vaW5jbHVkZS9hc20teDg2L25taS5oCTIwMDUtMDQt > MDYgMDk6Mjc6MTMuMDAwMDAwMDAwIC0wNzAwCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiAgbGlu > dXgvaW5jbHVkZS9hc20taTM4Ni9ubWkuaAorICovCisjaWZuZGVmIEFTTV9OTUlfSAorI2RlZmlu > ZSBBU01fTk1JX0gKKworc3RydWN0IHhlbl9yZWdzOworIAordHlwZWRlZiBpbnQgKCpubWlfY2Fs > bGJhY2tfdCkoc3RydWN0IHhlbl9yZWdzICogcmVncywgaW50IGNwdSk7CisgCisvKiogCisgKiBz > ZXRfbm1pX2NhbGxiYWNrCisgKgorICogU2V0IGEgaGFuZGxlciBmb3IgYW4gTk1JLiBPbmx5IG9u > ZSBoYW5kbGVyIG1heSBiZQorICogc2V0LiBSZXR1cm4gMSBpZiB0aGUgTk1JIHdhcyBoYW5kbGVk > LgorICovCit2b2lkIHNldF9ubWlfY2FsbGJhY2sobm1pX2NhbGxiYWNrX3QgY2FsbGJhY2spOwor > IAorLyoqIAorICogdW5zZXRfbm1pX2NhbGxiYWNrCisgKgorICogUmVtb3ZlIHRoZSBoYW5kbGVy > IHByZXZpb3VzbHkgc2V0LgorICovCit2b2lkIHVuc2V0X25taV9jYWxsYmFjayh2b2lkKTsKKyAK > KyNlbmRpZiAvKiBBU01fTk1JX0ggKi8KZGlmZiAtUE5hdXIgeGVuLTIuMC41L3hlbi9pbmNsdWRl > L3B1YmxpYy94ZW4uaCB4ZW4tMi4wLjUtcHJvZi94ZW4vaW5jbHVkZS9wdWJsaWMveGVuLmgKLS0t > IHhlbi0yLjAuNS94ZW4vaW5jbHVkZS9wdWJsaWMveGVuLmgJMjAwNS0wMy0xMCAxMTo1MjoxMy4w > MDAwMDAwMDAgLTA4MDAKKysrIHhlbi0yLjAuNS1wcm9mL3hlbi9pbmNsdWRlL3B1YmxpYy94ZW4u > aAkyMDA1LTA0LTA2IDA5OjI3OjEzLjAwMDAwMDAwMCAtMDcwMApAQCAtNCw2ICs0LDEwIEBACiAg > KiBHdWVzdCBPUyBpbnRlcmZhY2UgdG8gWGVuLgogICogCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDQs > IEsgQSBGcmFzZXIKKyAqCisgKiBNb2RpZmllZCBieSBBcmF2aW5kIE1lbm9uIGZvciBzdXBwb3J0 > aW5nIG9wcm9maWxlCisgKiBUaGVzZSBtb2RpZmljYXRpb25zIGFyZToKKyAqIENvcHlyaWdodCAo > QykgMjAwNSBIZXdsZXR0LVBhY2thcmQgQ28uCiAgKi8KIAogI2lmbmRlZiBfX1hFTl9QVUJMSUNf > WEVOX0hfXwpAQCAtNDgsNiArNTIsNyBAQAogI2RlZmluZSBfX0hZUEVSVklTT1Jfdm1fYXNzaXN0 > ICAgICAgICAgICAgMjEKICNkZWZpbmUgX19IWVBFUlZJU09SX3VwZGF0ZV92YV9tYXBwaW5nX290 > aGVyZG9tYWluIDIyCiAjZGVmaW5lIF9fSFlQRVJWSVNPUl9zd2l0Y2hfdm04NiAgICAgICAgICAy > MworI2RlZmluZSBfX0hZUEVSVklTT1JfcG1jX29wICAgICAgICAgICAgICAgMjQKIAogLyoKICAq > IE1VTFRJQ0FMTFMKQEAgLTcxLDcgKzc2LDggQEAKICNkZWZpbmUgVklSUV9ET01fRVhDICAgIDQg > IC8qIChET00wKSBFeGNlcHRpb25hbCBldmVudCBmb3Igc29tZSBkb21haW4uICAgKi8KICNkZWZp > bmUgVklSUV9QQVJJVFlfRVJSIDUgIC8qIChET00wKSBOTUkgcGFyaXR5IGVycm9yLiAgICAgICAg > ICAgICAgICAgICAgKi8KICNkZWZpbmUgVklSUV9JT19FUlIgICAgIDYgIC8qIChET00wKSBOTUkg > SS9PIGVycm9yLiAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgTlJfVklSUVMgICAg > ICAgIDcKKyNkZWZpbmUgVklSUV9QTUNfT1ZGCTcgIC8qIFBNQyBPdmVyZmxvdyAqLworI2RlZmlu > ZSBOUl9WSVJRUyAgICAgICAgOAogCiAvKgogICogTU1VLVVQREFURSBSRVFVRVNUUwpAQCAtMTk4 > LDYgKzIwNCwyMSBAQAogI2RlZmluZSBWTUFTU1RfVFlQRV93cml0YWJsZV9wYWdldGFibGVzICAy > CiAjZGVmaW5lIE1BWF9WTUFTU1RfVFlQRSAyCiAKKy8qCisgKiBDb21tYW5kcyB0byBIWVBFUlZJ > U09SX3BtY19vcCgpLgorICovCisjZGVmaW5lIFBNQ19JTklUCQkwCisjZGVmaW5lIFBNQ19TRVRf > QUNUSVZFCQkxCisjZGVmaW5lIFBNQ19TRVRfUEFTU0lWRQkJMgorI2RlZmluZSBQTUNfUkVTRVJW > RV9DT1VOVEVSUwkzCisjZGVmaW5lIFBNQ19TRVRVUF9FVkVOVFMJNAorI2RlZmluZSBQTUNfRU5B > QkxFX1ZJUlEJCTUKKyNkZWZpbmUgUE1DX1NUQVJUCQk2CisjZGVmaW5lIFBNQ19TVE9QCQk3Cisj > ZGVmaW5lIFBNQ19ESVNBQkxFX1ZJUlEJOAorI2RlZmluZSBQTUNfUkVMRUFTRV9DT1VOVEVSUwk5 > CisjZGVmaW5lIFBNQ19TSFVURE9XTgkJMTAKKwogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAogdHlw > ZWRlZiB1MTYgZG9taWRfdDsKQEAgLTI1Myw2ICsyNzQsOCBAQAogLyogTm8gc3VwcG9ydCBmb3Ig > bXVsdGktcHJvY2Vzc29yIGd1ZXN0cy4gKi8KICNkZWZpbmUgTUFYX1ZJUlRfQ1BVUyAxCiAKKyNk > ZWZpbmUgTUFYX09QUk9GX0VWRU5UUwkzMgorI2RlZmluZSBNQVhfT1BST0ZfRE9NQUlOUwkyNQkK > IC8qCiAgKiBYZW4vZ3Vlc3RvcyBzaGFyZWQgZGF0YSAtLSBwb2ludGVyIHByb3ZpZGVkIGluIHN0 > YXJ0X2luZm8uCiAgKiBOQi4gV2UgZXhwZWN0IHRoYXQgdGhpcyBzdHJ1Y3QgaXMgc21hbGxlciB0 > aGFuIGEgcGFnZS4KQEAgLTM2MCw2ICszODMsMjAgQEAKIAogICAgIGFyY2hfc2hhcmVkX2luZm9f > dCBhcmNoOwogCisgICAgLyogT3Byb2ZpbGUgc3RydWN0dXJlcyAqLworICAgIHU4IGV2ZW50X2hl > YWQ7CisgICAgdTggZXZlbnRfdGFpbDsKKyAgICBzdHJ1Y3QgeworCXUzMiBlaXA7CisJdTggbW9k > ZTsKKwl1OCBldmVudDsKKyAgICB9IFBBQ0tFRCBldmVudF9sb2dbTUFYX09QUk9GX0VWRU5UU107 > CisgICAgdTggbG9zaW5nX3NhbXBsZXM7CisgICAgdTY0IHNhbXBsZXNfbG9zdDsKKyAgICB1MzIg > bm1pX3Jlc3RhcnRzOworICAgIHU2NCBhY3RpdmVfc2FtcGxlczsKKyAgICB1NjQgcGFzc2l2ZV9z > YW1wbGVzOworICAgIHU2NCBvdGhlcl9zYW1wbGVzOwogfSBQQUNLRUQgc2hhcmVkX2luZm9fdDsK > IAogLyoKZGlmZiAtUE5hdXIgeGVuLTIuMC41L3hlbi9pbmNsdWRlL3hlbi9zbXAuaCB4ZW4tMi4w > LjUtcHJvZi94ZW4vaW5jbHVkZS94ZW4vc21wLmgKLS0tIHhlbi0yLjAuNS94ZW4vaW5jbHVkZS94 > ZW4vc21wLmgJMjAwNS0wMy0xMCAxMTo1MjoxNi4wMDAwMDAwMDAgLTA4MDAKKysrIHhlbi0yLjAu > NS1wcm9mL3hlbi9pbmNsdWRlL3hlbi9zbXAuaAkyMDA1LTA0LTA2IDA5OjI3OjEzLjAwMDAwMDAw > MCAtMDcwMApAQCAtNDcsNiArNDcsMTggQEAKIAkJCSAgICAgIGludCByZXRyeSwgaW50IHdhaXQp > OwogCiAvKgorICogQ2FsbCBhIGZ1bmN0aW9uIG9uIGFsbCBwcm9jZXNzb3JzCisgKi8KK3N0YXRp > YyBpbmxpbmUgaW50IG9uX2VhY2hfY3B1KHZvaWQgKCpmdW5jKSAodm9pZCAqaW5mbyksIHZvaWQg > KmluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmV0cnksIGludCB3YWl0 > KQoreworICAgICAgICBpbnQgcmV0ID0gMDsKKyAgICAgICAgcmV0ID0gc21wX2NhbGxfZnVuY3Rp > b24oZnVuYywgaW5mbywgcmV0cnksIHdhaXQpOworICAgICAgICBmdW5jKGluZm8pOworICAgICAg > ICByZXR1cm4gcmV0OworfQorCisvKgogICogVHJ1ZSBvbmNlIHRoZSBwZXIgcHJvY2VzcyBpZGxl > IGlzIGZvcmtlZAogICovCiBleHRlcm4gaW50IHNtcF90aHJlYWRzX3JlYWR5OwpAQCAtODUsNiAr > OTcsNyBAQAogI2RlZmluZSBjcHVfbG9naWNhbF9tYXAoY3B1KQkJCTAKICNkZWZpbmUgY3B1X251 > bWJlcl9tYXAoY3B1KQkJCTAKICNkZWZpbmUgc21wX2NhbGxfZnVuY3Rpb24oZnVuYyxpbmZvLHJl > dHJ5LHdhaXQpCSh7IDA7IH0pCisjZGVmaW5lIG9uX2VhY2hfY3B1KGZ1bmMsaW5mbyxyZXRyeSx3 > YWl0KSAgICAgICAoeyBmdW5jKGluZm8pOyAwOyB9KQogI2RlZmluZSBjcHVfb25saW5lX21hcAkJ > CQkxCiAKICNlbmRpZgo> > ------_=_NextPart_001_01C53CB2.59CE8456 > Content-Type: text/plain; charset="us-ascii" > MIME-Version: 1.0 > Content-Transfer-Encoding: 7bit > Content-Disposition: inline > > _______________________________________________ > Xen-devel mailing list > Xen-devel@lists.xensource.com > http://lists.xensource.com/xen-devel > > ------_=_NextPart_001_01C53CB2.59CE8456-- > > >_______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel