From mboxrd@z Thu Jan 1 00:00:00 1970 From: Bhupinder Thakur Subject: [PATCH 02/25 v6] xen/arm: vpl011: Add SBSA UART emulation in Xen Date: Mon, 17 Jul 2017 18:36:32 +0530 Message-ID: <1500296815-10243-3-git-send-email-bhupinder.thakur@linaro.org> References: <1500296815-10243-1-git-send-email-bhupinder.thakur@linaro.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dX5k0-00047g-RO for xen-devel@lists.xenproject.org; Mon, 17 Jul 2017 13:07:13 +0000 Received: by mail-pf0-f181.google.com with SMTP id e199so15180796pfh.2 for ; Mon, 17 Jul 2017 06:07:10 -0700 (PDT) In-Reply-To: <1500296815-10243-1-git-send-email-bhupinder.thakur@linaro.org> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org Cc: Andre Przywara , Julien Grall , Stefano Stabellini List-Id: xen-devel@lists.xenproject.org QWRkIGVtdWxhdGlvbiBjb2RlIHRvIGVtdWxhdGUgcmVhZC93cml0ZSBhY2Nlc3MgdG8gcGwwMTEg cmVnaXN0ZXJzCmFuZCBwbDAxMSBpbnRlcnJ1cHRzOgoKICAgIC0gRW11bGF0ZSBEUiByZWFkL3dy aXRlIGJ5IHJlYWRpbmcgYW5kIHdyaXRpbmcgZnJvbS90byB0aGUgSU4KICAgICAgYW5kIE9VVCBy aW5nIGJ1ZmZlcnMgYW5kIHJhaXNpbmcgYW4gZXZlbnQgdG8gdGhlIGJhY2tlbmQgd2hlbgogICAg ICB0aGVyZSBpcyBkYXRhIGluIHRoZSBPVVQgcmluZyBidWZmZXIgYW5kIGluamVjdGluZyBhbiBp bnRlcnJ1cHQKICAgICAgdG8gdGhlIGd1ZXN0IHdoZW4gdGhlcmUgaXMgZGF0YSBpbiB0aGUgSU4g cmluZyBidWZmZXIKCiAgICAtIE90aGVyIHJlZ2lzdGVycyBhcmUgcmVsYXRlZCB0byBpbnRlcnJ1 cHQgbWFuYWdlbWVudCBhbmQKICAgICAgZXNzZW50aWFsbHkgY29udHJvbCB3aGVuIGludGVycnVw dHMgYXJlIGRlbGl2ZXJlZCB0byB0aGUgZ3Vlc3QKClRoaXMgcGF0Y2ggaW1wbGVtZW50cyB0aGUg U0JTQSBHZW5lcmljIFVBUlQgd2hpY2ggaXMgYSBzdWJzZXQgb2YgQVJNClBMMDExIFVBUlQuCgpU aGUgU0JTQSBHZW5lcmljIFVBUlQgaXMgY292ZXJlZCBpbiBBcHBlbmRpeCBCIG9mCmh0dHBzOi8v c3RhdGljLmRvY3MuYXJtLmNvbS9kZW4wMDI5L2EvU2VydmVyX0Jhc2VfU3lzdGVtX0FyY2hpdGVj dHVyZV92M18xX0FSTV9ERU5fMDAyOUEucGRmCgpTaWduZWQtb2ZmLWJ5OiBCaHVwaW5kZXIgVGhh a3VyIDxiaHVwaW5kZXIudGhha3VyQGxpbmFyby5vcmc+Ci0tLQpDQzogU3RlZmFubyBTdGFiZWxs aW5pIDxzc3RhYmVsbGluaUBrZXJuZWwub3JnPgpDQzogSnVsaWVuIEdyYWxsIDxqdWxpZW4uZ3Jh bGxAYXJtLmNvbT4KQ0M6IEFuZHJlIFByenl3YXJhIDxhbmRyZS5wcnp5d2FyYUBhcm0uY29tPgoK Q2hhbmdlcyBzaW5jZSB2NToKLSB1c2UgPGFzbS8+IGluc3RlYWQgb2YgPGFzbS1hcm0vPiBmb3Ig aW5jbHVkaW5nIGFybSBzcGVjaWZpYyBoZWFkZXIgZmlsZXMuCi0gcmVuYW1lZCBzaGFkb3dfdWFy dHJpcyB0byBzaGFkb3dfdWFydG1pcyB0byBpbmRpY2F0ZSB0aGF0IGl0IGlzIG1hc2tlZCBpbnRl cnJ1cHQgc3RhdHVzLgotIHVzZSBzbXBfbWIoKSBpbnN0ZWFkIG9mIHNtcF9ybWIoKSBpbiB2cGww MTFfd3JpdGVfZGF0YSgpLgoKQ2hhbmdlcyBzaW5jZSB2NDoKLSBSZW5hbWVkIHZwbDAxMV91cGRh dGUoKSB0byB2cGwwMTFfdXBkYXRlX2ludGVycnVwdF9zdGF0dXMoKSBhbmQgYWRkZWQgbG9naWMg dG8gYXZvaWQKICByYWlzaW5nIHNwdXJpb3VzIGludGVycnVwdHMuCi0gVXNlZCBiYXJyaWVyIGlu c3RydWN0aW9ucyBjb3JyZWN0bHkgd2hpbGUgcmVhZGluZy93cml0aW5nIGRhdGEgdG8gdGhlIHJp bmcgYnVmZmVyLgotIFByb3BlciBsb2NrIHRha2VuIGJlZm9yZSByZWFkaW5nIHJpbmcgYnVmZmVy IGluZGljZXMuCgpDaGFuZ2VzIHNpbmNlIHYzOgotIE1vdmVkIHRoZSBjYWxsIHRvIERFRklORV9Y RU5fRkxFWF9SSU5HIGZyb20gdnBsMDExLmggdG8gcHVibGljL2NvbnNvbGUuaC4gVGhpcyBtYWNy byBkZWZpbmVzCiAgc3RhbmRhcmQgZnVuY3Rpb25zIHRvIG9wZXJhdGUgb24gdGhlIHJpbmcgYnVm ZmVyLgotIExvY2sgdGFrZW4gd2hpbGUgdXBkYXRpbmcgdGhlIGludGVycnVwdCBtYXNrIGFuZCBj bGVhciByZWdpc3RlcnMgaW4gbW1pb193cml0ZS4KLSBVc2UgZ2ZuX3QgaW5zdGVhZCBvZiB4ZW5f cGZuX3QuCi0gdmdpY19mcmVlX3ZpcnEgY2FsbGVkIGlmIHRoZXJlIGlzIGFueSBlcnJvciBpbiB2 cGwwMTEgaW5pdGlhbGl6YXRpb24uCi0gbW1pbyBoYW5kbGVycyBmcmVlZCBpZiB0aGVyZSBpcyBh bnkgZXJyb3IgaW4gdnBsMDExIGluaXRpYWxpemF0aW9uLgotIFJlbW92ZWQgdnBsMDExLT5pbml0 aWFsaXplZCBmbGFnIHVzYWdlIGFzIHRoZSBzYW1lIGNoZWNrIGNvdWxkIGJlIGRvbmUgCiAgdXNp bmcgdnBsMDExLT5yaW5nLXJlZi4KLSBVc2VkIHJldHVybiBpbnN0ZWFkIG9mIGJyZWFrIGluIHRo ZSBzd2l0Y2ggaGFuZGxpbmcgb2YgZW11bGF0aW9uIG9mIGRpZmZlcmVudCBwbDAxMSByZWdpc3Rl cnMuCi0gUmVuYW1lZCB2cGwwMTFfdXBkYXRlX3NwaSgpIHRvIHZwbDAxMV91cGRhdGUoKS4KCkNo YW5nZXMgc2luY2UgdjI6Ci0gVXNlIGdlbmVyaWMgdnJlZ19yZWcqIGZvciByZWFkL3dyaXRlIG9m IHJlZ2lzdGVycyBlbXVsYXRpbmcgcGwwMTEuCi0gVXNlIGdlbmVyaWMgcmluZyBidWZmZXIgZnVu Y3Rpb25zIGRlZmluZWQgdXNpbmcgREVGSU5FX1hFTl9GTEVYX1JJTkcuCi0gUmVuYW1lZCB0aGUg U1BJIGluamVjdGlvbiBmdW5jdGlvbiB0byB2cGwwMTFfdXBkYXRlX3NwaSgpIHRvIHJlZmxlY3Qg bGV2ZWwgCiAgdHJpZ2dlcmVkIG5hdHVyZSBvZiBwbDAxMSBpbnRlcnJ1cHRzLgotIFRoZSBwbDAx MSByZWdpc3RlciBhY2Nlc3MgYWRkcmVzcyBzaG91bGQgYWx3YXlzIGJlIHRoZSBiYXNlIGFkZHJl c3Mgb2YgdGhlCiAgY29ycmVzcG9uZGluZyByZWdpc3RlciBhcyBwZXIgc2VjdGlvbiBCIG9mIHRo ZSBTQlNBIGRvY3VtZW50LiBGb3IgdGhpcyByZWFzb24sCiAgdGhlIHJlZ2lzdGVyIHJhbmdlIGFk ZHJlc3MgYWNjZXNzIGlzIG5vdCBhbGxvd2VkLgoKQ2hhbmdlcyBzaW5jZSB2MToKLSBSZW1vdmVk IHRoZSBvcHRpbWl6dGlvbiByZWxhdGVkIHRvIHNlbmRpaW5nIGV2ZW50cyB0byB4ZW5jb25zb2xl IAotIFVzZSBsb2NhbCB2YXJpYWJsZXMgYXMgcmluZyBidWZmZXIgaW5kaWNlcyB3aGlsZSB1c2lu ZyB0aGUgcmluZyBidWZmZXIKCiB4ZW4vYXJjaC9hcm0vS2NvbmZpZyAgICAgICAgICAgICB8ICAg NyArCiB4ZW4vYXJjaC9hcm0vTWFrZWZpbGUgICAgICAgICAgICB8ICAgMSArCiB4ZW4vYXJjaC9h cm0vdnBsMDExLmMgICAgICAgICAgICB8IDQ1NSArKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysKIHhlbi9pbmNsdWRlL2FzbS1hcm0vZG9tYWluLmggICAgIHwgICA2ICsKIHhl bi9pbmNsdWRlL2FzbS1hcm0vcGwwMTEtdWFydC5oIHwgICAyICsKIHhlbi9pbmNsdWRlL2FzbS1h cm0vdnBsMDExLmggICAgIHwgIDcyICsrKysrKysKIHhlbi9pbmNsdWRlL3B1YmxpYy9hcmNoLWFy bS5oICAgIHwgICA2ICsKIDcgZmlsZXMgY2hhbmdlZCwgNTQ5IGluc2VydGlvbnMoKykKIGNyZWF0 ZSBtb2RlIDEwMDY0NCB4ZW4vYXJjaC9hcm0vdnBsMDExLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCB4 ZW4vaW5jbHVkZS9hc20tYXJtL3ZwbDAxMS5oCgpkaWZmIC0tZ2l0IGEveGVuL2FyY2gvYXJtL0tj b25maWcgYi94ZW4vYXJjaC9hcm0vS2NvbmZpZwppbmRleCBkNDZiOThjLi5mNTgwMTlkIDEwMDY0 NAotLS0gYS94ZW4vYXJjaC9hcm0vS2NvbmZpZworKysgYi94ZW4vYXJjaC9hcm0vS2NvbmZpZwpA QCAtNTAsNiArNTAsMTMgQEAgY29uZmlnIEhBU19JVFMKICAgICAgICAgcHJvbXB0ICJHSUN2MyBJ VFMgTVNJIGNvbnRyb2xsZXIgc3VwcG9ydCIgaWYgRVhQRVJUID0gInkiCiAgICAgICAgIGRlcGVu ZHMgb24gSEFTX0dJQ1YzCiAKK2NvbmZpZyBTQlNBX1ZVQVJUX0NPTlNPTEUKKwlib29sICJFbXVs YXRlZCBTQlNBIFVBUlQgY29uc29sZSBzdXBwb3J0IgorCWRlZmF1bHQgeQorCS0tLWhlbHAtLS0K KwkgIEFsbG93cyBhIGd1ZXN0IHRvIHVzZSBTQlNBIEdlbmVyaWMgVUFSVCBhcyBhIGNvbnNvbGUu IFRoZQorCSAgU0JTQSBHZW5lcmljIFVBUlQgaW1wbGVtZW50cyBhIHN1YnNldCBvZiBBUk0gUEww MTEgVUFSVC4KKwogZW5kbWVudQogCiBtZW51ICJBUk0gZXJyYXRhIHdvcmthcm91bmQgdmlhIHRo ZSBhbHRlcm5hdGl2ZSBmcmFtZXdvcmsiCmRpZmYgLS1naXQgYS94ZW4vYXJjaC9hcm0vTWFrZWZp bGUgYi94ZW4vYXJjaC9hcm0vTWFrZWZpbGUKaW5kZXggNDllMWZiMi4uZDljNmViZiAxMDA2NDQK LS0tIGEveGVuL2FyY2gvYXJtL01ha2VmaWxlCisrKyBiL3hlbi9hcmNoL2FybS9NYWtlZmlsZQpA QCAtNTAsNiArNTAsNyBAQCBvYmotJChDT05GSUdfSEFTX0dJQ1YzKSArPSB2Z2ljLXYzLm8KIG9i ai0kKENPTkZJR19IQVNfSVRTKSArPSB2Z2ljLXYzLWl0cy5vCiBvYmoteSArPSB2bV9ldmVudC5v CiBvYmoteSArPSB2dGltZXIubworb2JqLSQoQ09ORklHX1NCU0FfVlVBUlRfQ09OU09MRSkgKz0g dnBsMDExLm8KIG9iai15ICs9IHZwc2NpLm8KIG9iai15ICs9IHZ1YXJ0Lm8KIApkaWZmIC0tZ2l0 IGEveGVuL2FyY2gvYXJtL3ZwbDAxMS5jIGIveGVuL2FyY2gvYXJtL3ZwbDAxMS5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjOTg0OTAKLS0tIC9kZXYvbnVsbAorKysgYi94 ZW4vYXJjaC9hcm0vdnBsMDExLmMKQEAgLTAsMCArMSw0NTUgQEAKKy8qCisgKiBhcmNoL2FybS92 cGwwMTEuYworICoKKyAqIFZpcnR1YWwgUEwwMTEgVUFSVAorICoKKyAqIFRoaXMgcHJvZ3JhbSBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0 CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IK KyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBh bG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5v cmcvbGljZW5zZXMvPi4KKyAqLworCisjaW5jbHVkZSA8eGVuL2Vycm5vLmg+CisjaW5jbHVkZSA8 eGVuL2V2ZW50Lmg+CisjaW5jbHVkZSA8eGVuL2d1ZXN0X2FjY2Vzcy5oPgorI2luY2x1ZGUgPHhl bi9pbml0Lmg+CisjaW5jbHVkZSA8eGVuL2xpYi5oPgorI2luY2x1ZGUgPHhlbi9tbS5oPgorI2lu Y2x1ZGUgPHhlbi9zY2hlZC5oPgorI2luY2x1ZGUgPHB1YmxpYy9kb21jdGwuaD4KKyNpbmNsdWRl IDxwdWJsaWMvaW8vY29uc29sZS5oPgorI2luY2x1ZGUgPGFzbS9wbDAxMS11YXJ0Lmg+CisjaW5j bHVkZSA8YXNtL3ZnaWMtZW11bC5oPgorI2luY2x1ZGUgPGFzbS92cGwwMTEuaD4KKworLyoKKyAq IFNpbmNlIHBsMDExIHJlZ2lzdGVycyBhcmUgMzItYml0IHJlZ2lzdGVycywgYWxsIHJlZ2lzdGVy cworICogYXJlIGhhbmRsZWQgc2ltaWxhcmx5IGFsbG93aW5nIDgtYml0LCAxNi1iaXQgYW5kIDMy LWJpdAorICogYWNjZXNzZXMgZXhjZXB0IDY0LWJpdCBhY2Nlc3MuCisgKi8KK3N0YXRpYyBib29s IHZwbDAxMV9yZWczMl9jaGVja19hY2Nlc3Moc3RydWN0IGhzcl9kYWJ0IGRhYnQpCit7CisgICAg cmV0dXJuIChkYWJ0LnNpemUgIT0gREFCVF9ET1VCTEVfV09SRCk7Cit9CisKK3N0YXRpYyB2b2lk IHZwbDAxMV91cGRhdGVfaW50ZXJydXB0X3N0YXR1cyhzdHJ1Y3QgZG9tYWluICpkKQoreworICAg IHN0cnVjdCB2cGwwMTEgKnZwbDAxMSA9ICZkLT5hcmNoLnZwbDAxMTsKKyAgICB1aW50MzJfdCB1 YXJ0bWlzID0gdnBsMDExLT51YXJ0cmlzICYgdnBsMDExLT51YXJ0aW1zYzsKKworICAgIC8qCisg ICAgICogVGhpcyBmdW5jdGlvbiBpcyBleHBlY3RlZCB0byBiZSBjYWxsZWQgd2l0aCB0aGUgbG9j ayB0YWtlbi4KKyAgICAgKi8KKyAgICBBU1NFUlQoc3Bpbl9pc19sb2NrZWQoJnZwbDAxMS0+bG9j aykpOworCisgICAgLyoKKyAgICAgKiBUT0RPOiBQTDAxMSBpbnRlcnJ1cHRzIGFyZSBsZXZlbCB0 cmlnZ2VyZWQgd2hpY2ggbWVhbnMKKyAgICAgKiB0aGF0IGludGVycnVwdCBuZWVkcyB0byBiZSBz ZXQvY2xlYXIgaW5zdGVhZCBvZiBiZWluZworICAgICAqIGluamVjdGVkLiBIb3dldmVyLCBjdXJy ZW50bHkgdkdJQyBkb2VzIG5vdCBoYW5kbGUgbGV2ZWwKKyAgICAgKiB0cmlnZ2VyZWQgaW50ZXJy dXB0cyBwcm9wZXJseS4gVGhpcyBmdW5jdGlvbiBuZWVkcyB0byBiZQorICAgICAqIHJldmlzaXRl ZCBvbmNlIHZHSUMgc3RhcnRzIGhhbmRsaW5nIGxldmVsIHRyaWdnZXJlZAorICAgICAqIGludGVy cnVwdHMuCisgICAgICovCisKKyAgICAvKgorICAgICAqIFJhaXNlIGFuIGludGVycnVwdCBvbmx5 IGlmIGFueSBhZGRpdGlvbmFsIGludGVycnVwdAorICAgICAqIHN0YXR1cyBiaXQgaGFzIGJlZW4g c2V0IHNpbmNlIHRoZSBsYXN0IHRpbWUuCisgICAgICovCisgICAgaWYgKCB1YXJ0bWlzICYgfnZw bDAxMS0+c2hhZG93X3VhcnRtaXMgKQorICAgICAgICB2Z2ljX3ZjcHVfaW5qZWN0X3NwaShkLCBH VUVTVF9WUEwwMTFfU1BJKTsKKworICAgIHZwbDAxMS0+c2hhZG93X3VhcnRtaXMgPSB1YXJ0bWlz OworfQorCitzdGF0aWMgdWludDhfdCB2cGwwMTFfcmVhZF9kYXRhKHN0cnVjdCBkb21haW4gKmQp Cit7CisgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKKyAgICB1aW50OF90IGRhdGEgPSAwOworICAg IHN0cnVjdCB2cGwwMTEgKnZwbDAxMSA9ICZkLT5hcmNoLnZwbDAxMTsKKyAgICBzdHJ1Y3QgeGVu Y29uc19pbnRlcmZhY2UgKmludGYgPSB2cGwwMTEtPnJpbmdfYnVmOworICAgIFhFTkNPTlNfUklO R19JRFggaW5fY29ucywgaW5fcHJvZDsKKworICAgIFZQTDAxMV9MT0NLKGQsIGZsYWdzKTsKKwor ICAgIGluX2NvbnMgPSBpbnRmLT5pbl9jb25zOworICAgIGluX3Byb2QgPSBpbnRmLT5pbl9wcm9k OworCisgICAgc21wX3JtYigpOworCisgICAgLyoKKyAgICAgKiBJdCBpcyBleHBlY3RlZCB0aGF0 IHRoZXJlIHdpbGwgYmUgZGF0YSBpbiB0aGUgcmluZyBidWZmZXIgd2hlbiB0aGlzCisgICAgICog ZnVuY3Rpb24gaXMgY2FsbGVkIHNpbmNlIHRoZSBndWVzdCBpcyBleHBlY3RlZCB0byByZWFkIHRo ZSBkYXRhIHJlZ2lzdGVyCisgICAgICogb25seSBpZiB0aGUgVFhGRSBmbGFnIGlzIG5vdCBzZXQu CisgICAgICogSWYgdGhlIGd1ZXN0IHN0aWxsIGRvZXMgcmVhZCB3aGVuIFRYRkUgYml0IGlzIHNl dCB0aGVuIDAgd2lsbCBiZSByZXR1cm5lZC4KKyAgICAgKi8KKyAgICBpZiAoIHhlbmNvbnNfcXVl dWVkKGluX3Byb2QsIGluX2NvbnMsIHNpemVvZihpbnRmLT5pbikpID4gMCApCisgICAgeworICAg ICAgICBkYXRhID0gaW50Zi0+aW5beGVuY29uc19tYXNrKGluX2NvbnMsIHNpemVvZihpbnRmLT5p bikpXTsKKyAgICAgICAgaW5fY29ucyArPSAxOworICAgICAgICBzbXBfbWIoKTsKKyAgICAgICAg aW50Zi0+aW5fY29ucyA9IGluX2NvbnM7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgZ3ByaW50 ayhYRU5MT0dfRVJSLCAidnBsMDExOiBVbmV4cGVjdGVkIElOIHJpbmcgYnVmZmVyIGVtcHR5XG4i KTsKKworICAgIGlmICggeGVuY29uc19xdWV1ZWQoaW5fcHJvZCwgaW5fY29ucywgc2l6ZW9mKGlu dGYtPmluKSkgPT0gMCApCisgICAgeworICAgICAgICB2cGwwMTEtPnVhcnRmciB8PSBSWEZFOwor ICAgICAgICB2cGwwMTEtPnVhcnRyaXMgJj0gflJYSTsKKyAgICB9CisKKyAgICB2cGwwMTEtPnVh cnRmciAmPSB+UlhGRjsKKworICAgIHZwbDAxMV91cGRhdGVfaW50ZXJydXB0X3N0YXR1cyhkKTsK KworICAgIFZQTDAxMV9VTkxPQ0soZCwgZmxhZ3MpOworCisgICAgLyoKKyAgICAgKiBTZW5kIGFu IGV2ZW50IHRvIGNvbnNvbGUgYmFja2VuZCB0byBpbmRpY2F0ZSB0aGF0IGRhdGEgaGFzIGJlZW4K KyAgICAgKiByZWFkIGZyb20gdGhlIElOIHJpbmcgYnVmZmVyLgorICAgICAqLworICAgIG5vdGlm eV92aWFfeGVuX2V2ZW50X2NoYW5uZWwoZCwgdnBsMDExLT5ldnRjaG4pOworCisgICAgcmV0dXJu IGRhdGE7Cit9CisKK3N0YXRpYyB2b2lkIHZwbDAxMV93cml0ZV9kYXRhKHN0cnVjdCBkb21haW4g KmQsIHVpbnQ4X3QgZGF0YSkKK3sKKyAgICB1bnNpZ25lZCBsb25nIGZsYWdzOworICAgIHN0cnVj dCB2cGwwMTEgKnZwbDAxMSA9ICZkLT5hcmNoLnZwbDAxMTsKKyAgICBzdHJ1Y3QgeGVuY29uc19p bnRlcmZhY2UgKmludGYgPSB2cGwwMTEtPnJpbmdfYnVmOworICAgIFhFTkNPTlNfUklOR19JRFgg b3V0X2NvbnMsIG91dF9wcm9kOworCisgICAgVlBMMDExX0xPQ0soZCwgZmxhZ3MpOworCisgICAg b3V0X2NvbnMgPSBpbnRmLT5vdXRfY29uczsKKyAgICBvdXRfcHJvZCA9IGludGYtPm91dF9wcm9k OworCisgICAgc21wX21iKCk7CisKKyAgICAvKgorICAgICAqIEl0IGlzIGV4cGVjdGVkIHRoYXQg dGhlIHJpbmcgaXMgbm90IGZ1bGwgd2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZAorICAgICAq IGFzIHRoZSBndWVzdCBpcyBleHBlY3RlZCB0byB3cml0ZSB0byB0aGUgZGF0YSByZWdpc3RlciBv bmx5IHdoZW4gdGhlCisgICAgICogVFhGRiBmbGFnIGlzIG5vdCBzZXQuCisgICAgICogSW4gY2Fz ZSB0aGUgZ3Vlc3QgZG9lcyB3cml0ZSBldmVuIHdoZW4gdGhlIFRYRkYgZmxhZyBpcyBzZXQgdGhl biB0aGUKKyAgICAgKiBkYXRhIHdpbGwgYmUgc2lsZW50bHkgZHJvcHBlZC4KKyAgICAgKi8KKyAg ICBpZiAoIHhlbmNvbnNfcXVldWVkKG91dF9wcm9kLCBvdXRfY29ucywgc2l6ZW9mKGludGYtPm91 dCkpICE9CisgICAgICAgICBzaXplb2YgKGludGYtPm91dCkgKQorICAgIHsKKyAgICAgICAgaW50 Zi0+b3V0W3hlbmNvbnNfbWFzayhvdXRfcHJvZCwgc2l6ZW9mKGludGYtPm91dCkpXSA9IGRhdGE7 CisgICAgICAgIG91dF9wcm9kICs9IDE7CisgICAgICAgIHNtcF93bWIoKTsKKyAgICAgICAgaW50 Zi0+b3V0X3Byb2QgPSBvdXRfcHJvZDsKKyAgICB9CisgICAgZWxzZQorICAgICAgICBncHJpbnRr KFhFTkxPR19FUlIsICJ2cGwwMTE6IFVuZXhwZWN0ZWQgT1VUIHJpbmcgYnVmZmVyIGZ1bGxcbiIp OworCisgICAgaWYgKCB4ZW5jb25zX3F1ZXVlZChvdXRfcHJvZCwgb3V0X2NvbnMsIHNpemVvZihp bnRmLT5vdXQpKSA9PQorICAgICAgICAgc2l6ZW9mIChpbnRmLT5vdXQpICkKKyAgICB7CisgICAg ICAgIHZwbDAxMS0+dWFydGZyIHw9IFRYRkY7CisgICAgICAgIHZwbDAxMS0+dWFydHJpcyAmPSB+ VFhJOworICAgIH0KKworICAgIHZwbDAxMS0+dWFydGZyIHw9IEJVU1k7CisKKyAgICB2cGwwMTEt PnVhcnRmciAmPSB+VFhGRTsKKworICAgIHZwbDAxMV91cGRhdGVfaW50ZXJydXB0X3N0YXR1cyhk KTsKKworICAgIFZQTDAxMV9VTkxPQ0soZCwgZmxhZ3MpOworCisgICAgLyoKKyAgICAgKiBTZW5k IGFuIGV2ZW50IHRvIGNvbnNvbGUgYmFja2VuZCB0byBpbmRpY2F0ZSB0aGF0IHRoZXJlIGlzCisg ICAgICogZGF0YSBpbiB0aGUgT1VUIHJpbmcgYnVmZmVyLgorICAgICAqLworICAgIG5vdGlmeV92 aWFfeGVuX2V2ZW50X2NoYW5uZWwoZCwgdnBsMDExLT5ldnRjaG4pOworfQorCitzdGF0aWMgaW50 IHZwbDAxMV9tbWlvX3JlYWQoc3RydWN0IHZjcHUgKnYsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbW1pb19pbmZvX3QgKmluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVn aXN0ZXJfdCAqciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpwcml2KQorewor ICAgIHN0cnVjdCBoc3JfZGFidCBkYWJ0ID0gaW5mby0+ZGFidDsKKyAgICB1aW50MzJfdCB2cGww MTFfcmVnID0gKHVpbnQzMl90KShpbmZvLT5ncGEgLSBHVUVTVF9QTDAxMV9CQVNFKTsKKyAgICBz dHJ1Y3QgdnBsMDExICp2cGwwMTEgPSAmdi0+ZG9tYWluLT5hcmNoLnZwbDAxMTsKKyAgICBzdHJ1 Y3QgZG9tYWluICpkID0gdi0+ZG9tYWluOworICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKyAg ICBzd2l0Y2ggKCB2cGwwMTFfcmVnICkKKyAgICB7CisgICAgY2FzZSBEUjoKKyAgICAgICAgaWYg KCAhdnBsMDExX3JlZzMyX2NoZWNrX2FjY2VzcyhkYWJ0KSApIGdvdG8gYmFkX3dpZHRoOworCisg ICAgICAgICpyID0gdnJlZ19yZWczMl9leHRyYWN0KHZwbDAxMV9yZWFkX2RhdGEoZCksIGluZm8p OworICAgICAgICByZXR1cm4gMTsKKworICAgIGNhc2UgUlNSOgorICAgICAgICBpZiAoICF2cGww MTFfcmVnMzJfY2hlY2tfYWNjZXNzKGRhYnQpICkgZ290byBiYWRfd2lkdGg7CisKKyAgICAgICAg LyogSXQgYWx3YXlzIHJldHVybnMgMCBhcyB0aGVyZSBhcmUgbm8gcGh5c2ljYWwgZXJyb3JzLiAq LworICAgICAgICAqciA9IDA7CisgICAgICAgIHJldHVybiAxOworCisgICAgY2FzZSBGUjoKKyAg ICAgICAgaWYgKCAhdnBsMDExX3JlZzMyX2NoZWNrX2FjY2VzcyhkYWJ0KSApIGdvdG8gYmFkX3dp ZHRoOworCisgICAgICAgIFZQTDAxMV9MT0NLKGQsIGZsYWdzKTsKKyAgICAgICAgKnIgPSB2cmVn X3JlZzMyX2V4dHJhY3QodnBsMDExLT51YXJ0ZnIsIGluZm8pOworICAgICAgICBWUEwwMTFfVU5M T0NLKGQsIGZsYWdzKTsKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICBjYXNlIFJJUzoKKyAgICAg ICAgaWYgKCAhdnBsMDExX3JlZzMyX2NoZWNrX2FjY2VzcyhkYWJ0KSApIGdvdG8gYmFkX3dpZHRo OworCisgICAgICAgIFZQTDAxMV9MT0NLKGQsIGZsYWdzKTsKKyAgICAgICAgKnIgPSB2cmVnX3Jl ZzMyX2V4dHJhY3QodnBsMDExLT51YXJ0cmlzLCBpbmZvKTsKKyAgICAgICAgVlBMMDExX1VOTE9D SyhkLCBmbGFncyk7CisgICAgICAgIHJldHVybiAxOworCisgICAgY2FzZSBNSVM6CisgICAgICAg IGlmICggIXZwbDAxMV9yZWczMl9jaGVja19hY2Nlc3MoZGFidCkgKSBnb3RvIGJhZF93aWR0aDsK KworICAgICAgICBWUEwwMTFfTE9DSyhkLCBmbGFncyk7CisgICAgICAgICpyID0gdnJlZ19yZWcz Ml9leHRyYWN0KHZwbDAxMS0+dWFydHJpcyAmIHZwbDAxMS0+dWFydGltc2MsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGluZm8pOworICAgICAgICBWUEwwMTFfVU5MT0NLKGQsIGZs YWdzKTsKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICBjYXNlIElNU0M6CisgICAgICAgIGlmICgg IXZwbDAxMV9yZWczMl9jaGVja19hY2Nlc3MoZGFidCkgKSBnb3RvIGJhZF93aWR0aDsKKworICAg ICAgICBWUEwwMTFfTE9DSyhkLCBmbGFncyk7CisgICAgICAgICpyID0gdnJlZ19yZWczMl9leHRy YWN0KHZwbDAxMS0+dWFydGltc2MsIGluZm8pOworICAgICAgICBWUEwwMTFfVU5MT0NLKGQsIGZs YWdzKTsKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICBjYXNlIElDUjoKKyAgICAgICAgaWYgKCAh dnBsMDExX3JlZzMyX2NoZWNrX2FjY2VzcyhkYWJ0KSApIGdvdG8gYmFkX3dpZHRoOworCisgICAg ICAgIC8qIE9ubHkgd3JpdGUgaXMgdmFsaWQuICovCisgICAgICAgIHJldHVybiAwOworCisgICAg ZGVmYXVsdDoKKyAgICAgICAgZ3ByaW50ayhYRU5MT0dfRVJSLCAidnBsMDExOiB1bmhhbmRsZWQg cmVhZCByJWQgb2Zmc2V0ICUjMDh4XG4iLAorICAgICAgICAgICAgICAgIGRhYnQucmVnLCB2cGww MTFfcmVnKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmV0dXJuIDE7CisKK2Jh ZF93aWR0aDoKKyAgICBncHJpbnRrKFhFTkxPR19FUlIsICJ2cGwwMTE6IGJhZCByZWFkIHdpZHRo ICVkIHIlZCBvZmZzZXQgJSMwOHhcbiIsCisgICAgICAgICAgICBkYWJ0LnNpemUsIGRhYnQucmVn LCB2cGwwMTFfcmVnKTsKKyAgICBkb21haW5fY3Jhc2hfc3luY2hyb25vdXMoKTsKKyAgICByZXR1 cm4gMDsKKworfQorCitzdGF0aWMgaW50IHZwbDAxMV9tbWlvX3dyaXRlKHN0cnVjdCB2Y3B1ICp2 LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtbWlvX2luZm9fdCAqaW5mbywKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJfdCByLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB2b2lkICpwcml2KQoreworICAgIHN0cnVjdCBoc3JfZGFidCBkYWJ0ID0gaW5m by0+ZGFidDsKKyAgICB1aW50MzJfdCB2cGwwMTFfcmVnID0gKHVpbnQzMl90KShpbmZvLT5ncGEg LSBHVUVTVF9QTDAxMV9CQVNFKTsKKyAgICBzdHJ1Y3QgdnBsMDExICp2cGwwMTEgPSAmdi0+ZG9t YWluLT5hcmNoLnZwbDAxMTsKKyAgICBzdHJ1Y3QgZG9tYWluICpkID0gdi0+ZG9tYWluOworICAg IHVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKyAgICBzd2l0Y2ggKCB2cGwwMTFfcmVnICkKKyAgICB7 CisgICAgY2FzZSBEUjoKKyAgICB7CisgICAgICAgIHVpbnQzMl90IGRhdGEgPSAwOworCisgICAg ICAgIGlmICggIXZwbDAxMV9yZWczMl9jaGVja19hY2Nlc3MoZGFidCkgKSBnb3RvIGJhZF93aWR0 aDsKKworICAgICAgICB2cmVnX3JlZzMyX3VwZGF0ZSgmZGF0YSwgciwgaW5mbyk7CisgICAgICAg IGRhdGEgJj0gMHhGRjsKKyAgICAgICAgdnBsMDExX3dyaXRlX2RhdGEodi0+ZG9tYWluLCBkYXRh KTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgY2FzZSBSU1I6IC8qIE5vdGhpbmcg dG8gY2xlYXIuICovCisgICAgICAgIGlmICggIXZwbDAxMV9yZWczMl9jaGVja19hY2Nlc3MoZGFi dCkgKSBnb3RvIGJhZF93aWR0aDsKKworICAgICAgICByZXR1cm4gMTsKKworICAgIGNhc2UgRlI6 CisgICAgY2FzZSBSSVM6CisgICAgY2FzZSBNSVM6CisgICAgICAgIGdvdG8gd3JpdGVfaWdub3Jl OworCisgICAgY2FzZSBJTVNDOgorICAgICAgICBpZiAoICF2cGwwMTFfcmVnMzJfY2hlY2tfYWNj ZXNzKGRhYnQpICkgZ290byBiYWRfd2lkdGg7CisKKyAgICAgICAgVlBMMDExX0xPQ0soZCwgZmxh Z3MpOworICAgICAgICB2cmVnX3JlZzMyX3VwZGF0ZSgmdnBsMDExLT51YXJ0aW1zYywgciwgaW5m byk7CisgICAgICAgIHZwbDAxMV91cGRhdGVfaW50ZXJydXB0X3N0YXR1cyh2LT5kb21haW4pOwor ICAgICAgICBWUEwwMTFfVU5MT0NLKGQsIGZsYWdzKTsKKyAgICAgICAgcmV0dXJuIDE7CisKKyAg ICBjYXNlIElDUjoKKyAgICAgICAgaWYgKCAhdnBsMDExX3JlZzMyX2NoZWNrX2FjY2VzcyhkYWJ0 KSApIGdvdG8gYmFkX3dpZHRoOworCisgICAgICAgIFZQTDAxMV9MT0NLKGQsIGZsYWdzKTsKKyAg ICAgICAgdnJlZ19yZWczMl9jbGVhcmJpdHMoJnZwbDAxMS0+dWFydHJpcywgciwgaW5mbyk7Cisg ICAgICAgIHZwbDAxMV91cGRhdGVfaW50ZXJydXB0X3N0YXR1cyhkKTsKKyAgICAgICAgVlBMMDEx X1VOTE9DSyhkLCBmbGFncyk7CisgICAgICAgIHJldHVybiAxOworCisgICAgZGVmYXVsdDoKKyAg ICAgICAgZ3ByaW50ayhYRU5MT0dfRVJSLCAidnBsMDExOiB1bmhhbmRsZWQgd3JpdGUgciVkIG9m ZnNldCAlIzA4eFxuIiwKKyAgICAgICAgICAgICAgICBkYWJ0LnJlZywgdnBsMDExX3JlZyk7Cisg ICAgICAgIHJldHVybiAwOworICAgIH0KKword3JpdGVfaWdub3JlOgorICAgIHJldHVybiAxOwor CitiYWRfd2lkdGg6CisgICAgZ3ByaW50ayhYRU5MT0dfRVJSLCAidnBsMDExOiBiYWQgd3JpdGUg d2lkdGggJWQgciVkIG9mZnNldCAlIzA4eFxuIiwKKyAgICAgICAgICAgIGRhYnQuc2l6ZSwgZGFi dC5yZWcsIHZwbDAxMV9yZWcpOworICAgIGRvbWFpbl9jcmFzaF9zeW5jaHJvbm91cygpOworICAg IHJldHVybiAwOworCit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbW1pb19oYW5kbGVyX29wcyB2 cGwwMTFfbW1pb19oYW5kbGVyID0geworICAgIC5yZWFkID0gdnBsMDExX21taW9fcmVhZCwKKyAg ICAud3JpdGUgPSB2cGwwMTFfbW1pb193cml0ZSwKK307CisKK3N0YXRpYyB2b2lkIHZwbDAxMV9k YXRhX2F2YWlsKHN0cnVjdCBkb21haW4gKmQpCit7CisgICAgdW5zaWduZWQgbG9uZyBmbGFnczsK KyAgICBzdHJ1Y3QgdnBsMDExICp2cGwwMTEgPSAmZC0+YXJjaC52cGwwMTE7CisgICAgc3RydWN0 IHhlbmNvbnNfaW50ZXJmYWNlICppbnRmID0gdnBsMDExLT5yaW5nX2J1ZjsKKyAgICBYRU5DT05T X1JJTkdfSURYIGluX2NvbnMsIGluX3Byb2QsIG91dF9jb25zLCBvdXRfcHJvZDsKKyAgICBYRU5D T05TX1JJTkdfSURYIGluX3JpbmdfcXNpemUsIG91dF9yaW5nX3FzaXplOworCisgICAgVlBMMDEx X0xPQ0soZCwgZmxhZ3MpOworCisgICAgaW5fY29ucyA9IGludGYtPmluX2NvbnM7CisgICAgaW5f cHJvZCA9IGludGYtPmluX3Byb2Q7CisgICAgb3V0X2NvbnMgPSBpbnRmLT5vdXRfY29uczsKKyAg ICBvdXRfcHJvZCA9IGludGYtPm91dF9wcm9kOworCisgICAgc21wX3JtYigpOworCisgICAgaW5f cmluZ19xc2l6ZSA9IHhlbmNvbnNfcXVldWVkKGluX3Byb2QsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGluX2NvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNpemVvZihpbnRmLT5pbikpOworCisgICAgb3V0X3JpbmdfcXNpemUgPSB4ZW5jb25zX3F1 ZXVlZChvdXRfcHJvZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dF9j b25zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGludGYtPm91 dCkpOworCisgICAgLyogVXBkYXRlIHRoZSB1YXJ0IHJ4IHN0YXRlIGlmIHRoZSBidWZmZXIgaXMg bm90IGVtcHR5LiAqLworICAgIGlmICggaW5fcmluZ19xc2l6ZSAhPSAwICkKKyAgICB7CisgICAg ICAgIHZwbDAxMS0+dWFydGZyICY9IH5SWEZFOworICAgICAgICBpZiAoIGluX3JpbmdfcXNpemUg PT0gc2l6ZW9mKGludGYtPmluKSApCisgICAgICAgICAgICB2cGwwMTEtPnVhcnRmciB8PSBSWEZG OworICAgICAgICB2cGwwMTEtPnVhcnRyaXMgfD0gUlhJOworICAgIH0KKworICAgIC8qIFVwZGF0 ZSB0aGUgdWFydCB0eCBzdGF0ZSBpZiB0aGUgYnVmZmVyIGlzIG5vdCBmdWxsLiAqLworICAgIGlm ICggb3V0X3JpbmdfcXNpemUgIT0gc2l6ZW9mKGludGYtPm91dCkgKQorICAgIHsKKyAgICAgICAg dnBsMDExLT51YXJ0ZnIgJj0gflRYRkY7CisgICAgICAgIHZwbDAxMS0+dWFydHJpcyB8PSBUWEk7 CisgICAgICAgIGlmICggb3V0X3JpbmdfcXNpemUgPT0gMCApCisgICAgICAgIHsKKyAgICAgICAg ICAgIHZwbDAxMS0+dWFydGZyICY9IH5CVVNZOworICAgICAgICAgICAgdnBsMDExLT51YXJ0ZnIg fD0gVFhGRTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZwbDAxMV91cGRhdGVfaW50ZXJydXB0 X3N0YXR1cyhkKTsKKworICAgIFZQTDAxMV9VTkxPQ0soZCwgZmxhZ3MpOworfQorCitzdGF0aWMg dm9pZCB2cGwwMTFfbm90aWZpY2F0aW9uKHN0cnVjdCB2Y3B1ICp2LCB1bnNpZ25lZCBpbnQgcG9y dCkKK3sKKyAgICB2cGwwMTFfZGF0YV9hdmFpbCh2LT5kb21haW4pOworfQorCitpbnQgZG9tYWlu X3ZwbDAxMV9pbml0KHN0cnVjdCBkb21haW4gKmQsIHN0cnVjdCB2cGwwMTFfaW5pdF9pbmZvICpp bmZvKQoreworICAgIGludCByYzsKKyAgICBzdHJ1Y3QgdnBsMDExICp2cGwwMTEgPSAmZC0+YXJj aC52cGwwMTE7CisKKyAgICBpZiAoIHZwbDAxMS0+cmluZ19idWYgKQorICAgICAgICByZXR1cm4g LUVJTlZBTDsKKworICAgIC8qIE1hcCB0aGUgZ3Vlc3QgUEZOIHRvIFhlbiBhZGRyZXNzIHNwYWNl LiAqLworICAgIHJjID0gIHByZXBhcmVfcmluZ19mb3JfaGVscGVyKGQsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZ2ZuX3goaW5mby0+Z2ZuKSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAmdnBsMDExLT5yaW5nX3BhZ2UsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJnZwbDAxMS0+cmluZ19idWYpOworICAgIGlmICggcmMgPCAwICkKKyAg ICAgICAgZ290byBvdXQ7CisKKyAgICByYyA9IHZnaWNfcmVzZXJ2ZV92aXJxKGQsIEdVRVNUX1ZQ TDAxMV9TUEkpOworICAgIGlmICggIXJjICkKKyAgICB7CisgICAgICAgIHJjID0gLUVJTlZBTDsK KyAgICAgICAgZ290byBvdXQxOworICAgIH0KKworICAgIHJjID0gYWxsb2NfdW5ib3VuZF94ZW5f ZXZlbnRfY2hhbm5lbChkLCAwLCBpbmZvLT5jb25zb2xlX2RvbWlkLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB2cGwwMTFfbm90aWZpY2F0aW9uKTsKKyAgICBpZiAo IHJjIDwgMCApCisgICAgICAgIGdvdG8gb3V0MjsKKworICAgIHZwbDAxMS0+ZXZ0Y2huID0gaW5m by0+ZXZ0Y2huID0gcmM7CisKKyAgICBzcGluX2xvY2tfaW5pdCgmdnBsMDExLT5sb2NrKTsKKwor ICAgIHJlZ2lzdGVyX21taW9faGFuZGxlcihkLCAmdnBsMDExX21taW9faGFuZGxlciwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgR1VFU1RfUEwwMTFfQkFTRSwgR1VFU1RfUEwwMTFfU0laRSwg TlVMTCk7CisKKyAgICByZXR1cm4gMDsKKworb3V0MjoKKyAgICB2Z2ljX2ZyZWVfdmlycShkLCBH VUVTVF9WUEwwMTFfU1BJKTsKKworb3V0MToKKyAgICBkZXN0cm95X3JpbmdfZm9yX2hlbHBlcigm dnBsMDExLT5yaW5nX2J1ZiwgdnBsMDExLT5yaW5nX3BhZ2UpOworCitvdXQ6CisgICAgcmV0dXJu IHJjOworfQorCit2b2lkIGRvbWFpbl92cGwwMTFfZGVpbml0KHN0cnVjdCBkb21haW4gKmQpCit7 CisgICAgc3RydWN0IHZwbDAxMSAqdnBsMDExID0gJmQtPmFyY2gudnBsMDExOworCisgICAgaWYg KCAhdnBsMDExLT5yaW5nX2J1ZiApCisgICAgICAgIHJldHVybjsKKworICAgIGZyZWVfeGVuX2V2 ZW50X2NoYW5uZWwoZCwgdnBsMDExLT5ldnRjaG4pOworICAgIGRlc3Ryb3lfcmluZ19mb3JfaGVs cGVyKCZ2cGwwMTEtPnJpbmdfYnVmLCB2cGwwMTEtPnJpbmdfcGFnZSk7CisgICAgeGZyZWUoZC0+ YXJjaC52bW1pby5oYW5kbGVycyk7Cit9CisKKy8qCisgKiBMb2NhbCB2YXJpYWJsZXM6CisgKiBt b2RlOiBDCisgKiBjLWZpbGUtc3R5bGU6ICJCU0QiCisgKiBjLWJhc2ljLW9mZnNldDogNAorICog aW5kZW50LXRhYnMtbW9kZTogbmlsCisgKiBFbmQ6CisgKi8KZGlmZiAtLWdpdCBhL3hlbi9pbmNs dWRlL2FzbS1hcm0vZG9tYWluLmggYi94ZW4vaW5jbHVkZS9hc20tYXJtL2RvbWFpbi5oCmluZGV4 IDhkZmMxZDEuLjFhMTE0NWQgMTAwNjQ0Ci0tLSBhL3hlbi9pbmNsdWRlL2FzbS1hcm0vZG9tYWlu LmgKKysrIGIveGVuL2luY2x1ZGUvYXNtLWFybS9kb21haW4uaApAQCAtMTEsNiArMTEsNyBAQAog I2luY2x1ZGUgPHB1YmxpYy9odm0vcGFyYW1zLmg+CiAjaW5jbHVkZSA8eGVuL3NlcmlhbC5oPgog I2luY2x1ZGUgPHhlbi9yYnRyZWUuaD4KKyNpbmNsdWRlIDxhc20tYXJtL3ZwbDAxMS5oPgogCiBz dHJ1Y3QgaHZtX2RvbWFpbgogewpAQCAtMTQ1LDYgKzE0NiwxMSBAQCBzdHJ1Y3QgYXJjaF9kb21h aW4KICAgICBzdHJ1Y3QgewogICAgICAgICB1aW50OF90IHByaXZpbGVnZWRfY2FsbF9lbmFibGVk IDogMTsKICAgICB9IG1vbml0b3I7CisKKyNpZmRlZiBDT05GSUdfU0JTQV9WVUFSVF9DT05TT0xF CisgICAgc3RydWN0IHZwbDAxMSB2cGwwMTE7CisjZW5kaWYKKwogfSAgX19jYWNoZWxpbmVfYWxp Z25lZDsKIAogc3RydWN0IGFyY2hfdmNwdQpkaWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUvYXNtLWFy bS9wbDAxMS11YXJ0LmggYi94ZW4vaW5jbHVkZS9hc20tYXJtL3BsMDExLXVhcnQuaAppbmRleCAx MjNmNDc3Li41N2U5ZWM3IDEwMDY0NAotLS0gYS94ZW4vaW5jbHVkZS9hc20tYXJtL3BsMDExLXVh cnQuaAorKysgYi94ZW4vaW5jbHVkZS9hc20tYXJtL3BsMDExLXVhcnQuaApAQCAtNDksNiArNDks OCBAQAogLyogRlIgYml0cyAqLwogI2RlZmluZSBUWEZFICAgKDE8PDcpIC8qIFRYIEZJRk8gZW1w dHkgKi8KICNkZWZpbmUgUlhGRSAgICgxPDw0KSAvKiBSWCBGSUZPIGVtcHR5ICovCisjZGVmaW5l IFRYRkYgICAoMTw8NSkgLyogVFggRklGTyBmdWxsICovCisjZGVmaW5lIFJYRkYgICAoMTw8Nikg LyogUlggRklGTyBmdWxsICovCiAjZGVmaW5lIEJVU1kgICAoMTw8MykgLyogVHJhbnNtaXQgaXMg bm90IGNvbXBsZXRlICovCiAKIC8qIExDUl9IIGJpdHMgKi8KZGlmZiAtLWdpdCBhL3hlbi9pbmNs dWRlL2FzbS1hcm0vdnBsMDExLmggYi94ZW4vaW5jbHVkZS9hc20tYXJtL3ZwbDAxMS5oCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0MzllNjQKLS0tIC9kZXYvbnVsbAorKysg Yi94ZW4vaW5jbHVkZS9hc20tYXJtL3ZwbDAxMS5oCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBp bmNsdWRlL3hlbi92cGwwMTEuaAorICoKKyAqIFZpcnR1YWwgUEwwMTEgVUFSVAorICoKKyAqIFRo aXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv b3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgKiBB TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFO VEFCSUxJVFkgb3IKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisg KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBhbG9uZyB3aXRoCisgKiB0aGlzIHByb2dyYW07IElmIG5vdCwgc2VlIDxodHRw Oi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaWZuZGVmIF9WUEwwMTFfSF8KKyNk ZWZpbmUgX1ZQTDAxMV9IXworCisjaW5jbHVkZSA8cHVibGljL2RvbWN0bC5oPgorI2luY2x1ZGUg PHB1YmxpYy9pby9yaW5nLmg+CisjaW5jbHVkZSA8YXNtL3ZyZWcuaD4KKyNpbmNsdWRlIDx4ZW4v bW0uaD4KKworLyogaGVscGVyIG1hY3JvcyAqLworI2RlZmluZSBWUEwwMTFfTE9DSyhkLGZsYWdz KSBzcGluX2xvY2tfaXJxc2F2ZSgmKGQpLT5hcmNoLnZwbDAxMS5sb2NrLCBmbGFncykKKyNkZWZp bmUgVlBMMDExX1VOTE9DSyhkLGZsYWdzKSBzcGluX3VubG9ja19pcnFyZXN0b3JlKCYoZCktPmFy Y2gudnBsMDExLmxvY2ssIGZsYWdzKQorCitzdHJ1Y3QgdnBsMDExIHsKKyAgICB2b2lkICpyaW5n X2J1ZjsKKyAgICBzdHJ1Y3QgcGFnZV9pbmZvICpyaW5nX3BhZ2U7CisgICAgdWludDMyX3QgICAg dWFydGZyOyAgICAgICAgIC8qIEZsYWcgcmVnaXN0ZXIgKi8KKyAgICB1aW50MzJfdCAgICB1YXJ0 Y3I7ICAgICAgICAgLyogQ29udHJvbCByZWdpc3RlciAqLworICAgIHVpbnQzMl90ICAgIHVhcnRp bXNjOyAgICAgICAvKiBJbnRlcnJ1cHQgbWFzayByZWdpc3RlciovCisgICAgdWludDMyX3QgICAg dWFydGljcjsgICAgICAgIC8qIEludGVycnVwdCBjbGVhciByZWdpc3RlciAqLworICAgIHVpbnQz Ml90ICAgIHVhcnRyaXM7ICAgICAgICAvKiBSYXcgaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciAq LworICAgIHVpbnQzMl90ICAgIHNoYWRvd191YXJ0bWlzOyAvKiBzaGFkb3cgbWFza2VkIGludGVy cnVwdCByZWdpc3RlciAqLworICAgIHNwaW5sb2NrX3QgIGxvY2s7CisgICAgZXZ0Y2huX3BvcnRf dCBldnRjaG47Cit9OworCitzdHJ1Y3QgdnBsMDExX2luaXRfaW5mbyB7CisgICAgdWludDMyX3Qg Y29uc29sZV9kb21pZDsKKyAgICBnZm5fdCBnZm47CisgICAgZXZ0Y2huX3BvcnRfdCBldnRjaG47 Cit9OworCisjaWZkZWYgQ09ORklHX1NCU0FfVlVBUlRfQ09OU09MRQoraW50IGRvbWFpbl92cGww MTFfaW5pdChzdHJ1Y3QgZG9tYWluICpkLAorICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg dnBsMDExX2luaXRfaW5mbyAqaW5mbyk7Cit2b2lkIGRvbWFpbl92cGwwMTFfZGVpbml0KHN0cnVj dCBkb21haW4gKmQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IGRvbWFpbl92cGwwMTFfaW5p dChzdHJ1Y3QgZG9tYWluICpkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHN0cnVjdCB2cGwwMTFfaW5pdF9pbmZvICppbmZvKQoreworICAgIHJldHVybiAtRU5PU1lTOwor fQorCitzdGF0aWMgaW5saW5lIHZvaWQgZG9tYWluX3ZwbDAxMV9kZWluaXQoc3RydWN0IGRvbWFp biAqZCkgeyB9CisjZW5kaWYKKyNlbmRpZiAgLyogX1ZQTDAxMV9IXyAqLworCisvKgorICogTG9j YWwgdmFyaWFibGVzOgorICogbW9kZTogQworICogYy1maWxlLXN0eWxlOiAiQlNEIgorICogYy1i YXNpYy1vZmZzZXQ6IDQKKyAqIGluZGVudC10YWJzLW1vZGU6IG5pbAorICogRW5kOgorICovCmRp ZmYgLS1naXQgYS94ZW4vaW5jbHVkZS9wdWJsaWMvYXJjaC1hcm0uaCBiL3hlbi9pbmNsdWRlL3B1 YmxpYy9hcmNoLWFybS5oCmluZGV4IGJkOTc0ZmIuLjg1YWI2NjUgMTAwNjQ0Ci0tLSBhL3hlbi9p bmNsdWRlL3B1YmxpYy9hcmNoLWFybS5oCisrKyBiL3hlbi9pbmNsdWRlL3B1YmxpYy9hcmNoLWFy bS5oCkBAIC00MTAsNiArNDEwLDEwIEBAIHR5cGVkZWYgdWludDY0X3QgeGVuX2NhbGxiYWNrX3Q7 CiAjZGVmaW5lIEdVRVNUX0FDUElfQkFTRSAweDIwMDAwMDAwVUxMCiAjZGVmaW5lIEdVRVNUX0FD UElfU0laRSAweDAyMDAwMDAwVUxMCiAKKy8qIFBMMDExIG1hcHBpbmdzICovCisjZGVmaW5lIEdV RVNUX1BMMDExX0JBU0UgICAgMHgyMjAwMDAwMFVMTAorI2RlZmluZSBHVUVTVF9QTDAxMV9TSVpF ICAgIDB4MDAwMDEwMDBVTEwKKwogLyoKICAqIDE2TUIgPT0gNDA5NiBwYWdlcyByZXNlcnZlZCBm b3IgZ3Vlc3QgdG8gdXNlIGFzIGEgcmVnaW9uIHRvIG1hcCBpdHMKICAqIGdyYW50IHRhYmxlIGlu LgpAQCAtNDQ0LDYgKzQ0OCw4IEBAIHR5cGVkZWYgdWludDY0X3QgeGVuX2NhbGxiYWNrX3Q7CiAj ZGVmaW5lIEdVRVNUX1RJTUVSX1BIWVNfTlNfUFBJIDMwCiAjZGVmaW5lIEdVRVNUX0VWVENITl9Q UEkgICAgICAgIDMxCiAKKyNkZWZpbmUgR1VFU1RfVlBMMDExX1NQSSAgICAgICAgMzIKKwogLyog UFNDSSBmdW5jdGlvbnMgKi8KICNkZWZpbmUgUFNDSV9jcHVfc3VzcGVuZCAwCiAjZGVmaW5lIFBT Q0lfY3B1X29mZiAgICAgMQotLSAKMi43LjQKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0 cy54ZW4ub3JnCmh0dHBzOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK