From mboxrd@z Thu Jan 1 00:00:00 1970 From: Madalin Bucur Subject: [PATCH 02/12] fsl/fman: Add the FMan FLIB Date: Wed, 10 Jun 2015 18:21:44 +0300 Message-ID: <1433949712-5648-5-git-send-email-madalin.bucur@freescale.com> References: <1433949712-5648-1-git-send-email-madalin.bucur@freescale.com> <1433949712-5648-2-git-send-email-madalin.bucur@freescale.com> <1433949712-5648-3-git-send-email-madalin.bucur@freescale.com> <1433949712-5648-4-git-send-email-madalin.bucur@freescale.com> Reply-To: madalin.bucur@freescale.com Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: scottwood@freescale.com, Igal Liberman To: , , Return-path: In-Reply-To: <1433949712-5648-4-git-send-email-madalin.bucur@freescale.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: linuxppc-dev-bounces+glppe-linuxppc-embedded-2=m.gmane.org@lists.ozlabs.org Sender: "Linuxppc-dev" List-Id: netdev.vger.kernel.org RnJvbTogSWdhbCBMaWJlcm1hbiA8SWdhbC5MaWJlcm1hbkBmcmVlc2NhbGUuY29tPgoKVGhlIEZN YW4gRkxpYiBwcm92aWRlcyB0aGUgYmFzaWMgQVBJIHVzZWQgYnkgdGhlIEZNYW4gZHJpdmVycyB0 bwpjb25maWd1cmUgYW5kIGNvbnRyb2wgdGhlIEZNYW4gaGFyZHdhcmUuCgpTaWduZWQtb2ZmLWJ5 OiBJZ2FsIExpYmVybWFuIDxJZ2FsLkxpYmVybWFuQGZyZWVzY2FsZS5jb20+Ci0tLQogZHJpdmVy cy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWcgICAgICAgfCAgIDEgKwogZHJpdmVycy9u ZXQvZXRoZXJuZXQvZnJlZXNjYWxlL01ha2VmaWxlICAgICAgfCAgIDIgKwogZHJpdmVycy9uZXQv ZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vS2NvbmZpZyAgfCAgIDcgKwogZHJpdmVycy9uZXQvZXRo ZXJuZXQvZnJlZXNjYWxlL2ZtYW4vTWFrZWZpbGUgfCAgIDUgKwogZHJpdmVycy9uZXQvZXRoZXJu ZXQvZnJlZXNjYWxlL2ZtYW4vZm1hbi5jICAgfCA5NzMgKysrKysrKysrKysrKysrKysrKysrKysr KysrCiA1IGZpbGVzIGNoYW5nZWQsIDk4OCBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vS2NvbmZpZwogY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL01ha2VmaWxlCiBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZm1h bi5jCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWcg Yi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZwppbmRleCAyNWUzNDI1Li4y NGU5MzhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZp ZworKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZwpAQCAtNTUsNiAr NTUsNyBAQCBjb25maWcgRkVDX01QQzUyeHhfTURJTwogCSAgSWYgY29tcGlsZWQgYXMgbW9kdWxl LCBpdCB3aWxsIGJlIGNhbGxlZCBmZWNfbXBjNTJ4eF9waHkuCiAKIHNvdXJjZSAiZHJpdmVycy9u ZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvS2NvbmZpZyIKK3NvdXJjZSAiZHJpdmVycy9u ZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vS2NvbmZpZyIKIAogY29uZmlnIEZTTF9QUV9NRElP CiAJdHJpc3RhdGUgIkZyZWVzY2FsZSBQUSBNRElPIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQv ZXRoZXJuZXQvZnJlZXNjYWxlL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNj YWxlL01ha2VmaWxlCmluZGV4IDcxZGViZDEuLjQwOTdjNTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMv bmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC9ldGhlcm5l dC9mcmVlc2NhbGUvTWFrZWZpbGUKQEAgLTE3LDMgKzE3LDUgQEAgZ2lhbmZhcl9kcml2ZXItb2Jq cyA6PSBnaWFuZmFyLm8gXAogCQlnaWFuZmFyX2V0aHRvb2wubwogb2JqLSQoQ09ORklHX1VDQ19H RVRIKSArPSB1Y2NfZ2V0aF9kcml2ZXIubwogdWNjX2dldGhfZHJpdmVyLW9ianMgOj0gdWNjX2dl dGgubyB1Y2NfZ2V0aF9ldGh0b29sLm8KKworb2JqLSQoQ09ORklHX0ZTTF9GTUFOKSArPSBmbWFu LwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vS2NvbmZp ZyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL0tjb25maWcKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFlYWUyOQotLS0gL2Rldi9udWxsCisrKyBiL2Ry aXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL0tjb25maWcKQEAgLTAsMCArMSw3IEBA Citjb25maWcgRlNMX0ZNQU4KKwlib29sICJGTWFuIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBGU0xf U09DIHx8IENPTVBJTEVfVEVTVAorCWRlZmF1bHQgbgorCWhlbHAKKwkJRnJlZXNjYWxlIERhdGEt UGF0aCBBY2NlbGVyYXRpb24gQXJjaGl0ZWN0dXJlIEZyYW1lIE1hbmFnZXIKKwkJKEZNYW4pIHN1 cHBvcnQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL01h a2VmaWxlIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4vTWFrZWZpbGUKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc5OWM2ZgotLS0gL2Rldi9udWxsCisr KyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mbWFuL01ha2VmaWxlCkBAIC0wLDAg KzEsNSBAQAorc3ViZGlyLWNjZmxhZ3MteSArPSAtSSQoc3JjdHJlZSkvZHJpdmVycy9uZXQvZXRo ZXJuZXQvZnJlZXNjYWxlL2ZtYW4vZmxpYgorCitvYmoteQkJKz0gZnNsX2ZtYW4ubworCitmc2xf Zm1hbi1vYmpzCTo9IGZtYW4ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJl ZXNjYWxlL2ZtYW4vZm1hbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZtYW4v Zm1hbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxMGM0OTgKLS0tIC9k ZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZm1hbi9mbWFuLmMK QEAgLTAsMCArMSw5NzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOCAtIDIwMTUgRnJlZXNjYWxl IFNlbWljb25kdWN0b3IgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291 cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBt ZXQ6CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g dGhlIGFib3ZlIGNvcHlyaWdodAorICoJIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKgkgbm90 aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy IGluIHRoZQorICoJIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEZy ZWVzY2FsZSBTZW1pY29uZHVjdG9yIG5vciB0aGUKKyAqCSBuYW1lcyBvZiBpdHMgY29udHJpYnV0 b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICoJIGRlcml2 ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt aXNzaW9uLgorICoKKyAqIEFMVEVSTkFUSVZFTFksIHRoaXMgc29mdHdhcmUgbWF5IGJlIGRpc3Ry aWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlICgiR1BMIikgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0 aW9uLCBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoYXQgTGljZW5zZSBvciAoYXQgeW91ciBvcHRpb24p IGFueQorICogbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE IEJZIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT SEFMTCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNU LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRB LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO RAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZU V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K KyAqLworCisjaW5jbHVkZSAiZnNsX2ZtYW4uaCIKKwordWludDMyX3QgZm1hbl9nZXRfYm1pX2Vy cl9ldmVudChzdHJ1Y3QgZm1hbl9ibWlfcmVncyBfX2lvbWVtICpibWlfcmcpCit7CisJdWludDMy X3QgZXZlbnQsIG1hc2ssIGZvcmNlOworCisJZXZlbnQgPSBpb3JlYWQzMmJlKCZibWlfcmctPmZt Ym1faWV2cik7CisJbWFzayA9IGlvcmVhZDMyYmUoJmJtaV9yZy0+Zm1ibV9pZXIpOworCWV2ZW50 ICY9IG1hc2s7CisJLyogY2xlYXIgdGhlIGZvcmNlZCBldmVudHMgKi8KKwlmb3JjZSA9IGlvcmVh ZDMyYmUoJmJtaV9yZy0+Zm1ibV9pZnIpOworCWlmIChmb3JjZSAmIGV2ZW50KQorCQlpb3dyaXRl MzJiZShmb3JjZSAmIH5ldmVudCwgJmJtaV9yZy0+Zm1ibV9pZnIpOworCS8qIGNsZWFyIHRoZSBh Y2tub3dsZWRnZWQgZXZlbnRzICovCisJaW93cml0ZTMyYmUoZXZlbnQsICZibWlfcmctPmZtYm1f aWV2cik7CisJcmV0dXJuIGV2ZW50OworfQorCit1aW50MzJfdCBmbWFuX2dldF9xbWlfZXJyX2V2 ZW50KHN0cnVjdCBmbWFuX3FtaV9yZWdzIF9faW9tZW0gKnFtaV9yZykKK3sKKwl1aW50MzJfdCBl dmVudCwgbWFzaywgZm9yY2U7CisKKwlldmVudCA9IGlvcmVhZDMyYmUoJnFtaV9yZy0+Zm1xbV9l aWUpOworCW1hc2sgPSBpb3JlYWQzMmJlKCZxbWlfcmctPmZtcW1fZWllbik7CisJZXZlbnQgJj0g bWFzazsKKworCS8qIGNsZWFyIHRoZSBmb3JjZWQgZXZlbnRzICovCisJZm9yY2UgPSBpb3JlYWQz MmJlKCZxbWlfcmctPmZtcW1fZWlmKTsKKwlpZiAoZm9yY2UgJiBldmVudCkKKwkJaW93cml0ZTMy YmUoZm9yY2UgJiB+ZXZlbnQsICZxbWlfcmctPmZtcW1fZWlmKTsKKwkvKiBjbGVhciB0aGUgYWNr bm93bGVkZ2VkIGV2ZW50cyAqLworCWlvd3JpdGUzMmJlKGV2ZW50LCAmcW1pX3JnLT5mbXFtX2Vp ZSk7CisJcmV0dXJuIGV2ZW50OworfQorCit1aW50MzJfdCBmbWFuX2dldF9kbWFfY29tX2lkKHN0 cnVjdCBmbWFuX2RtYV9yZWdzIF9faW9tZW0gKmRtYV9yZykKK3sKKwlyZXR1cm4gaW9yZWFkMzJi ZSgmZG1hX3JnLT5mbWRtdGNpZCk7Cit9CisKK3VpbnQ2NF90IGZtYW5fZ2V0X2RtYV9hZGRyKHN0 cnVjdCBmbWFuX2RtYV9yZWdzIF9faW9tZW0gKmRtYV9yZykKK3sKKwl1aW50NjRfdCBhZGRyOwor CisJYWRkciA9ICh1aW50NjRfdClpb3JlYWQzMmJlKCZkbWFfcmctPmZtZG10YWwpOworCWFkZHIg fD0gKCh1aW50NjRfdCkoaW9yZWFkMzJiZSgmZG1hX3JnLT5mbWRtdGFoKSkgPDwgMzIpOworCisJ cmV0dXJuIGFkZHI7Cit9CisKK3VpbnQzMl90IGZtYW5fZ2V0X2RtYV9lcnJfZXZlbnQoc3RydWN0 IGZtYW5fZG1hX3JlZ3MgX19pb21lbSAqZG1hX3JnKQoreworCXVpbnQzMl90IHN0YXR1cywgbWFz azsKKworCXN0YXR1cyA9IGlvcmVhZDMyYmUoJmRtYV9yZy0+Zm1kbXNyKTsKKwltYXNrID0gaW9y ZWFkMzJiZSgmZG1hX3JnLT5mbWRtbXIpOworCisJLyogY2xlYXIgRE1BX1NUQVRVU19CVVNfRVJS IGlmIG1hc2sgaGFzIG5vIERNQV9NT0RFX0JFUiAqLworCWlmICgobWFzayAmIERNQV9NT0RFX0JF UikgIT0gRE1BX01PREVfQkVSKQorCQlzdGF0dXMgJj0gfkRNQV9TVEFUVVNfQlVTX0VSUjsKKwor CS8qIGNsZWFyIHJlbGV2YW50IGJpdHMgaWYgbWFzayBoYXMgbm8gRE1BX01PREVfRUNDICovCisJ aWYgKChtYXNrICYgRE1BX01PREVfRUNDKSAhPSBETUFfTU9ERV9FQ0MpCisJCXN0YXR1cyAmPSB+ KERNQV9TVEFUVVNfRk1fU1BEQVRfRUNDIHwKKwkJCSAgICBETUFfU1RBVFVTX1JFQURfRUNDIHwK KwkJCSAgICBETUFfU1RBVFVTX1NZU1RFTV9XUklURV9FQ0MgfAorCQkJICAgIERNQV9TVEFUVVNf Rk1fV1JJVEVfRUNDKTsKKworCS8qIGNsZWFyIHNldCBldmVudHMgKi8KKwlpb3dyaXRlMzJiZShz dGF0dXMsICZkbWFfcmctPmZtZG1zcik7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCit1aW50MzJf dCBmbWFuX2dldF9mcG1fZXJyX2V2ZW50KHN0cnVjdCBmbWFuX2ZwbV9yZWdzIF9faW9tZW0gKmZw bV9yZykKK3sKKwl1aW50MzJfdCBldmVudDsKKworCWV2ZW50ID0gaW9yZWFkMzJiZSgmZnBtX3Jn LT5mbWZwX2VlKTsKKwkvKiBjbGVhciB0aGUgYWxsIG9jY3VycmVkIGV2ZW50cyAqLworCWlvd3Jp dGUzMmJlKGV2ZW50LCAmZnBtX3JnLT5mbWZwX2VlKTsKKwlyZXR1cm4gZXZlbnQ7Cit9CisKK3Vp bnQzMl90IGZtYW5fZ2V0X211cmFtX2Vycl9ldmVudChzdHJ1Y3QgZm1hbl9mcG1fcmVncyBfX2lv bWVtICpmcG1fcmcpCit7CisJdWludDMyX3QgZXZlbnQsIG1hc2s7CisKKwlldmVudCA9IGlvcmVh ZDMyYmUoJmZwbV9yZy0+Zm1fcmNyKTsKKwltYXNrID0gaW9yZWFkMzJiZSgmZnBtX3JnLT5mbV9y aWUpOworCisJLyogY2xlYXIgTVVSQU0gZXZlbnQgYml0IChkbyBub3QgY2xlYXIgSVJBTSBldmVu dCkgKi8KKwlpb3dyaXRlMzJiZShldmVudCAmIH5GUE1fUkFNX0lSQU1fRUNDLCAmZnBtX3JnLT5m bV9yY3IpOworCisJaWYgKChtYXNrICYgRlBNX01VUkFNX0VDQ19FUlJfRVhfRU4pKQorCQlyZXR1 cm4gZXZlbnQ7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKwordWludDMyX3QgZm1hbl9nZXRfaXJh bV9lcnJfZXZlbnQoc3RydWN0IGZtYW5fZnBtX3JlZ3MgX19pb21lbSAqZnBtX3JnKQoreworCXVp bnQzMl90IGV2ZW50LCBtYXNrOworCisJZXZlbnQgPSBpb3JlYWQzMmJlKCZmcG1fcmctPmZtX3Jj cik7CisJbWFzayA9IGlvcmVhZDMyYmUoJmZwbV9yZy0+Zm1fcmllKTsKKwkvKiBjbGVhciBJUkFN IGV2ZW50IGJpdCAoZG8gbm90IGNsZWFyIE1VUkFNIGV2ZW50KSAqLworCWlvd3JpdGUzMmJlKGV2 ZW50ICYgfkZQTV9SQU1fTVVSQU1fRUNDLCAmZnBtX3JnLT5mbV9yY3IpOworCisJaWYgKChtYXNr ICYgRlBNX0lSQU1fRUNDX0VSUl9FWF9FTikpCisJCXJldHVybiBldmVudDsKKwllbHNlCisJCXJl dHVybiAwOworfQorCit1aW50MzJfdCBmbWFuX2dldF9xbWlfZXZlbnQoc3RydWN0IGZtYW5fcW1p X3JlZ3MgX19pb21lbSAqcW1pX3JnKQoreworCXVpbnQzMl90IGV2ZW50LCBtYXNrLCBmb3JjZTsK KworCWV2ZW50ID0gaW9yZWFkMzJiZSgmcW1pX3JnLT5mbXFtX2llKTsKKwltYXNrID0gaW9yZWFk MzJiZSgmcW1pX3JnLT5mbXFtX2llbik7CisJZXZlbnQgJj0gbWFzazsKKwkvKiBjbGVhciB0aGUg Zm9yY2VkIGV2ZW50cyAqLworCWZvcmNlID0gaW9yZWFkMzJiZSgmcW1pX3JnLT5mbXFtX2lmKTsK KwlpZiAoZm9yY2UgJiBldmVudCkKKwkJaW93cml0ZTMyYmUoZm9yY2UgJiB+ZXZlbnQsICZxbWlf cmctPmZtcW1faWYpOworCS8qIGNsZWFyIHRoZSBhY2tub3dsZWRnZWQgZXZlbnRzICovCisJaW93 cml0ZTMyYmUoZXZlbnQsICZxbWlfcmctPmZtcW1faWUpOworCXJldHVybiBldmVudDsKK30KKwor dm9pZCBmbWFuX2VuYWJsZV90aW1lX3N0YW1wKHN0cnVjdCBmbWFuX2ZwbV9yZWdzIF9faW9tZW0g KmZwbV9yZywKKwkJCSAgICB1aW50OF90IGNvdW50MXViaXQsIHVpbnQxNl90IGZtX2Nsa19mcmVx KQoreworCXVpbnQzMl90IHRtcDsKKwl1aW50NjRfdCBmcmFjOworCXVpbnQzMl90IGludGdyOwor CXVpbnQzMl90IHRzX2ZyZXEgPSAodWludDMyX3QpKDEgPDwgY291bnQxdWJpdCk7CS8qIGluIE1o eiAqLworCisJLyogY29uZmlndXJlIHRpbWVzdGFtcCBzbyB0aGF0IGJpdCA4IHdpbGwgY291bnQg MSBtaWNyb3NlY29uZAorCSAqIEZpbmQgZWZmZWN0aXZlIGNvdW50IHJhdGUgYXQgVElNRVNUQU1Q IGxlYXN0IHNpZ25pZmljYW50IGJpdHM6CisJICogRWZmZWN0aXZlX0NvdW50X1JhdGUgPSAxTUh6 IHggMl44ID0gMjU2TUh6CisJICogRmluZCBmcmVxdWVuY3kgcmF0aW8gYmV0d2VlbiBlZmZlY3Rp dmUgY291bnQgcmF0ZSBhbmQgdGhlIGNsb2NrOgorCSAqIEVmZmVjdGl2ZV9Db3VudF9SYXRlIC8g Q0xLIGUuZy4gZm9yIDYwMCBNSHogY2xvY2s6CisJICogMjU2LzYwMCA9IDAuNDI2NjY2Ni4uLgor CSAqLworCisJaW50Z3IgPSB0c19mcmVxIC8gZm1fY2xrX2ZyZXE7CisJLyogd2UgbXVsdGlwbHkg YnkgMl4xNiB0byBrZWVwIHRoZSBmcmFjdGlvbiBvZiB0aGUgZGl2aXNpb24KKwkgKiB3ZSBkbyBu b3QgZGl2IGJhY2ssIHNpbmNlIHdlIHdyaXRlIHRoaXMgdmFsdWUgYXMgYSBmcmFjdGlvbgorCSAq IHNlZSBzcGVjCisJICovCisKKwlmcmFjID0gKCh0c19mcmVxIDw8IDE2KSAtIChpbnRnciA8PCAx NikgKiBmbV9jbGtfZnJlcSkgLyBmbV9jbGtfZnJlcTsKKwkvKiB3ZSBjaGVjayByZW1haW5kZXIg b2YgdGhlIGRpdmlzaW9uIGluIG9yZGVyIHRvIHJvdW5kIHVwIGlmIG5vdCBpbnQgKi8KKwlpZiAo KCh0c19mcmVxIDw8IDE2KSAtIChpbnRnciA8PCAxNikgKiBmbV9jbGtfZnJlcSkgJSBmbV9jbGtf ZnJlcSkKKwkJZnJhYysrOworCisJdG1wID0gKGludGdyIDw8IEZQTV9UU19JTlRfU0hJRlQpIHwg KHVpbnQxNl90KWZyYWM7CisJaW93cml0ZTMyYmUodG1wLCAmZnBtX3JnLT5mbWZwX3RzYzIpOwor CisJLyogZW5hYmxlIHRpbWVzdGFtcCB3aXRoIG9yaWdpbmFsIGNsb2NrICovCisJaW93cml0ZTMy YmUoRlBNX1RTX0NUTF9FTiwgJmZwbV9yZy0+Zm1mcF90c2MxKTsKK30KKwordWludDMyX3QgZm1h bl9nZXRfZnBtX2Vycm9yX2ludGVycnVwdHMoc3RydWN0IGZtYW5fZnBtX3JlZ3MgX19pb21lbSAq ZnBtX3JnKQoreworCXJldHVybiBpb3JlYWQzMmJlKCZmcG1fcmctPmZtX2VwaSk7Cit9CisKK2lu dCBmbWFuX3NldF9lcnJhdHVtXzEwZ21hY19hMDA0X3dhKHN0cnVjdCBmbWFuX2ZwbV9yZWdzIF9f aW9tZW0gKmZwbV9yZykKK3sKKwlpbnQgdGltZW91dCA9IDEwMDsKKworCWlvd3JpdGUzMmJlKDB4 NDAwMDAwMDAsICZmcG1fcmctPmZtZnBfZXh0Yyk7CisKKwl3aGlsZSAoKGlvcmVhZDMyYmUoJmZw bV9yZy0+Zm1mcF9leHRjKSAmIDB4NDAwMDAwMDApICYmIC0tdGltZW91dCkKKwkJdXNsZWVwX3Jh bmdlKDEwLCAxMSk7CisKKwlpZiAoIXRpbWVvdXQpCisJCXJldHVybiAtRUlPOworCXJldHVybiAw OworfQorCit2b2lkIGZtYW5fc2V0X29yZGVyX3Jlc3RvcmF0aW9uX3Blcl9wb3J0KHN0cnVjdCBm bWFuX2ZwbV9yZWdzIF9faW9tZW0gKmZwbV9yZywKKwkJCQkJIHVpbnQ4X3QgcG9ydF9pZCwgYm9v bCBpc19yeF9wb3J0KQoreworCXVpbnQzMl90IHRtcCA9IDA7CisKKwl0bXAgPSAodWludDMyX3Qp KHBvcnRfaWQgPDwgRlBNX1BPUlRfRk1fQ1RMX1BPUlRJRF9TSElGVCk7CisKKwl0bXAgfD0gKEZQ TV9QUlRfRk1fQ1RMMiB8IEZQTV9QUlRfRk1fQ1RMMSk7CisKKwkvKiBvcmRlciByZXN0b3JhdGlv biAqLworCWlmIChwb3J0X2lkICUgMikKKwkJdG1wIHw9IChGUE1fUFJUX0ZNX0NUTDEgPDwgRlBN X1BSQ19PUkFfRk1fQ1RMX1NFTF9TSElGVCk7CisJZWxzZQorCQl0bXAgfD0gKEZQTV9QUlRfRk1f Q1RMMiA8PCBGUE1fUFJDX09SQV9GTV9DVExfU0VMX1NISUZUKTsKKworCWlvd3JpdGUzMmJlKHRt cCwgJmZwbV9yZy0+Zm1mcF9wcmMpOworfQorCit1aW50OF90IGZtYW5fZ2V0X3FtaV9kZXFfdGgo c3RydWN0IGZtYW5fcW1pX3JlZ3MgX19pb21lbSAqcW1pX3JnKQoreworCXJldHVybiAodWludDhf dClpb3JlYWQzMmJlKCZxbWlfcmctPmZtcW1fZ2MpOworfQorCit1aW50OF90IGZtYW5fZ2V0X3Ft aV9lbnFfdGgoc3RydWN0IGZtYW5fcW1pX3JlZ3MgX19pb21lbSAqcW1pX3JnKQoreworCXJldHVy biAodWludDhfdCkoaW9yZWFkMzJiZSgmcW1pX3JnLT5mbXFtX2djKSA+PiA4KTsKK30KKwordm9p ZCBmbWFuX3NldF9xbWlfZW5xX3RoKHN0cnVjdCBmbWFuX3FtaV9yZWdzIF9faW9tZW0gKnFtaV9y ZywgdWludDhfdCB2YWwpCit7CisJdWludDMyX3QgdG1wX3JlZzsKKworCXRtcF9yZWcgPSBpb3Jl YWQzMmJlKCZxbWlfcmctPmZtcW1fZ2MpOworCXRtcF9yZWcgJj0gflFNSV9DRkdfRU5RX01BU0s7 CisJdG1wX3JlZyB8PSAoKHVpbnQzMl90KXZhbCA8PCA4KTsKKwlpb3dyaXRlMzJiZSh0bXBfcmVn LCAmcW1pX3JnLT5mbXFtX2djKTsKK30KKwordm9pZCBmbWFuX3NldF9xbWlfZGVxX3RoKHN0cnVj dCBmbWFuX3FtaV9yZWdzIF9faW9tZW0gKnFtaV9yZywgdWludDhfdCB2YWwpCit7CisJdWludDMy X3QgdG1wX3JlZzsKKworCXRtcF9yZWcgPSBpb3JlYWQzMmJlKCZxbWlfcmctPmZtcW1fZ2MpOwor CXRtcF9yZWcgJj0gflFNSV9DRkdfREVRX01BU0s7CisJdG1wX3JlZyB8PSAodWludDMyX3QpdmFs OworCWlvd3JpdGUzMmJlKHRtcF9yZWcsICZxbWlfcmctPmZtcW1fZ2MpOworfQorCit2b2lkIGZt YW5fc2V0X2xpb2RuX3Blcl9wb3J0KHN0cnVjdCBmbWFuX3JnICpmbWFuX3JnLCB1aW50OF90IHBv cnRfaWQsCisJCQkgICAgIHVpbnQxNl90IGxpb2RuX2Jhc2UsIHVpbnQxNl90IGxpb2RuX29mc3Qp Cit7CisJdWludDMyX3QgdG1wOworCisJLyogc2V0IExJT0ROIGJhc2UgZm9yIHRoaXMgcG9ydCAq LworCXRtcCA9IGlvcmVhZDMyYmUoJmZtYW5fcmctPmRtYV9yZy0+Zm1kbXBscltwb3J0X2lkIC8g Ml0pOworCWlmIChwb3J0X2lkICUgMikgeworCQl0bXAgJj0gfkZNX0xJT0ROX0JBU0VfTUFTSzsK KwkJdG1wIHw9ICh1aW50MzJfdClsaW9kbl9iYXNlOworCX0gZWxzZSB7CisJCXRtcCAmPSB+KEZN X0xJT0ROX0JBU0VfTUFTSyA8PCBETUFfTElPRE5fU0hJRlQpOworCQl0bXAgfD0gKHVpbnQzMl90 KWxpb2RuX2Jhc2UgPDwgRE1BX0xJT0ROX1NISUZUOworCX0KKwlpb3dyaXRlMzJiZSh0bXAsICZm bWFuX3JnLT5kbWFfcmctPmZtZG1wbHJbcG9ydF9pZCAvIDJdKTsKKwlpb3dyaXRlMzJiZSgodWlu dDMyX3QpbGlvZG5fb2ZzdCwKKwkJICAgICZmbWFuX3JnLT5ibWlfcmctPmZtYm1fc3BsaW9kbltw b3J0X2lkIC0gMV0pOworfQorCitpbnQgZm1hbl9yZXNldF9tYWMoc3RydWN0IGZtYW5fZnBtX3Jl Z3MgX19pb21lbSAqZnBtX3JnLCB1aW50OF90IG1hY19pZCkKK3sKKwl1aW50MzJfdCBtc2ssIHRp bWVvdXQgPSAxMDA7CisKKwkvKiBHZXQgdGhlIHJlbGV2YW50IGJpdCBtYXNrICovCisJc3dpdGNo IChtYWNfaWQpIHsKKwljYXNlIDA6CisJCW1zayA9IEZQTV9SU1RDX01BQzBfUkVTRVQ7CisJCWJy ZWFrOworCWNhc2UgMToKKwkJbXNrID0gRlBNX1JTVENfTUFDMV9SRVNFVDsKKwkJYnJlYWs7CisJ Y2FzZSAyOgorCQltc2sgPSBGUE1fUlNUQ19NQUMyX1JFU0VUOworCQlicmVhazsKKwljYXNlIDM6 CisJCW1zayA9IEZQTV9SU1RDX01BQzNfUkVTRVQ7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJbXNr ID0gRlBNX1JTVENfTUFDNF9SRVNFVDsKKwkJYnJlYWs7CisJY2FzZSA1OgorCQltc2sgPSBGUE1f UlNUQ19NQUM1X1JFU0VUOworCQlicmVhazsKKwljYXNlIDY6CisJCW1zayA9IEZQTV9SU1RDX01B QzZfUkVTRVQ7CisJCWJyZWFrOworCWNhc2UgNzoKKwkJbXNrID0gRlBNX1JTVENfTUFDN19SRVNF VDsKKwkJYnJlYWs7CisJY2FzZSA4OgorCQltc2sgPSBGUE1fUlNUQ19NQUM4X1JFU0VUOworCQli cmVhazsKKwljYXNlIDk6CisJCW1zayA9IEZQTV9SU1RDX01BQzlfUkVTRVQ7CisJCWJyZWFrOwor CWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIHJlc2V0ICovCisJaW93cml0 ZTMyYmUobXNrLCAmZnBtX3JnLT5mbV9yc3RjKTsKKwl3aGlsZSAoKGlvcmVhZDMyYmUoJmZwbV9y Zy0+Zm1fcnN0YykgJiBtc2spICYmIC0tdGltZW91dCkKKwkJdXNsZWVwX3JhbmdlKDEwLCAxMSk7 CisKKwlpZiAoIXRpbWVvdXQpCisJCXJldHVybiAtRUlPOworCXJldHVybiAwOworfQorCit1aW50 MTZfdCBmbWFuX2dldF9zaXplX29mX2ZpZm8oc3RydWN0IGZtYW5fYm1pX3JlZ3MgX19pb21lbSAq Ym1pX3JnLAorCQkJICAgICAgIHVpbnQ4X3QgcG9ydF9pZCkKK3sKKwl1aW50MzJfdCB0bXBfcmVn OworCisJdG1wX3JlZyA9IGlvcmVhZDMyYmUoJmJtaV9yZy0+Zm1ibV9wZnNbcG9ydF9pZCAtIDFd KTsKKwlyZXR1cm4gKHVpbnQxNl90KSgodG1wX3JlZyAmIEJNSV9GSUZPX1NJWkVfTUFTSykgKyAx KTsKK30KKwordWludDE2X3QgZm1hbl9nZXRfc2l6ZV9vZl9leHRyYV9maWZvKHN0cnVjdCBmbWFu X2JtaV9yZWdzIF9faW9tZW0gKmJtaV9yZywKKwkJCQkgICAgIHVpbnQ4X3QgcG9ydF9pZCkKK3sK Kwl1aW50MzJfdCB0bXBfcmVnOworCisJdG1wX3JlZyA9IGlvcmVhZDMyYmUoJmJtaV9yZy0+Zm1i bV9wZnNbcG9ydF9pZCAtIDFdKTsKKwlyZXR1cm4gKHVpbnQxNl90KSgodG1wX3JlZyAmIEJNSV9F WFRSQV9GSUZPX1NJWkVfTUFTSykgPj4KKwkJCSAgIEJNSV9FWFRSQV9GSUZPX1NJWkVfU0hJRlQp OworfQorCit2b2lkIGZtYW5fc2V0X3NpemVfb2ZfZmlmbyhzdHJ1Y3QgZm1hbl9ibWlfcmVncyBf X2lvbWVtICpibWlfcmcsCisJCQkgICB1aW50OF90IHBvcnRfaWQsIHVpbnQzMl90IHN6X2ZpZm8s CisJCQkgICB1aW50MzJfdCBleHRyYV9zel9maWZvKQoreworCXVpbnQzMl90IHRtcDsKKworCS8q IGNhbGN1bGF0ZSByZWcgKi8KKwl0bXAgPSAodWludDMyX3QpKChzel9maWZvIC8gRk1BTl9CTUlf RklGT19VTklUUyAtIDEpIHwKKwkJCSAgKChleHRyYV9zel9maWZvIC8gRk1BTl9CTUlfRklGT19V TklUUykgPDwKKwkJCSAgIEJNSV9FWFRSQV9GSUZPX1NJWkVfU0hJRlQpKTsKKwlpb3dyaXRlMzJi ZSh0bXAsICZibWlfcmctPmZtYm1fcGZzW3BvcnRfaWQgLSAxXSk7Cit9CisKK3VpbnQ4X3QgZm1h bl9nZXRfbnVtX29mX3Rhc2tzKHN0cnVjdCBmbWFuX2JtaV9yZWdzIF9faW9tZW0gKmJtaV9yZywK KwkJCSAgICAgIHVpbnQ4X3QgcG9ydF9pZCkKK3sKKwl1aW50MzJfdCB0bXA7CisKKwl0bXAgPSBp b3JlYWQzMmJlKCZibWlfcmctPmZtYm1fcHBbcG9ydF9pZCAtIDFdKTsKKwlyZXR1cm4gKHVpbnQ4 X3QpKCgodG1wICYgQk1JX05VTV9PRl9UQVNLU19NQVNLKSA+PgorCQkJICAgQk1JX05VTV9PRl9U QVNLU19TSElGVCkgKyAxKTsKK30KKwordWludDhfdCBmbWFuX2dldF9udW1fZXh0cmFfdGFza3Mo c3RydWN0IGZtYW5fYm1pX3JlZ3MgX19pb21lbSAqYm1pX3JnLAorCQkJCSB1aW50OF90IHBvcnRf aWQpCit7CisJdWludDMyX3QgdG1wOworCisJdG1wID0gaW9yZWFkMzJiZSgmYm1pX3JnLT5mbWJt X3BwW3BvcnRfaWQgLSAxXSk7CisJcmV0dXJuICh1aW50OF90KSgodG1wICYgQk1JX05VTV9PRl9F WFRSQV9UQVNLU19NQVNLKSA+PgorCQkJICBCTUlfRVhUUkFfTlVNX09GX1RBU0tTX1NISUZUKTsK K30KKwordm9pZCBmbWFuX3NldF9udW1fb2ZfdGFza3Moc3RydWN0IGZtYW5fYm1pX3JlZ3MgX19p b21lbSAqYm1pX3JnLAorCQkJICAgdWludDhfdCBwb3J0X2lkLCB1aW50OF90IG51bV90YXNrcywK KwkJCSAgIHVpbnQ4X3QgbnVtX2V4dHJhX3Rhc2tzKQoreworCXVpbnQzMl90IHRtcDsKKworCS8q IGNhbGN1bGF0ZSByZWcgKi8KKwl0bXAgPSBpb3JlYWQzMmJlKCZibWlfcmctPmZtYm1fcHBbcG9y dF9pZCAtIDFdKSAmCisJICAgIH4oQk1JX05VTV9PRl9UQVNLU19NQVNLIHwgQk1JX05VTV9PRl9F WFRSQV9UQVNLU19NQVNLKTsKKwl0bXAgfD0gKCh1aW50MzJfdCkoKG51bV90YXNrcyAtIDEpIDw8 IEJNSV9OVU1fT0ZfVEFTS1NfU0hJRlQpIHwKKwkJKHVpbnQzMl90KShudW1fZXh0cmFfdGFza3Mg PDwgQk1JX0VYVFJBX05VTV9PRl9UQVNLU19TSElGVCkpOworCWlvd3JpdGUzMmJlKHRtcCwgJmJt aV9yZy0+Zm1ibV9wcFtwb3J0X2lkIC0gMV0pOworfQorCit1aW50OF90IGZtYW5fZ2V0X251bV9v Zl9kbWFzKHN0cnVjdCBmbWFuX2JtaV9yZWdzIF9faW9tZW0gKmJtaV9yZywKKwkJCSAgICAgdWlu dDhfdCBwb3J0X2lkKQoreworCXVpbnQzMl90IHRtcDsKKworCXRtcCA9IGlvcmVhZDMyYmUoJmJt aV9yZy0+Zm1ibV9wcFtwb3J0X2lkIC0gMV0pOworCXJldHVybiAodWludDhfdCkoKCh0bXAgJiBC TUlfTlVNX09GX0RNQVNfTUFTSykgPj4KKwkJCSAgIEJNSV9OVU1fT0ZfRE1BU19TSElGVCkgKyAx KTsKK30KKwordWludDhfdCBmbWFuX2dldF9udW1fZXh0cmFfZG1hcyhzdHJ1Y3QgZm1hbl9ibWlf cmVncyBfX2lvbWVtICpibWlfcmcsCisJCQkJdWludDhfdCBwb3J0X2lkKQoreworCXVpbnQzMl90 IHRtcDsKKworCXRtcCA9IGlvcmVhZDMyYmUoJmJtaV9yZy0+Zm1ibV9wcFtwb3J0X2lkIC0gMV0p OworCXJldHVybiAodWludDhfdCkoKHRtcCAmIEJNSV9OVU1fT0ZfRVhUUkFfRE1BU19NQVNLKSA+ PgorCQkJICBCTUlfRVhUUkFfTlVNX09GX0RNQVNfU0hJRlQpOworfQorCit2b2lkIGZtYW5fc2V0 X251bV9vZl9vcGVuX2RtYXMoc3RydWN0IGZtYW5fYm1pX3JlZ3MgX19pb21lbSAqYm1pX3JnLAor CQkJICAgICAgIHVpbnQ4X3QgcG9ydF9pZCwgdWludDhfdCBudW1fb3Blbl9kbWFzLAorCQkJICAg ICAgIHVpbnQ4X3QgbnVtX2V4dHJhX29wZW5fZG1hcywKKwkJCSAgICAgICB1aW50OF90IHRvdGFs X251bV9kbWFzKQoreworCXVpbnQzMl90IHRtcCA9IDA7CisKKwkvKiBjYWxjdWxhdGUgcmVnICov CisJdG1wID0gaW9yZWFkMzJiZSgmYm1pX3JnLT5mbWJtX3BwW3BvcnRfaWQgLSAxXSkgJgorCSAg ICB+KEJNSV9OVU1fT0ZfRE1BU19NQVNLIHwgQk1JX05VTV9PRl9FWFRSQV9ETUFTX01BU0spOwor CXRtcCB8PSAodWludDMyX3QpKCgobnVtX29wZW5fZG1hcyAtIDEpIDw8IEJNSV9OVU1fT0ZfRE1B U19TSElGVCkgfAorCQkJICAgKG51bV9leHRyYV9vcGVuX2RtYXMgPDwKKwkJCSAgICBCTUlfRVhU UkFfTlVNX09GX0RNQVNfU0hJRlQpKTsKKwlpb3dyaXRlMzJiZSh0bXAsICZibWlfcmctPmZtYm1f cHBbcG9ydF9pZCAtIDFdKTsKKworCS8qIHVwZGF0ZSB0b3RhbCBudW0gb2YgRE1BJ3Mgd2l0aCBj b21taXR0ZWQgbnVtYmVyIG9mIG9wZW4gRE1BUywKKwkgKiBhbmQgbWF4IHVuY29tbWl0dGVkIHBv b2wuCisJICovCisJaWYgKHRvdGFsX251bV9kbWFzKSB7CisJCXRtcCA9IGlvcmVhZDMyYmUoJmJt aV9yZy0+Zm1ibV9jZmcyKSAmIH5CTUlfQ0ZHMl9ETUFTX01BU0s7CisJCXRtcCB8PSAodWludDMy X3QpKHRvdGFsX251bV9kbWFzIC0gMSkgPDwgQk1JX0NGRzJfRE1BU19TSElGVDsKKwkJaW93cml0 ZTMyYmUodG1wLCAmYm1pX3JnLT5mbWJtX2NmZzIpOworCX0KK30KKworLyogQVBJIEluaXQgdW5p dCBmdW5jdGlvbnMgKi8KKwordm9pZCBmbWFuX2RlZmNvbmZpZyhzdHJ1Y3QgZm1hbl9jZmcgKmNm ZykKK3sKKwltZW1zZXQoY2ZnLCAwLCBzaXplb2Yoc3RydWN0IGZtYW5fY2ZnKSk7CisKKwljZmct PmNhdGFzdHJvcGhpY19lcnIgPSBERUZBVUxUX0NBVEFTVFJPUEhJQ19FUlI7CisJY2ZnLT5kbWFf ZXJyID0gREVGQVVMVF9ETUFfRVJSOworCWNmZy0+aGFsdF9vbl9leHRlcm5hbF9hY3RpdiA9IERF RkFVTFRfSEFMVF9PTl9FWFRFUk5BTF9BQ1RJVkFUSU9OOworCWNmZy0+aGFsdF9vbl91bnJlY292 X2VjY19lcnIgPSBERUZBVUxUX0hBTFRfT05fVU5SRUNPVkVSQUJMRV9FQ0NfRVJST1I7CisJY2Zn LT5lbl9pcmFtX3Rlc3RfbW9kZSA9IGZhbHNlOworCWNmZy0+ZW5fbXVyYW1fdGVzdF9tb2RlID0g ZmFsc2U7CisJY2ZnLT5leHRlcm5hbF9lY2NfcmFtc19lbmFibGUgPSBERUZBVUxUX0VYVEVSTkFM X0VDQ19SQU1TX0VOQUJMRTsKKworCWNmZy0+ZG1hX2FpZF9vdmVycmlkZSA9IERFRkFVTFRfQUlE X09WRVJSSURFOworCWNmZy0+ZG1hX2FpZF9tb2RlID0gREVGQVVMVF9BSURfTU9ERTsKKwljZmct PmRtYV9jb21tX3F0c2hfY2xyX2VtZXIgPSBERUZBVUxUX0RNQV9DT01NX1FfTE9XOworCWNmZy0+ ZG1hX2NvbW1fcXRzaF9hc3J0X2VtZXIgPSBERUZBVUxUX0RNQV9DT01NX1FfSElHSDsKKwljZmct PmRtYV9jYWNoZV9vdmVycmlkZSA9IERFRkFVTFRfQ0FDSEVfT1ZFUlJJREU7CisJY2ZnLT5kbWFf Y2FtX251bV9vZl9lbnRyaWVzID0gREVGQVVMVF9ETUFfQ0FNX05VTV9PRl9FTlRSSUVTOworCWNm Zy0+ZG1hX2RiZ19jbnRfbW9kZSA9IERFRkFVTFRfRE1BX0RCR19DTlRfTU9ERTsKKwljZmctPmRt YV9lbl9lbWVyZ2VuY3kgPSBERUZBVUxUX0RNQV9FTl9FTUVSR0VOQ1k7CisJY2ZnLT5kbWFfc29z X2VtZXJnZW5jeSA9IERFRkFVTFRfRE1BX1NPU19FTUVSR0VOQ1k7CisJY2ZnLT5kbWFfd2F0Y2hk b2cgPSBERUZBVUxUX0RNQV9XQVRDSERPRzsKKwljZmctPmRtYV9lbl9lbWVyZ2VuY3lfc21vb3Ro ZXIgPSBERUZBVUxUX0RNQV9FTl9FTUVSR0VOQ1lfU01PT1RIRVI7CisJY2ZnLT5kbWFfZW1lcmdl bmN5X3N3aXRjaF9jb3VudGVyID0KKwkgICAgREVGQVVMVF9ETUFfRU1FUkdFTkNZX1NXSVRDSF9D T1VOVEVSOworCWNmZy0+ZGlzcF9saW1pdF90c2ggPSBERUZBVUxUX0RJU1BfTElNSVQ7CisJY2Zn LT5wcnNfZGlzcF90c2ggPSBERUZBVUxUX1BSU19ESVNQX1RIOworCWNmZy0+cGxjcl9kaXNwX3Rz aCA9IERFRkFVTFRfUExDUl9ESVNQX1RIOworCWNmZy0+a2dfZGlzcF90c2ggPSBERUZBVUxUX0tH X0RJU1BfVEg7CisJY2ZnLT5ibWlfZGlzcF90c2ggPSBERUZBVUxUX0JNSV9ESVNQX1RIOworCWNm Zy0+cW1pX2VucV9kaXNwX3RzaCA9IERFRkFVTFRfUU1JX0VOUV9ESVNQX1RIOworCWNmZy0+cW1p X2RlcV9kaXNwX3RzaCA9IERFRkFVTFRfUU1JX0RFUV9ESVNQX1RIOworCWNmZy0+Zm1fY3RsMV9k aXNwX3RzaCA9IERFRkFVTFRfRk1fQ1RMMV9ESVNQX1RIOworCWNmZy0+Zm1fY3RsMl9kaXNwX3Rz aCA9IERFRkFVTFRfRk1fQ1RMMl9ESVNQX1RIOworCisJY2ZnLT5wZWRhbnRpY19kbWEgPSBmYWxz ZTsKKwljZmctPnRudW1fYWdpbmdfcGVyaW9kID0gREVGQVVMVF9UTlVNX0FHSU5HX1BFUklPRDsK KwljZmctPmRtYV9zdG9wX29uX2J1c19lcnJvciA9IGZhbHNlOworCWNmZy0+cW1pX2RlcV9vcHRp b25fc3VwcG9ydCA9IGZhbHNlOworfQorCitpbnQgZm1hbl9kbWFfaW5pdChzdHJ1Y3QgZm1hbl9k bWFfcmVncyBfX2lvbWVtICpkbWFfcmcsIHN0cnVjdCBmbWFuX2NmZyAqY2ZnKQoreworCXVpbnQz Ml90IHRtcF9yZWc7CisKKwkvKiBJbml0IERNQSBSZWdpc3RlcnMgKi8KKworCS8qIGNsZWFyIHN0 YXR1cyByZWcgZXZlbnRzICovCisJdG1wX3JlZyA9IChETUFfU1RBVFVTX0JVU19FUlIgfCBETUFf U1RBVFVTX1JFQURfRUNDIHwKKwkJICAgRE1BX1NUQVRVU19TWVNURU1fV1JJVEVfRUNDIHwgRE1B X1NUQVRVU19GTV9XUklURV9FQ0MpOworCWlvd3JpdGUzMmJlKGlvcmVhZDMyYmUoJmRtYV9yZy0+ Zm1kbXNyKSB8IHRtcF9yZWcsICZkbWFfcmctPmZtZG1zcik7CisKKwkvKiBjb25maWd1cmUgbW9k ZSByZWdpc3RlciAqLworCXRtcF9yZWcgPSAwOworCXRtcF9yZWcgfD0gY2ZnLT5kbWFfY2FjaGVf b3ZlcnJpZGUgPDwgRE1BX01PREVfQ0FDSEVfT1JfU0hJRlQ7CisJaWYgKGNmZy0+ZG1hX2FpZF9v dmVycmlkZSkKKwkJdG1wX3JlZyB8PSBETUFfTU9ERV9BSURfT1I7CisJaWYgKGNmZy0+ZXhjZXB0 aW9ucyAmIEZNQU5fRVhfRE1BX0JVU19FUlJPUikKKwkJdG1wX3JlZyB8PSBETUFfTU9ERV9CRVI7 CisJaWYgKChjZmctPmV4Y2VwdGlvbnMgJiBGTUFOX0VYX0RNQV9TWVNURU1fV1JJVEVfRUNDKSB8 CisJICAgIChjZmctPmV4Y2VwdGlvbnMgJiBGTUFOX0VYX0RNQV9SRUFEX0VDQykgfAorCSAgICAo Y2ZnLT5leGNlcHRpb25zICYgRk1BTl9FWF9ETUFfRk1fV1JJVEVfRUNDKSkKKwkJdG1wX3JlZyB8 PSBETUFfTU9ERV9FQ0M7CisJaWYgKGNmZy0+ZG1hX3N0b3Bfb25fYnVzX2Vycm9yKQorCQl0bXBf cmVnIHw9IERNQV9NT0RFX1NCRVI7CisJaWYgKGNmZy0+ZG1hX2F4aV9kYmdfbnVtX29mX2JlYXRz KQorCQl0bXBfcmVnIHw9ICh1aW50MzJfdCkoRE1BX01PREVfQVhJX0RCR19NQVNLICYKKwkJCQkg ICAgICAgKChjZmctPmRtYV9heGlfZGJnX251bV9vZl9iZWF0cyAtCisJCQkJCSAxKSA8PCBETUFf TU9ERV9BWElfREJHX1NISUZUKSk7CisKKwlpZiAoY2ZnLT5kbWFfZW5fZW1lcmdlbmN5KSB7CisJ CXRtcF9yZWcgfD0gY2ZnLT5kbWFfZW1lcmdlbmN5X2J1c19zZWxlY3Q7CisJCXRtcF9yZWcgfD0g Y2ZnLT5kbWFfZW1lcmdlbmN5X2xldmVsIDw8IERNQV9NT0RFX0VNRVJfTFZMX1NISUZUOworCQlp ZiAoY2ZnLT5kbWFfZW5fZW1lcmdlbmN5X3Ntb290aGVyKQorCQkJaW93cml0ZTMyYmUoY2ZnLT5k bWFfZW1lcmdlbmN5X3N3aXRjaF9jb3VudGVyLAorCQkJCSAgICAmZG1hX3JnLT5mbWRtZW1zcik7 CisJfQorCXRtcF9yZWcgfD0gKChjZmctPmRtYV9jYW1fbnVtX29mX2VudHJpZXMgLyBETUFfQ0FN X1VOSVRTKSAtIDEpIDw8CisJICAgIERNQV9NT0RFX0NFTl9TSElGVDsKKwl0bXBfcmVnIHw9IERN QV9NT0RFX1NFQ1VSRV9QUk9UOworCXRtcF9yZWcgfD0gY2ZnLT5kbWFfZGJnX2NudF9tb2RlIDw8 IERNQV9NT0RFX0RCR19TSElGVDsKKwl0bXBfcmVnIHw9IGNmZy0+ZG1hX2FpZF9tb2RlIDw8IERN QV9NT0RFX0FJRF9NT0RFX1NISUZUOworCisJaWYgKGNmZy0+cGVkYW50aWNfZG1hKQorCQl0bXBf cmVnIHw9IERNQV9NT0RFX0VNRVJfUkVBRDsKKworCWlvd3JpdGUzMmJlKHRtcF9yZWcsICZkbWFf cmctPmZtZG1tcik7CisKKwkvKiBjb25maWd1cmUgdGhyZXNob2xkcyByZWdpc3RlciAqLworCXRt cF9yZWcgPSAoKHVpbnQzMl90KWNmZy0+ZG1hX2NvbW1fcXRzaF9hc3J0X2VtZXIgPDwKKwkJICAg RE1BX1RIUkVTSF9DT01NUV9TSElGVCkgfAorCSAgICAoKHVpbnQzMl90KWNmZy0+ZG1hX3JlYWRf YnVmX3RzaF9hc3J0X2VtZXIgPDwKKwkgICAgIERNQV9USFJFU0hfUkVBRF9JTlRfQlVGX1NISUZU KSB8CisJICAgICgodWludDMyX3QpY2ZnLT5kbWFfd3JpdGVfYnVmX3RzaF9hc3J0X2VtZXIpOwor CisJaW93cml0ZTMyYmUodG1wX3JlZywgJmRtYV9yZy0+Zm1kbXRyKTsKKworCS8qIGNvbmZpZ3Vy ZSBoeXN0ZXJlc2lzIHJlZ2lzdGVyICovCisJdG1wX3JlZyA9ICgodWludDMyX3QpY2ZnLT5kbWFf Y29tbV9xdHNoX2Nscl9lbWVyIDw8CisJCSAgIERNQV9USFJFU0hfQ09NTVFfU0hJRlQpIHwKKwkg ICAgKCh1aW50MzJfdCljZmctPmRtYV9yZWFkX2J1Zl90c2hfY2xyX2VtZXIgPDwKKwkgICAgIERN QV9USFJFU0hfUkVBRF9JTlRfQlVGX1NISUZUKSB8CisJICAgICgodWludDMyX3QpY2ZnLT5kbWFf d3JpdGVfYnVmX3RzaF9jbHJfZW1lcik7CisKKwlpb3dyaXRlMzJiZSh0bXBfcmVnLCAmZG1hX3Jn LT5mbWRtaHkpOworCisJLyogY29uZmlndXJlIGVtZXJnZW5jeSB0aHJlc2hvbGQgKi8KKwlpb3dy aXRlMzJiZShjZmctPmRtYV9zb3NfZW1lcmdlbmN5LCAmZG1hX3JnLT5mbWRtc2V0cik7CisKKwkv KiBjb25maWd1cmUgV2F0Y2hkb2cgKi8KKwlpb3dyaXRlMzJiZSgoY2ZnLT5kbWFfd2F0Y2hkb2cg KiBjZmctPmNsa19mcmVxKSwgJmRtYV9yZy0+Zm1kbXdjcik7CisKKwlpb3dyaXRlMzJiZShjZmct PmNhbV9iYXNlX2FkZHIsICZkbWFfcmctPmZtZG1lYmNyKTsKKworCXJldHVybiAwOworfQorCitp bnQgZm1hbl9mcG1faW5pdChzdHJ1Y3QgZm1hbl9mcG1fcmVncyBfX2lvbWVtICpmcG1fcmcsIHN0 cnVjdCBmbWFuX2NmZyAqY2ZnKQoreworCXVpbnQzMl90IHRtcF9yZWc7CisJaW50IGk7CisKKwkv KiBJbml0IEZQTSBSZWdpc3RlcnMgKi8KKworCXRtcF9yZWcgPSAodWludDMyX3QpKGNmZy0+ZGlz cF9saW1pdF90c2ggPDwgRlBNX0RJU1BfTElNSVRfU0hJRlQpOworCWlvd3JpdGUzMmJlKHRtcF9y ZWcsICZmcG1fcmctPmZtZnBfbXhkKTsKKworCXRtcF9yZWcgPSAoKCh1aW50MzJfdCljZmctPnBy c19kaXNwX3RzaCA8PCBGUE1fVEhSMV9QUlNfU0hJRlQpIHwKKwkJICAgKCh1aW50MzJfdCljZmct PmtnX2Rpc3BfdHNoIDw8IEZQTV9USFIxX0tHX1NISUZUKSB8CisJCSAgICgodWludDMyX3QpY2Zn LT5wbGNyX2Rpc3BfdHNoIDw8IEZQTV9USFIxX1BMQ1JfU0hJRlQpIHwKKwkJICAgKCh1aW50MzJf dCljZmctPmJtaV9kaXNwX3RzaCA8PCBGUE1fVEhSMV9CTUlfU0hJRlQpKTsKKwlpb3dyaXRlMzJi ZSh0bXBfcmVnLCAmZnBtX3JnLT5mbWZwX2Rpc3QxKTsKKworCXRtcF9yZWcgPQorCQkoKCh1aW50 MzJfdCljZmctPnFtaV9lbnFfZGlzcF90c2ggPDwgRlBNX1RIUjJfUU1JX0VOUV9TSElGVCkgfAor CQkgKCh1aW50MzJfdCljZmctPnFtaV9kZXFfZGlzcF90c2ggPDwgRlBNX1RIUjJfUU1JX0RFUV9T SElGVCkgfAorCQkgKCh1aW50MzJfdCljZmctPmZtX2N0bDFfZGlzcF90c2ggPDwgRlBNX1RIUjJf Rk1fQ1RMMV9TSElGVCkgfAorCQkgKCh1aW50MzJfdCljZmctPmZtX2N0bDJfZGlzcF90c2ggPDwg RlBNX1RIUjJfRk1fQ1RMMl9TSElGVCkpOworCWlvd3JpdGUzMmJlKHRtcF9yZWcsICZmcG1fcmct PmZtZnBfZGlzdDIpOworCisJLyogZGVmaW5lIGV4Y2VwdGlvbnMgYW5kIGVycm9yIGJlaGF2aW9y ICovCisJdG1wX3JlZyA9IDA7CisJLyogQ2xlYXIgZXZlbnRzICovCisJdG1wX3JlZyB8PSAoRlBN X0VWX01BU0tfU1RBTEwgfCBGUE1fRVZfTUFTS19ET1VCTEVfRUNDIHwKKwkJICAgIEZQTV9FVl9N QVNLX1NJTkdMRV9FQ0MpOworCS8qIGVuYWJsZSBpbnRlcnJ1cHRzICovCisJaWYgKGNmZy0+ZXhj ZXB0aW9ucyAmIEZNQU5fRVhfRlBNX1NUQUxMX09OX1RBU0tTKQorCQl0bXBfcmVnIHw9IEZQTV9F Vl9NQVNLX1NUQUxMX0VOOworCWlmIChjZmctPmV4Y2VwdGlvbnMgJiBGTUFOX0VYX0ZQTV9TSU5H TEVfRUNDKQorCQl0bXBfcmVnIHw9IEZQTV9FVl9NQVNLX1NJTkdMRV9FQ0NfRU47CisJaWYgKGNm Zy0+ZXhjZXB0aW9ucyAmIEZNQU5fRVhfRlBNX0RPVUJMRV9FQ0MpCisJCXRtcF9yZWcgfD0gRlBN X0VWX01BU0tfRE9VQkxFX0VDQ19FTjsKKwl0bXBfcmVnIHw9IChjZmctPmNhdGFzdHJvcGhpY19l cnIgPDwgRlBNX0VWX01BU0tfQ0FUX0VSUl9TSElGVCk7CisJdG1wX3JlZyB8PSAoY2ZnLT5kbWFf ZXJyIDw8IEZQTV9FVl9NQVNLX0RNQV9FUlJfU0hJRlQpOworCWlmICghY2ZnLT5oYWx0X29uX2V4 dGVybmFsX2FjdGl2KQorCQl0bXBfcmVnIHw9IEZQTV9FVl9NQVNLX0VYVEVSTkFMX0hBTFQ7CisJ aWYgKCFjZmctPmhhbHRfb25fdW5yZWNvdl9lY2NfZXJyKQorCQl0bXBfcmVnIHw9IEZQTV9FVl9N QVNLX0VDQ19FUlJfSEFMVDsKKwlpb3dyaXRlMzJiZSh0bXBfcmVnLCAmZnBtX3JnLT5mbWZwX2Vl KTsKKworCS8qIGNsZWFyIGFsbCBmbUN0bHMgZXZlbnQgcmVnaXN0ZXJzICovCisJZm9yIChpID0g MDsgaSA8IGNmZy0+bnVtX29mX2ZtYW5fY3RybF9ldm50X3JlZ3M7IGkrKykKKwkJaW93cml0ZTMy YmUoMHhGRkZGRkZGRiwgJmZwbV9yZy0+Zm1mcF9jZXZbaV0pOworCisJLyogUkFNIEVDQyAtICBl bmFibGUgYW5kIGNsZWFyIGV2ZW50cyAqLworCS8qIGZpcnN0IHdlIG5lZWQgdG8gY2xlYXIgYWxs IHBhcnNlciBtZW1vcnksCisJICogYXMgaXQgaXMgdW5pbml0aWFsaXplZCBhbmQgbWF5IGNhdXNl IEVDQyBlcnJvcnMKKwkgKi8KKwkvKiBldmVudCBiaXRzICovCisJdG1wX3JlZyA9IChGUE1fUkFN X01VUkFNX0VDQyB8IEZQTV9SQU1fSVJBTV9FQ0MpOworCS8qIFJhbXMgZW5hYmxlIG5vdCBlZmZl Y3RlZCBieSBSQ1IgYml0LAorCSAqIGJ1dCBieSBhIENPUCBjb25maWd1cmF0aW9uCisJICovCisJ aWYgKGNmZy0+ZXh0ZXJuYWxfZWNjX3JhbXNfZW5hYmxlKQorCQl0bXBfcmVnIHw9IEZQTV9SQU1f UkFNU19FQ0NfRU5fU1JDX1NFTDsKKworCS8qIGVuYWJsZSB0ZXN0IG1vZGUgKi8KKwlpZiAoY2Zn LT5lbl9tdXJhbV90ZXN0X21vZGUpCisJCXRtcF9yZWcgfD0gRlBNX1JBTV9NVVJBTV9URVNUX0VD QzsKKwlpZiAoY2ZnLT5lbl9pcmFtX3Rlc3RfbW9kZSkKKwkJdG1wX3JlZyB8PSBGUE1fUkFNX0lS QU1fVEVTVF9FQ0M7CisJaW93cml0ZTMyYmUodG1wX3JlZywgJmZwbV9yZy0+Zm1fcmNyKTsKKwor CXRtcF9yZWcgPSAwOworCWlmIChjZmctPmV4Y2VwdGlvbnMgJiBGTUFOX0VYX0lSQU1fRUNDKSB7 CisJCXRtcF9yZWcgfD0gRlBNX0lSQU1fRUNDX0VSUl9FWF9FTjsKKwkJZm1hbl9lbmFibGVfcmFt c19lY2MoZnBtX3JnKTsKKwl9CisJaWYgKGNmZy0+ZXhjZXB0aW9ucyAmIEZNQU5fRVhfTlVSQU1f RUNDKSB7CisJCXRtcF9yZWcgfD0gRlBNX01VUkFNX0VDQ19FUlJfRVhfRU47CisJCWZtYW5fZW5h YmxlX3JhbXNfZWNjKGZwbV9yZyk7CisJfQorCWlvd3JpdGUzMmJlKHRtcF9yZWcsICZmcG1fcmct PmZtX3JpZSk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGZtYW5fYm1pX2luaXQoc3RydWN0IGZt YW5fYm1pX3JlZ3MgX19pb21lbSAqYm1pX3JnLCBzdHJ1Y3QgZm1hbl9jZmcgKmNmZykKK3sKKwl1 aW50MzJfdCB0bXBfcmVnOworCisJLyogSW5pdCBCTUkgUmVnaXN0ZXJzICovCisKKwkvKiBkZWZp bmUgY29tbW9uIHJlc291cmNlcyAqLworCXRtcF9yZWcgPSBjZmctPmZpZm9fYmFzZV9hZGRyOwor CXRtcF9yZWcgPSB0bXBfcmVnIC8gQk1JX0ZJRk9fQUxJR047CisKKwl0bXBfcmVnIHw9ICgoY2Zn LT50b3RhbF9maWZvX3NpemUgLyBGTUFOX0JNSV9GSUZPX1VOSVRTIC0gMSkgPDwKKwkJICAgIEJN SV9DRkcxX0ZJRk9fU0laRV9TSElGVCk7CisJaW93cml0ZTMyYmUodG1wX3JlZywgJmJtaV9yZy0+ Zm1ibV9jZmcxKTsKKworCXRtcF9yZWcgPSAoKHVpbnQzMl90KShjZmctPnRvdGFsX251bV9vZl90 YXNrcyAtIDEpIDw8CisJCSAgIEJNSV9DRkcyX1RBU0tTX1NISUZUKTsKKwkvKiBudW0gb2YgRE1B J3Mgd2lsbCBiZSBkeW5hbWljYWxseSB1cGRhdGVkIHdoZW4gZWFjaCBwb3J0IGlzIHNldCAqLwor CWlvd3JpdGUzMmJlKHRtcF9yZWcsICZibWlfcmctPmZtYm1fY2ZnMik7CisKKwkvKiBkZWZpbmUg dW5tYXNrYWJsZSBleGNlcHRpb25zLCBlbmFibGUgYW5kIGNsZWFyIGV2ZW50cyAqLworCXRtcF9y ZWcgPSAwOworCWlvd3JpdGUzMmJlKEJNSV9FUlJfSU5UUl9FTl9MSVNUX1JBTV9FQ0MgfAorCQkg ICAgQk1JX0VSUl9JTlRSX0VOX1NUT1JBR0VfUFJPRklMRV9FQ0MgfAorCQkgICAgQk1JX0VSUl9J TlRSX0VOX1NUQVRJU1RJQ1NfUkFNX0VDQyB8CisJCSAgICBCTUlfRVJSX0lOVFJfRU5fRElTUEFU Q0hfUkFNX0VDQywgJmJtaV9yZy0+Zm1ibV9pZXZyKTsKKworCWlmIChjZmctPmV4Y2VwdGlvbnMg JiBGTUFOX0VYX0JNSV9MSVNUX1JBTV9FQ0MpCisJCXRtcF9yZWcgfD0gQk1JX0VSUl9JTlRSX0VO X0xJU1RfUkFNX0VDQzsKKwlpZiAoY2ZnLT5leGNlcHRpb25zICYgRk1BTl9FWF9CTUlfUElQRUxJ TkVfRUNDKQorCQl0bXBfcmVnIHw9IEJNSV9FUlJfSU5UUl9FTl9TVE9SQUdFX1BST0ZJTEVfRUND OworCWlmIChjZmctPmV4Y2VwdGlvbnMgJiBGTUFOX0VYX0JNSV9TVEFUSVNUSUNTX1JBTV9FQ0Mp CisJCXRtcF9yZWcgfD0gQk1JX0VSUl9JTlRSX0VOX1NUQVRJU1RJQ1NfUkFNX0VDQzsKKwlpZiAo Y2ZnLT5leGNlcHRpb25zICYgRk1BTl9FWF9CTUlfRElTUEFUQ0hfUkFNX0VDQykKKwkJdG1wX3Jl ZyB8PSBCTUlfRVJSX0lOVFJfRU5fRElTUEFUQ0hfUkFNX0VDQzsKKwlpb3dyaXRlMzJiZSh0bXBf cmVnLCAmYm1pX3JnLT5mbWJtX2llcik7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGZtYW5fcW1p X2luaXQoc3RydWN0IGZtYW5fcW1pX3JlZ3MgX19pb21lbSAqcW1pX3JnLCBzdHJ1Y3QgZm1hbl9j ZmcgKmNmZykKK3sKKwl1aW50MzJfdCB0bXBfcmVnOworCXVpbnQxNl90IHBlcmlvZF9pbl9mbV9j bG9ja3M7CisJdWludDhfdCByZW1haW5kZXI7CisKKwkvKiBJbml0IFFNSSBSZWdpc3RlcnMgKi8K KworCS8qIENsZWFyIGVycm9yIGludGVycnVwdCBldmVudHMgKi8KKworCWlvd3JpdGUzMmJlKFFN SV9FUlJfSU5UUl9FTl9ET1VCTEVfRUNDIHwgUU1JX0VSUl9JTlRSX0VOX0RFUV9GUk9NX0RFRiwK KwkJICAgICZxbWlfcmctPmZtcW1fZWllKTsKKwl0bXBfcmVnID0gMDsKKwlpZiAoY2ZnLT5leGNl cHRpb25zICYgRk1BTl9FWF9RTUlfREVRX0ZST01fVU5LTk9XTl9QT1JUSUQpCisJCXRtcF9yZWcg fD0gUU1JX0VSUl9JTlRSX0VOX0RFUV9GUk9NX0RFRjsKKwlpZiAoY2ZnLT5leGNlcHRpb25zICYg Rk1BTl9FWF9RTUlfRE9VQkxFX0VDQykKKwkJdG1wX3JlZyB8PSBRTUlfRVJSX0lOVFJfRU5fRE9V QkxFX0VDQzsKKwkvKiBlbmFibGUgZXZlbnRzICovCisJaW93cml0ZTMyYmUodG1wX3JlZywgJnFt aV9yZy0+Zm1xbV9laWVuKTsKKworCWlmIChjZmctPnRudW1fYWdpbmdfcGVyaW9kKSB7CisJCS8q IHRudW1fYWdpbmdfcGVyaW9kIGlzIGluIHVuaXRzIG9mIHVzZWMsCisJCSAqIHBfZm1DbG9ja0Zy ZXEgaW4gTWh6CisJCSAqLworCQlwZXJpb2RfaW5fZm1fY2xvY2tzID0gKHVpbnQxNl90KQorCQkJ KGNmZy0+dG51bV9hZ2luZ19wZXJpb2QgKiBjZmctPmNsa19mcmVxKTsKKwkJLyogcGVyaW9kX2lu X2ZtX2Nsb2NrcyBtdXN0IGJlIGEgNjQgbXVsdGlwbGUgKi8KKwkJcmVtYWluZGVyID0gcGVyaW9k X2luX2ZtX2Nsb2NrcyAlIDY0OworCQlpZiAocmVtYWluZGVyKSB7CisJCQl0bXBfcmVnID0gKHVp bnQzMl90KSgocGVyaW9kX2luX2ZtX2Nsb2NrcyAvIDY0KSArIDEpOworCQl9IGVsc2UgeworCQkJ dG1wX3JlZyA9ICh1aW50MzJfdCkocGVyaW9kX2luX2ZtX2Nsb2NrcyAvIDY0KTsKKwkJCWlmICgh dG1wX3JlZykKKwkJCQl0bXBfcmVnID0gMTsKKwkJfQorCQl0bXBfcmVnIDw8PSBRTUlfVEFQQ19U QVA7CisJCWlvd3JpdGUzMmJlKHRtcF9yZWcsICZxbWlfcmctPmZtcW1fdGFwYyk7CisJfQorCXRt cF9yZWcgPSAwOworCS8qIENsZWFyIGludGVycnVwdCBldmVudHMgKi8KKwlpb3dyaXRlMzJiZShR TUlfSU5UUl9FTl9TSU5HTEVfRUNDLCAmcW1pX3JnLT5mbXFtX2llKTsKKwlpZiAoY2ZnLT5leGNl cHRpb25zICYgRk1BTl9FWF9RTUlfU0lOR0xFX0VDQykKKwkJdG1wX3JlZyB8PSBRTUlfSU5UUl9F Tl9TSU5HTEVfRUNDOworCS8qIGVuYWJsZSBldmVudHMgKi8KKwlpb3dyaXRlMzJiZSh0bXBfcmVn LCAmcW1pX3JnLT5mbXFtX2llbik7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGZtYW5fZW5hYmxl KHN0cnVjdCBmbWFuX3JnICpmbWFuX3JnLCBzdHJ1Y3QgZm1hbl9jZmcgKmNmZykKK3sKKwl1aW50 MzJfdCBjZmdfcmVnID0gMDsKKworCS8qIEVuYWJsZSBhbGwgbW9kdWxlcyAqLworCisJLyogY2xl YXImZW5hYmxlIGdsb2JhbCBjb3VudGVycwkgLSBjYWxjdWxhdGUgcmVnIGFuZCBzYXZlIGZvciBs YXRlciwKKwkgKiBiZWNhdXNlIGl0J3MgdGhlIHNhbWUgcmVnIGZvciBRTUkgZW5hYmxlCisJICov CisJY2ZnX3JlZyA9IFFNSV9DRkdfRU5fQ09VTlRFUlM7CisJaWYgKGNmZy0+cW1pX2RlcV9vcHRp b25fc3VwcG9ydCkKKwkJY2ZnX3JlZyB8PSAodWludDMyX3QpKCgoY2ZnLT5xbWlfZGVmX3RudW1z X3RocmVzaCkgPDwgOCkgfAorCQkJCSAgICAgICBjZmctPnFtaV9kZWZfdG51bXNfdGhyZXNoKTsK KworCWlvd3JpdGUzMmJlKEJNSV9JTklUX1NUQVJULCAmZm1hbl9yZy0+Ym1pX3JnLT5mbWJtX2lu aXQpOworCWlvd3JpdGUzMmJlKGNmZ19yZWcgfCBRTUlfQ0ZHX0VOUV9FTiB8IFFNSV9DRkdfREVR X0VOLAorCQkgICAgJmZtYW5fcmctPnFtaV9yZy0+Zm1xbV9nYyk7CisKKwlyZXR1cm4gMDsKK30K Kwordm9pZCBmbWFuX2ZyZWVfcmVzb3VyY2VzKHN0cnVjdCBmbWFuX3JnICpmbWFuX3JnKQorewor CS8qIGRpc2FibGUgQk1JIGFuZCBRTUkgKi8KKwlpb3dyaXRlMzJiZSgwLCAmZm1hbl9yZy0+Ym1p X3JnLT5mbWJtX2luaXQpOworCWlvd3JpdGUzMmJlKDAsICZmbWFuX3JnLT5xbWlfcmctPmZtcW1f Z2MpOworCisJLyogcmVsZWFzZSBCTUkgcmVzb3VyY2VzICovCisJaW93cml0ZTMyYmUoMCwgJmZt YW5fcmctPmJtaV9yZy0+Zm1ibV9jZmcyKTsKKwlpb3dyaXRlMzJiZSgwLCAmZm1hbl9yZy0+Ym1p X3JnLT5mbWJtX2NmZzEpOworCisJLyogZGlzYWJsZSBFQ0MgKi8KKwlpb3dyaXRlMzJiZSgwLCAm Zm1hbl9yZy0+ZnBtX3JnLT5mbV9yY3IpOworfQorCisvKiBBUEkgUnVuLXRpbWUgQ29udHJvbCB1 aW50IGZ1bmN0aW9ucwkgICovCisKK3VpbnQzMl90IGZtYW5fZ2V0X25vcm1hbF9wZW5kaW5nKHN0 cnVjdCBmbWFuX2ZwbV9yZWdzIF9faW9tZW0gKmZwbV9yZykKK3sKKwlyZXR1cm4gaW9yZWFkMzJi ZSgmZnBtX3JnLT5mbV9ucGkpOworfQorCit1aW50MzJfdCBmbWFuX2dldF9lcnJvcl9wZW5kaW5n KHN0cnVjdCBmbWFuX2ZwbV9yZWdzIF9faW9tZW0gKmZwbV9yZykKK3sKKwlyZXR1cm4gaW9yZWFk MzJiZSgmZnBtX3JnLT5mbV9lcGkpOworfQorCit2b2lkIGZtYW5fZW5hYmxlX3JhbXNfZWNjKHN0 cnVjdCBmbWFuX2ZwbV9yZWdzIF9faW9tZW0gKmZwbV9yZykKK3sKKwl1aW50MzJfdCB0bXA7CisK Kwl0bXAgPSBpb3JlYWQzMmJlKCZmcG1fcmctPmZtX3Jjcik7CisJaWYgKHRtcCAmIEZQTV9SQU1f UkFNU19FQ0NfRU5fU1JDX1NFTCkKKwkJaW93cml0ZTMyYmUodG1wIHwgRlBNX1JBTV9JUkFNX0VD Q19FTiwgJmZwbV9yZy0+Zm1fcmNyKTsKKwllbHNlCisJCWlvd3JpdGUzMmJlKHRtcCB8IEZQTV9S QU1fUkFNU19FQ0NfRU4gfAorCQkJICAgIEZQTV9SQU1fSVJBTV9FQ0NfRU4sICZmcG1fcmctPmZt X3Jjcik7Cit9CisKK3ZvaWQgZm1hbl9kaXNhYmxlX3JhbXNfZWNjKHN0cnVjdCBmbWFuX2ZwbV9y ZWdzIF9faW9tZW0gKmZwbV9yZykKK3sKKwl1aW50MzJfdCB0bXA7CisKKwl0bXAgPSBpb3JlYWQz MmJlKCZmcG1fcmctPmZtX3Jjcik7CisJaWYgKHRtcCAmIEZQTV9SQU1fUkFNU19FQ0NfRU5fU1JD X1NFTCkKKwkJaW93cml0ZTMyYmUodG1wICYgfkZQTV9SQU1fSVJBTV9FQ0NfRU4sICZmcG1fcmct PmZtX3Jjcik7CisJZWxzZQorCQlpb3dyaXRlMzJiZSh0bXAgJiB+KEZQTV9SQU1fUkFNU19FQ0Nf RU4gfCBGUE1fUkFNX0lSQU1fRUNDX0VOKSwKKwkJCSAgICAmZnBtX3JnLT5mbV9yY3IpOworfQor CitpbnQgZm1hbl9zZXRfZXhjZXB0aW9uKHN0cnVjdCBmbWFuX3JnICpmbWFuX3JnLAorCQkgICAg ICAgZW51bSBmbWFuX2V4Y2VwdGlvbnMgZXhjZXB0aW9uLCBib29sIGVuYWJsZSkKK3sKKwl1aW50 MzJfdCB0bXA7CisKKwlzd2l0Y2ggKGV4Y2VwdGlvbikgeworCWNhc2UgRV9GTUFOX0VYX0RNQV9C VVNfRVJST1I6CisJCXRtcCA9IGlvcmVhZDMyYmUoJmZtYW5fcmctPmRtYV9yZy0+Zm1kbW1yKTsK KwkJaWYgKGVuYWJsZSkKKwkJCXRtcCB8PSBETUFfTU9ERV9CRVI7CisJCWVsc2UKKwkJCXRtcCAm PSB+RE1BX01PREVfQkVSOworCQkvKiBkaXNhYmxlIGJ1cyBlcnJvciAqLworCQlpb3dyaXRlMzJi ZSh0bXAsICZmbWFuX3JnLT5kbWFfcmctPmZtZG1tcik7CisJCWJyZWFrOworCWNhc2UgRV9GTUFO X0VYX0RNQV9SRUFEX0VDQzoKKwljYXNlIEVfRk1BTl9FWF9ETUFfU1lTVEVNX1dSSVRFX0VDQzoK KwljYXNlIEVfRk1BTl9FWF9ETUFfRk1fV1JJVEVfRUNDOgorCQl0bXAgPSBpb3JlYWQzMmJlKCZm bWFuX3JnLT5kbWFfcmctPmZtZG1tcik7CisJCWlmIChlbmFibGUpCisJCQl0bXAgfD0gRE1BX01P REVfRUNDOworCQllbHNlCisJCQl0bXAgJj0gfkRNQV9NT0RFX0VDQzsKKwkJaW93cml0ZTMyYmUo dG1wLCAmZm1hbl9yZy0+ZG1hX3JnLT5mbWRtbXIpOworCQlicmVhazsKKwljYXNlIEVfRk1BTl9F WF9GUE1fU1RBTExfT05fVEFTS1M6CisJCXRtcCA9IGlvcmVhZDMyYmUoJmZtYW5fcmctPmZwbV9y Zy0+Zm1mcF9lZSk7CisJCWlmIChlbmFibGUpCisJCQl0bXAgfD0gRlBNX0VWX01BU0tfU1RBTExf RU47CisJCWVsc2UKKwkJCXRtcCAmPSB+RlBNX0VWX01BU0tfU1RBTExfRU47CisJCWlvd3JpdGUz MmJlKHRtcCwgJmZtYW5fcmctPmZwbV9yZy0+Zm1mcF9lZSk7CisJCWJyZWFrOworCWNhc2UgRV9G TUFOX0VYX0ZQTV9TSU5HTEVfRUNDOgorCQl0bXAgPSBpb3JlYWQzMmJlKCZmbWFuX3JnLT5mcG1f cmctPmZtZnBfZWUpOworCQlpZiAoZW5hYmxlKQorCQkJdG1wIHw9IEZQTV9FVl9NQVNLX1NJTkdM RV9FQ0NfRU47CisJCWVsc2UKKwkJCXRtcCAmPSB+RlBNX0VWX01BU0tfU0lOR0xFX0VDQ19FTjsK KwkJaW93cml0ZTMyYmUodG1wLCAmZm1hbl9yZy0+ZnBtX3JnLT5mbWZwX2VlKTsKKwkJYnJlYWs7 CisJY2FzZSBFX0ZNQU5fRVhfRlBNX0RPVUJMRV9FQ0M6CisJCXRtcCA9IGlvcmVhZDMyYmUoJmZt YW5fcmctPmZwbV9yZy0+Zm1mcF9lZSk7CisJCWlmIChlbmFibGUpCisJCQl0bXAgfD0gRlBNX0VW X01BU0tfRE9VQkxFX0VDQ19FTjsKKwkJZWxzZQorCQkJdG1wICY9IH5GUE1fRVZfTUFTS19ET1VC TEVfRUNDX0VOOworCQlpb3dyaXRlMzJiZSh0bXAsICZmbWFuX3JnLT5mcG1fcmctPmZtZnBfZWUp OworCQlicmVhazsKKwljYXNlIEVfRk1BTl9FWF9RTUlfU0lOR0xFX0VDQzoKKwkJdG1wID0gaW9y ZWFkMzJiZSgmZm1hbl9yZy0+cW1pX3JnLT5mbXFtX2llbik7CisJCWlmIChlbmFibGUpCisJCQl0 bXAgfD0gUU1JX0lOVFJfRU5fU0lOR0xFX0VDQzsKKwkJZWxzZQorCQkJdG1wICY9IH5RTUlfSU5U Ul9FTl9TSU5HTEVfRUNDOworCQlpb3dyaXRlMzJiZSh0bXAsICZmbWFuX3JnLT5xbWlfcmctPmZt cW1faWVuKTsKKwkJYnJlYWs7CisJY2FzZSBFX0ZNQU5fRVhfUU1JX0RPVUJMRV9FQ0M6CisJCXRt cCA9IGlvcmVhZDMyYmUoJmZtYW5fcmctPnFtaV9yZy0+Zm1xbV9laWVuKTsKKwkJaWYgKGVuYWJs ZSkKKwkJCXRtcCB8PSBRTUlfRVJSX0lOVFJfRU5fRE9VQkxFX0VDQzsKKwkJZWxzZQorCQkJdG1w ICY9IH5RTUlfRVJSX0lOVFJfRU5fRE9VQkxFX0VDQzsKKwkJaW93cml0ZTMyYmUodG1wLCAmZm1h bl9yZy0+cW1pX3JnLT5mbXFtX2VpZW4pOworCQlicmVhazsKKwljYXNlIEVfRk1BTl9FWF9RTUlf REVRX0ZST01fVU5LTk9XTl9QT1JUSUQ6CisJCXRtcCA9IGlvcmVhZDMyYmUoJmZtYW5fcmctPnFt aV9yZy0+Zm1xbV9laWVuKTsKKwkJaWYgKGVuYWJsZSkKKwkJCXRtcCB8PSBRTUlfRVJSX0lOVFJf RU5fREVRX0ZST01fREVGOworCQllbHNlCisJCQl0bXAgJj0gflFNSV9FUlJfSU5UUl9FTl9ERVFf RlJPTV9ERUY7CisJCWlvd3JpdGUzMmJlKHRtcCwgJmZtYW5fcmctPnFtaV9yZy0+Zm1xbV9laWVu KTsKKwkJYnJlYWs7CisJY2FzZSBFX0ZNQU5fRVhfQk1JX0xJU1RfUkFNX0VDQzoKKwkJdG1wID0g aW9yZWFkMzJiZSgmZm1hbl9yZy0+Ym1pX3JnLT5mbWJtX2llcik7CisJCWlmIChlbmFibGUpCisJ CQl0bXAgfD0gQk1JX0VSUl9JTlRSX0VOX0xJU1RfUkFNX0VDQzsKKwkJZWxzZQorCQkJdG1wICY9 IH5CTUlfRVJSX0lOVFJfRU5fTElTVF9SQU1fRUNDOworCQlpb3dyaXRlMzJiZSh0bXAsICZmbWFu X3JnLT5ibWlfcmctPmZtYm1faWVyKTsKKwkJYnJlYWs7CisJY2FzZSBFX0ZNQU5fRVhfQk1JX1NU T1JBR0VfUFJPRklMRV9FQ0M6CisJCXRtcCA9IGlvcmVhZDMyYmUoJmZtYW5fcmctPmJtaV9yZy0+ Zm1ibV9pZXIpOworCQlpZiAoZW5hYmxlKQorCQkJdG1wIHw9IEJNSV9FUlJfSU5UUl9FTl9TVE9S QUdFX1BST0ZJTEVfRUNDOworCQllbHNlCisJCQl0bXAgJj0gfkJNSV9FUlJfSU5UUl9FTl9TVE9S QUdFX1BST0ZJTEVfRUNDOworCQlpb3dyaXRlMzJiZSh0bXAsICZmbWFuX3JnLT5ibWlfcmctPmZt Ym1faWVyKTsKKwkJYnJlYWs7CisJY2FzZSBFX0ZNQU5fRVhfQk1JX1NUQVRJU1RJQ1NfUkFNX0VD QzoKKwkJdG1wID0gaW9yZWFkMzJiZSgmZm1hbl9yZy0+Ym1pX3JnLT5mbWJtX2llcik7CisJCWlm IChlbmFibGUpCisJCQl0bXAgfD0gQk1JX0VSUl9JTlRSX0VOX1NUQVRJU1RJQ1NfUkFNX0VDQzsK KwkJZWxzZQorCQkJdG1wICY9IH5CTUlfRVJSX0lOVFJfRU5fU1RBVElTVElDU19SQU1fRUNDOwor CQlpb3dyaXRlMzJiZSh0bXAsICZmbWFuX3JnLT5ibWlfcmctPmZtYm1faWVyKTsKKwkJYnJlYWs7 CisJY2FzZSBFX0ZNQU5fRVhfQk1JX0RJU1BBVENIX1JBTV9FQ0M6CisJCXRtcCA9IGlvcmVhZDMy YmUoJmZtYW5fcmctPmJtaV9yZy0+Zm1ibV9pZXIpOworCQlpZiAoZW5hYmxlKQorCQkJdG1wIHw9 IEJNSV9FUlJfSU5UUl9FTl9ESVNQQVRDSF9SQU1fRUNDOworCQllbHNlCisJCQl0bXAgJj0gfkJN SV9FUlJfSU5UUl9FTl9ESVNQQVRDSF9SQU1fRUNDOworCQlpb3dyaXRlMzJiZSh0bXAsICZmbWFu X3JnLT5ibWlfcmctPmZtYm1faWVyKTsKKwkJYnJlYWs7CisJY2FzZSBFX0ZNQU5fRVhfSVJBTV9F Q0M6CisJCXRtcCA9IGlvcmVhZDMyYmUoJmZtYW5fcmctPmZwbV9yZy0+Zm1fcmllKTsKKwkJaWYg KGVuYWJsZSkgeworCQkJLyogZW5hYmxlIEVDQyBpZiBub3QgZW5hYmxlZCAqLworCQkJZm1hbl9l bmFibGVfcmFtc19lY2MoZm1hbl9yZy0+ZnBtX3JnKTsKKwkJCS8qIGVuYWJsZSBFQ0MgaW50ZXJy dXB0cyAqLworCQkJdG1wIHw9IEZQTV9JUkFNX0VDQ19FUlJfRVhfRU47CisJCX0gZWxzZSB7CisJ CQkvKiBFQ0MgbWVjaGFuaXNtIG1heSBiZSBkaXNhYmxlZCwKKwkJCSAqIGRlcGVuZGluZyBvbiBk cml2ZXIgc3RhdHVzCisJCQkgKi8KKwkJCWZtYW5fZGlzYWJsZV9yYW1zX2VjYyhmbWFuX3JnLT5m cG1fcmcpOworCQkJdG1wICY9IH5GUE1fSVJBTV9FQ0NfRVJSX0VYX0VOOworCQl9CisJCWlvd3Jp dGUzMmJlKHRtcCwgJmZtYW5fcmctPmZwbV9yZy0+Zm1fcmllKTsKKwkJYnJlYWs7CisJY2FzZSBF X0ZNQU5fRVhfTVVSQU1fRUNDOgorCQl0bXAgPSBpb3JlYWQzMmJlKCZmbWFuX3JnLT5mcG1fcmct PmZtX3JpZSk7CisJCWlmIChlbmFibGUpIHsKKwkJCS8qIGVuYWJsZSBFQ0MgaWYgbm90IGVuYWJs ZWQgKi8KKwkJCWZtYW5fZW5hYmxlX3JhbXNfZWNjKGZtYW5fcmctPmZwbV9yZyk7CisJCQkvKiBl bmFibGUgRUNDIGludGVycnVwdHMgKi8KKwkJCXRtcCB8PSBGUE1fTVVSQU1fRUNDX0VSUl9FWF9F TjsKKwkJfSBlbHNlIHsKKwkJCS8qIEVDQyBtZWNoYW5pc20gbWF5IGJlIGRpc2FibGVkLAorCQkJ ICogZGVwZW5kaW5nIG9uIGRyaXZlciBzdGF0dXMKKwkJCSAqLworCQkJZm1hbl9kaXNhYmxlX3Jh bXNfZWNjKGZtYW5fcmctPmZwbV9yZyk7CisJCQl0bXAgJj0gfkZQTV9NVVJBTV9FQ0NfRVJSX0VY X0VOOworCQl9CisJCWlvd3JpdGUzMmJlKHRtcCwgJmZtYW5fcmctPmZwbV9yZy0+Zm1fcmllKTsK KwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOwor fQorCit2b2lkIGZtYW5fZ2V0X3JldmlzaW9uKHN0cnVjdCBmbWFuX2ZwbV9yZWdzIF9faW9tZW0g KmZwbV9yZywKKwkJICAgICAgIHVpbnQ4X3QgKm1ham9yLCB1aW50OF90ICptaW5vcikKK3sKKwl1 aW50MzJfdCB0bXA7CisKKwl0bXAgPSBpb3JlYWQzMmJlKCZmcG1fcmctPmZtX2lwX3Jldl8xKTsK KwkqbWFqb3IgPQorCSAgICAodWludDhfdCkoKHRtcCAmIEZQTV9SRVYxX01BSk9SX01BU0spID4+ IEZQTV9SRVYxX01BSk9SX1NISUZUKTsKKwkqbWlub3IgPQorCSAgICAodWludDhfdCkoKHRtcCAm IEZQTV9SRVYxX01JTk9SX01BU0spID4+IEZQTV9SRVYxX01JTk9SX1NISUZUKTsKK30KKworYm9v bCBmbWFuX2lzX3FtaV9oYWx0X25vdF9idXN5X3N0YXRlKHN0cnVjdCBmbWFuX3FtaV9yZWdzIF9f aW9tZW0gKnFtaV9yZykKK3sKKwlyZXR1cm4gISEoaW9yZWFkMzJiZSgmcW1pX3JnLT5mbXFtX2dz KSAmIFFNSV9HU19IQUxUX05PVF9CVVNZKTsKK30KKwordm9pZCBmbWFuX3Jlc3VtZShzdHJ1Y3Qg Zm1hbl9mcG1fcmVncyBfX2lvbWVtICpmcG1fcmcpCit7CisJdWludDMyX3QgdG1wOworCisJdG1w ID0gaW9yZWFkMzJiZSgmZnBtX3JnLT5mbWZwX2VlKTsKKwkvKiBjbGVhciB0bXBfcmVnIGV2ZW50 IGJpdHMgaW4gb3JkZXIgbm90IHRvIGNsZWFyIHN0YW5kaW5nIGV2ZW50cyAqLworCXRtcCAmPSB+ KEZQTV9FVl9NQVNLX0RPVUJMRV9FQ0MgfAorCQkgRlBNX0VWX01BU0tfU1RBTEwgfCBGUE1fRVZf TUFTS19TSU5HTEVfRUNDKTsKKwl0bXAgfD0gRlBNX0VWX01BU0tfUkVMRUFTRV9GTTsKKworCWlv d3JpdGUzMmJlKHRtcCwgJmZwbV9yZy0+Zm1mcF9lZSk7Cit9Ci0tIAoxLjcuMTEuNwoKX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTGludXhwcGMtZGV2IG1h aWxpbmcgbGlzdApMaW51eHBwYy1kZXZAbGlzdHMub3psYWJzLm9yZwpodHRwczovL2xpc3RzLm96 bGFicy5vcmcvbGlzdGluZm8vbGludXhwcGMtZGV2