From mboxrd@z Thu Jan 1 00:00:00 1970 From: John.C.Harrison@Intel.com Subject: [RFC 03/12] staging/android/sync: Move sync framework out of staging Date: Mon, 23 Nov 2015 11:34:22 +0000 Message-ID: <1448278471-31181-4-git-send-email-John.C.Harrison@Intel.com> References: <1448278471-31181-1-git-send-email-John.C.Harrison@Intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTP id 3A0A9721E3 for ; Mon, 23 Nov 2015 03:34:39 -0800 (PST) In-Reply-To: <1448278471-31181-1-git-send-email-John.C.Harrison@Intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Intel-GFX@Lists.FreeDesktop.Org List-Id: intel-gfx@lists.freedesktop.org RnJvbTogSm9obiBIYXJyaXNvbiA8Sm9obi5DLkhhcnJpc29uQEludGVsLmNvbT4KClRoZSBzeW5j IGZyYW1ld29yayBpcyBub3cgdXNlZCBieSB0aGUgaTkxNSBkcml2ZXIuIFRoZXJlZm9yZSBpdCBj YW4gYmUKbW92ZWQgb3V0IG9mIHN0YWdpbmcgYW5kIGludG8gdGhlIHJlZ3VsYXIgdHJlZS4gQWxz bywgdGhlIHB1YmxpYwppbnRlcmZhY2VzIGNhbiBhY3R1YWxseSBiZSBtYWRlIHB1YmxpYyBhbmQg ZXhwb3J0ZWQuCgp2MzogTmV3IHBhdGNoIGZvciBzZXJpZXMuCgpTaWduZWQtb2ZmLWJ5OiBKb2hu IEhhcnJpc29uIDxKb2huLkMuSGFycmlzb25ASW50ZWwuY29tPgpTaWduZWQtb2ZmLWJ5OiBHZW9m ZiBNaWxsZXIgPGdlb2ZmLm1pbGxlckBpbnRlbC5jb20+Ci0tLQogZHJpdmVycy9hbmRyb2lkL0tj b25maWcgICAgICAgICAgICAgICAgfCAgMjggKysKIGRyaXZlcnMvYW5kcm9pZC9NYWtlZmlsZSAg ICAgICAgICAgICAgIHwgICAyICsKIGRyaXZlcnMvYW5kcm9pZC9zd19zeW5jLmMgICAgICAgICAg ICAgIHwgMjYwICsrKysrKysrKysrKwogZHJpdmVycy9hbmRyb2lkL3N3X3N5bmMuaCAgICAgICAg ICAgICAgfCAgNTkgKysrCiBkcml2ZXJzL2FuZHJvaWQvc3luYy5jICAgICAgICAgICAgICAgICB8 IDczNCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvYW5kcm9pZC9z eW5jLmggICAgICAgICAgICAgICAgIHwgMzY2ICsrKysrKysrKysrKysrKysKIGRyaXZlcnMvYW5k cm9pZC9zeW5jX2RlYnVnLmMgICAgICAgICAgIHwgMjU2ICsrKysrKysrKysrKwogZHJpdmVycy9h bmRyb2lkL3RyYWNlL3N5bmMuaCAgICAgICAgICAgfCAgODIgKysrKwogZHJpdmVycy9zdGFnaW5n L2FuZHJvaWQvS2NvbmZpZyAgICAgICAgfCAgMjggLS0KIGRyaXZlcnMvc3RhZ2luZy9hbmRyb2lk L01ha2VmaWxlICAgICAgIHwgICAyIC0KIGRyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL3N3X3N5bmMu YyAgICAgIHwgMjYwIC0tLS0tLS0tLS0tLQogZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvc3dfc3lu Yy5oICAgICAgfCAgNTkgLS0tCiBkcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9zeW5jLmMgICAgICAg ICB8IDczNCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIGRyaXZlcnMvc3RhZ2lu Zy9hbmRyb2lkL3N5bmMuaCAgICAgICAgIHwgMzY2IC0tLS0tLS0tLS0tLS0tLS0KIGRyaXZlcnMv c3RhZ2luZy9hbmRyb2lkL3N5bmNfZGVidWcuYyAgIHwgMjU2IC0tLS0tLS0tLS0tLQogZHJpdmVy cy9zdGFnaW5nL2FuZHJvaWQvdHJhY2Uvc3luYy5oICAgfCAgODIgLS0tLQogZHJpdmVycy9zdGFn aW5nL2FuZHJvaWQvdWFwaS9zd19zeW5jLmggfCAgMzIgLS0KIGRyaXZlcnMvc3RhZ2luZy9hbmRy b2lkL3VhcGkvc3luYy5oICAgIHwgIDk3IC0tLS0tCiBpbmNsdWRlL3VhcGkvS2J1aWxkICAgICAg ICAgICAgICAgICAgICB8ICAgMSArCiBpbmNsdWRlL3VhcGkvc3luYy9LYnVpbGQgICAgICAgICAg ICAgICB8ICAgMyArCiBpbmNsdWRlL3VhcGkvc3luYy9zd19zeW5jLmggICAgICAgICAgICB8ICAz MiArKwogaW5jbHVkZS91YXBpL3N5bmMvc3luYy5oICAgICAgICAgICAgICAgfCAgOTcgKysrKysK IDIyIGZpbGVzIGNoYW5nZWQsIDE5MjAgaW5zZXJ0aW9ucygrKSwgMTkxNiBkZWxldGlvbnMoLSkK IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2FuZHJvaWQvc3dfc3luYy5jCiBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9hbmRyb2lkL3N3X3N5bmMuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGRy aXZlcnMvYW5kcm9pZC9zeW5jLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2FuZHJvaWQv c3luYy5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9hbmRyb2lkL3N5bmNfZGVidWcuYwog Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvYW5kcm9pZC90cmFjZS9zeW5jLmgKIGRlbGV0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9zd19zeW5jLmMKIGRlbGV0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9zd19zeW5jLmgKIGRlbGV0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9zeW5jLmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9zeW5jLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L3N0YWdpbmcvYW5kcm9pZC9zeW5jX2RlYnVnLmMKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L3N0YWdpbmcvYW5kcm9pZC90cmFjZS9zeW5jLmgKIGRlbGV0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L3N0YWdpbmcvYW5kcm9pZC91YXBpL3N3X3N5bmMuaAogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvc3RhZ2luZy9hbmRyb2lkL3VhcGkvc3luYy5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVk ZS91YXBpL3N5bmMvS2J1aWxkCiBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS91YXBpL3N5bmMv c3dfc3luYy5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS91YXBpL3N5bmMvc3luYy5oCgpk aWZmIC0tZ2l0IGEvZHJpdmVycy9hbmRyb2lkL0tjb25maWcgYi9kcml2ZXJzL2FuZHJvaWQvS2Nv bmZpZwppbmRleCBiZGZjNmM2Li45ZWRjZDhmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FuZHJvaWQv S2NvbmZpZworKysgYi9kcml2ZXJzL2FuZHJvaWQvS2NvbmZpZwpAQCAtMzIsNiArMzIsMzQgQEAg Y29uZmlnIEFORFJPSURfQklOREVSX0lQQ18zMkJJVAogCiAJICBOb3RlIHRoYXQgZW5hYmxpbmcg dGhpcyB3aWxsIGJyZWFrIG5ld2VyIEFuZHJvaWQgdXNlci1zcGFjZS4KIAorY29uZmlnIFNZTkMK Kwlib29sICJTeW5jaHJvbml6YXRpb24gZnJhbWV3b3JrIgorCWRlZmF1bHQgbgorCXNlbGVjdCBB Tk9OX0lOT0RFUworCXNlbGVjdCBETUFfU0hBUkVEX0JVRkZFUgorCS0tLWhlbHAtLS0KKwkgIFRo aXMgb3B0aW9uIGVuYWJsZXMgdGhlIGZyYW1ld29yayBmb3Igc3luY2hyb25pemF0aW9uIGJldHdl ZW4gbXVsdGlwbGUKKwkgIGRyaXZlcnMuICBTeW5jIGltcGxlbWVudGF0aW9ucyBjYW4gdGFrZSBh ZHZhbnRhZ2Ugb2YgaGFyZHdhcmUKKwkgIHN5bmNocm9uaXphdGlvbiBidWlsdCBpbnRvIGRldmlj ZXMgbGlrZSBHUFVzLgorCitjb25maWcgU1dfU1lOQworCWJvb2wgIlNvZnR3YXJlIHN5bmNocm9u aXphdGlvbiBvYmplY3RzIgorCWRlZmF1bHQgbgorCWRlcGVuZHMgb24gU1lOQworCS0tLWhlbHAt LS0KKwkgIEEgc3luYyBvYmplY3QgZHJpdmVyIHRoYXQgdXNlcyBhIDMyYml0IGNvdW50ZXIgdG8g Y29vcmRpbmF0ZQorCSAgc3luY2hyb25pemF0aW9uLiAgVXNlZnVsIHdoZW4gdGhlcmUgaXMgbm8g aGFyZHdhcmUgcHJpbWl0aXZlIGJhY2tpbmcKKwkgIHRoZSBzeW5jaHJvbml6YXRpb24uCisKK2Nv bmZpZyBTV19TWU5DX1VTRVIKKwlib29sICJVc2Vyc3BhY2UgQVBJIGZvciBTV19TWU5DIgorCWRl ZmF1bHQgbgorCWRlcGVuZHMgb24gU1dfU1lOQworCS0tLWhlbHAtLS0KKwkgIFByb3ZpZGVzIGEg dXNlciBzcGFjZSBBUEkgdG8gdGhlIHN3IHN5bmMgb2JqZWN0LgorCSAgKldBUk5JTkcqIGltcHJv cGVyIHVzZSBvZiB0aGlzIGNhbiByZXN1bHQgaW4gZGVhZGxvY2tpbmcga2VybmVsCisJICBkcml2 ZXJzIGZyb20gdXNlcnNwYWNlLgorCiBlbmRpZiAjIGlmIEFORFJPSUQKIAogZW5kbWVudQpkaWZm IC0tZ2l0IGEvZHJpdmVycy9hbmRyb2lkL01ha2VmaWxlIGIvZHJpdmVycy9hbmRyb2lkL01ha2Vm aWxlCmluZGV4IDNiN2U0YjAuLmExNDY1ZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYW5kcm9pZC9N YWtlZmlsZQorKysgYi9kcml2ZXJzL2FuZHJvaWQvTWFrZWZpbGUKQEAgLTEsMyArMSw1IEBACiBj Y2ZsYWdzLXkgKz0gLUkkKHNyYykJCQkjIG5lZWRlZCBmb3IgdHJhY2UgZXZlbnRzCiAKIG9iai0k KENPTkZJR19BTkRST0lEX0JJTkRFUl9JUEMpCSs9IGJpbmRlci5vCitvYmotJChDT05GSUdfU1lO QykJCQkrPSBzeW5jLm8gc3luY19kZWJ1Zy5vCitvYmotJChDT05GSUdfU1dfU1lOQykJCQkrPSBz d19zeW5jLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYW5kcm9pZC9zd19zeW5jLmMgYi9kcml2ZXJz L2FuZHJvaWQvc3dfc3luYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0 ZmYxNjcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2FuZHJvaWQvc3dfc3luYy5jCkBAIC0w LDAgKzEsMjYwIEBACisvKgorICogZHJpdmVycy9iYXNlL3N3X3N5bmMuYworICoKKyAqIENvcHly aWdodCAoQykgMjAxMiBHb29nbGUsIEluYy4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vu c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl IHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s IGFuZAorICogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0 aG9zZSB0ZXJtcy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisjaW5jbHVk ZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxp bnV4L2V4cG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9m cy5oPgorI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNj YWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKworI2luY2x1ZGUgInN3X3N5bmMu aCIKKworc3RhdGljIGludCBzd19zeW5jX2NtcCh1MzIgYSwgdTMyIGIpCit7CisJaWYgKGEgPT0g YikKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gKChzMzIpYSAtIChzMzIpYikgPCAwID8gLTEgOiAx OworfQorCitzdHJ1Y3Qgc3luY19wdCAqc3dfc3luY19wdF9jcmVhdGUoc3RydWN0IHN3X3N5bmNf dGltZWxpbmUgKm9iaiwgdTMyIHZhbHVlKQoreworCXN0cnVjdCBzd19zeW5jX3B0ICpwdDsKKwor CXB0ID0gKHN0cnVjdCBzd19zeW5jX3B0ICopCisJCXN5bmNfcHRfY3JlYXRlKCZvYmotPm9iaiwg c2l6ZW9mKHN0cnVjdCBzd19zeW5jX3B0KSk7CisKKwlwdC0+dmFsdWUgPSB2YWx1ZTsKKworCXJl dHVybiAoc3RydWN0IHN5bmNfcHQgKilwdDsKK30KK0VYUE9SVF9TWU1CT0woc3dfc3luY19wdF9j cmVhdGUpOworCitzdGF0aWMgc3RydWN0IHN5bmNfcHQgKnN3X3N5bmNfcHRfZHVwKHN0cnVjdCBz eW5jX3B0ICpzeW5jX3B0KQoreworCXN0cnVjdCBzd19zeW5jX3B0ICpwdCA9IChzdHJ1Y3Qgc3df c3luY19wdCAqKXN5bmNfcHQ7CisJc3RydWN0IHN3X3N5bmNfdGltZWxpbmUgKm9iaiA9CisJCShz dHJ1Y3Qgc3dfc3luY190aW1lbGluZSAqKXN5bmNfcHRfcGFyZW50KHN5bmNfcHQpOworCisJcmV0 dXJuIChzdHJ1Y3Qgc3luY19wdCAqKXN3X3N5bmNfcHRfY3JlYXRlKG9iaiwgcHQtPnZhbHVlKTsK K30KKworc3RhdGljIGludCBzd19zeW5jX3B0X2hhc19zaWduYWxlZChzdHJ1Y3Qgc3luY19wdCAq c3luY19wdCkKK3sKKwlzdHJ1Y3Qgc3dfc3luY19wdCAqcHQgPSAoc3RydWN0IHN3X3N5bmNfcHQg KilzeW5jX3B0OworCXN0cnVjdCBzd19zeW5jX3RpbWVsaW5lICpvYmogPQorCQkoc3RydWN0IHN3 X3N5bmNfdGltZWxpbmUgKilzeW5jX3B0X3BhcmVudChzeW5jX3B0KTsKKworCXJldHVybiBzd19z eW5jX2NtcChvYmotPnZhbHVlLCBwdC0+dmFsdWUpID49IDA7Cit9CisKK3N0YXRpYyBpbnQgc3df c3luY19wdF9jb21wYXJlKHN0cnVjdCBzeW5jX3B0ICphLCBzdHJ1Y3Qgc3luY19wdCAqYikKK3sK KwlzdHJ1Y3Qgc3dfc3luY19wdCAqcHRfYSA9IChzdHJ1Y3Qgc3dfc3luY19wdCAqKWE7CisJc3Ry dWN0IHN3X3N5bmNfcHQgKnB0X2IgPSAoc3RydWN0IHN3X3N5bmNfcHQgKiliOworCisJcmV0dXJu IHN3X3N5bmNfY21wKHB0X2EtPnZhbHVlLCBwdF9iLT52YWx1ZSk7Cit9CisKK3N0YXRpYyBpbnQg c3dfc3luY19maWxsX2RyaXZlcl9kYXRhKHN0cnVjdCBzeW5jX3B0ICpzeW5jX3B0LAorCQkJCSAg ICB2b2lkICpkYXRhLCBpbnQgc2l6ZSkKK3sKKwlzdHJ1Y3Qgc3dfc3luY19wdCAqcHQgPSAoc3Ry dWN0IHN3X3N5bmNfcHQgKilzeW5jX3B0OworCisJaWYgKHNpemUgPCBzaXplb2YocHQtPnZhbHVl KSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltZW1jcHkoZGF0YSwgJnB0LT52YWx1ZSwgc2l6ZW9m KHB0LT52YWx1ZSkpOworCisJcmV0dXJuIHNpemVvZihwdC0+dmFsdWUpOworfQorCitzdGF0aWMg dm9pZCBzd19zeW5jX3RpbWVsaW5lX3ZhbHVlX3N0cihzdHJ1Y3Qgc3luY190aW1lbGluZSAqc3lu Y190aW1lbGluZSwKKwkJCQkgICAgICAgY2hhciAqc3RyLCBpbnQgc2l6ZSkKK3sKKwlzdHJ1Y3Qg c3dfc3luY190aW1lbGluZSAqdGltZWxpbmUgPQorCQkoc3RydWN0IHN3X3N5bmNfdGltZWxpbmUg KilzeW5jX3RpbWVsaW5lOworCXNucHJpbnRmKHN0ciwgc2l6ZSwgIiVkIiwgdGltZWxpbmUtPnZh bHVlKTsKK30KKworc3RhdGljIHZvaWQgc3dfc3luY19wdF92YWx1ZV9zdHIoc3RydWN0IHN5bmNf cHQgKnN5bmNfcHQsCisJCQkJIGNoYXIgKnN0ciwgaW50IHNpemUpCit7CisJc3RydWN0IHN3X3N5 bmNfcHQgKnB0ID0gKHN0cnVjdCBzd19zeW5jX3B0ICopc3luY19wdDsKKworCXNucHJpbnRmKHN0 ciwgc2l6ZSwgIiVkIiwgcHQtPnZhbHVlKTsKK30KKworc3RhdGljIHN0cnVjdCBzeW5jX3RpbWVs aW5lX29wcyBzd19zeW5jX3RpbWVsaW5lX29wcyA9IHsKKwkuZHJpdmVyX25hbWUgPSAic3dfc3lu YyIsCisJLmR1cCA9IHN3X3N5bmNfcHRfZHVwLAorCS5oYXNfc2lnbmFsZWQgPSBzd19zeW5jX3B0 X2hhc19zaWduYWxlZCwKKwkuY29tcGFyZSA9IHN3X3N5bmNfcHRfY29tcGFyZSwKKwkuZmlsbF9k cml2ZXJfZGF0YSA9IHN3X3N5bmNfZmlsbF9kcml2ZXJfZGF0YSwKKwkudGltZWxpbmVfdmFsdWVf c3RyID0gc3dfc3luY190aW1lbGluZV92YWx1ZV9zdHIsCisJLnB0X3ZhbHVlX3N0ciA9IHN3X3N5 bmNfcHRfdmFsdWVfc3RyLAorfTsKKworc3RydWN0IHN3X3N5bmNfdGltZWxpbmUgKnN3X3N5bmNf dGltZWxpbmVfY3JlYXRlKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IHN3X3N5bmNfdGlt ZWxpbmUgKm9iaiA9IChzdHJ1Y3Qgc3dfc3luY190aW1lbGluZSAqKQorCQlzeW5jX3RpbWVsaW5l X2NyZWF0ZSgmc3dfc3luY190aW1lbGluZV9vcHMsCisJCQkJICAgICBzaXplb2Yoc3RydWN0IHN3 X3N5bmNfdGltZWxpbmUpLAorCQkJCSAgICAgbmFtZSk7CisKKwlyZXR1cm4gb2JqOworfQorRVhQ T1JUX1NZTUJPTChzd19zeW5jX3RpbWVsaW5lX2NyZWF0ZSk7CisKK3ZvaWQgc3dfc3luY190aW1l bGluZV9pbmMoc3RydWN0IHN3X3N5bmNfdGltZWxpbmUgKm9iaiwgdTMyIGluYykKK3sKKwlvYmot PnZhbHVlICs9IGluYzsKKworCXN5bmNfdGltZWxpbmVfc2lnbmFsKCZvYmotPm9iaik7Cit9CitF WFBPUlRfU1lNQk9MKHN3X3N5bmNfdGltZWxpbmVfaW5jKTsKKworI2lmZGVmIENPTkZJR19TV19T WU5DX1VTRVIKKy8qICpXQVJOSU5HKgorICoKKyAqIGltcHJvcGVyIHVzZSBvZiB0aGlzIGNhbiBy ZXN1bHQgaW4gZGVhZGxvY2tpbmcga2VybmVsIGRyaXZlcnMgZnJvbSB1c2Vyc3BhY2UuCisgKi8K KworLyogb3BlbmluZyBzd19zeW5jIGNyZWF0ZSBhIG5ldyBzeW5jIG9iaiAqLworc3RhdGljIGlu dCBzd19zeW5jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7 CisJc3RydWN0IHN3X3N5bmNfdGltZWxpbmUgKm9iajsKKwljaGFyIHRhc2tfY29tbVtUQVNLX0NP TU1fTEVOXTsKKworCWdldF90YXNrX2NvbW0odGFza19jb21tLCBjdXJyZW50KTsKKworCW9iaiA9 IHN3X3N5bmNfdGltZWxpbmVfY3JlYXRlKHRhc2tfY29tbSk7CisJaWYgKCFvYmopCisJCXJldHVy biAtRU5PTUVNOworCisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gb2JqOworCisJcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyBpbnQgc3dfc3luY19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVj dCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBzd19zeW5jX3RpbWVsaW5lICpvYmogPSBmaWxlLT5w cml2YXRlX2RhdGE7CisKKwlzeW5jX3RpbWVsaW5lX2Rlc3Ryb3koJm9iai0+b2JqKTsKKwlyZXR1 cm4gMDsKK30KKworc3RhdGljIGxvbmcgc3dfc3luY19pb2N0bF9jcmVhdGVfZmVuY2Uoc3RydWN0 IHN3X3N5bmNfdGltZWxpbmUgKm9iaiwKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBhcmcpCit7 CisJaW50IGZkID0gZ2V0X3VudXNlZF9mZF9mbGFncyhPX0NMT0VYRUMpOworCWludCBlcnI7CisJ c3RydWN0IHN5bmNfcHQgKnB0OworCXN0cnVjdCBzeW5jX2ZlbmNlICpmZW5jZTsKKwlzdHJ1Y3Qg c3dfc3luY19jcmVhdGVfZmVuY2VfZGF0YSBkYXRhOworCisJaWYgKGZkIDwgMCkKKwkJcmV0dXJu IGZkOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZkYXRhLCAodm9pZCBfX3VzZXIgKilhcmcsIHNp emVvZihkYXRhKSkpIHsKKwkJZXJyID0gLUVGQVVMVDsKKwkJZ290byBlcnI7CisJfQorCisJcHQg PSBzd19zeW5jX3B0X2NyZWF0ZShvYmosIGRhdGEudmFsdWUpOworCWlmICghcHQpIHsKKwkJZXJy ID0gLUVOT01FTTsKKwkJZ290byBlcnI7CisJfQorCisJZGF0YS5uYW1lW3NpemVvZihkYXRhLm5h bWUpIC0gMV0gPSAnXDAnOworCWZlbmNlID0gc3luY19mZW5jZV9jcmVhdGUoZGF0YS5uYW1lLCBw dCk7CisJaWYgKCFmZW5jZSkgeworCQlzeW5jX3B0X2ZyZWUocHQpOworCQllcnIgPSAtRU5PTUVN OworCQlnb3RvIGVycjsKKwl9CisKKwlkYXRhLmZlbmNlID0gZmQ7CisJaWYgKGNvcHlfdG9fdXNl cigodm9pZCBfX3VzZXIgKilhcmcsICZkYXRhLCBzaXplb2YoZGF0YSkpKSB7CisJCXN5bmNfZmVu Y2VfcHV0KGZlbmNlKTsKKwkJZXJyID0gLUVGQVVMVDsKKwkJZ290byBlcnI7CisJfQorCisJc3lu Y19mZW5jZV9pbnN0YWxsKGZlbmNlLCBmZCk7CisKKwlyZXR1cm4gMDsKKworZXJyOgorCXB1dF91 bnVzZWRfZmQoZmQpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBsb25nIHN3X3N5bmNfaW9j dGxfaW5jKHN0cnVjdCBzd19zeW5jX3RpbWVsaW5lICpvYmosIHVuc2lnbmVkIGxvbmcgYXJnKQor eworCXUzMiB2YWx1ZTsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmdmFsdWUsICh2b2lkIF9fdXNl ciAqKWFyZywgc2l6ZW9mKHZhbHVlKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJc3dfc3luY190 aW1lbGluZV9pbmMob2JqLCB2YWx1ZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGxvbmcg c3dfc3luY19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwKKwkJCSAg dW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IHN3X3N5bmNfdGltZWxpbmUgKm9iaiA9IGZp bGUtPnByaXZhdGVfZGF0YTsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTV19TWU5DX0lPQ19D UkVBVEVfRkVOQ0U6CisJCXJldHVybiBzd19zeW5jX2lvY3RsX2NyZWF0ZV9mZW5jZShvYmosIGFy Zyk7CisKKwljYXNlIFNXX1NZTkNfSU9DX0lOQzoKKwkJcmV0dXJuIHN3X3N5bmNfaW9jdGxfaW5j KG9iaiwgYXJnKTsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRU5PVFRZOworCX0KK30KKworc3Rh dGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3dfc3luY19mb3BzID0geworCS5vd25l ciA9IFRISVNfTU9EVUxFLAorCS5vcGVuID0gc3dfc3luY19vcGVuLAorCS5yZWxlYXNlID0gc3df c3luY19yZWxlYXNlLAorCS51bmxvY2tlZF9pb2N0bCA9IHN3X3N5bmNfaW9jdGwsCisJLmNvbXBh dF9pb2N0bCA9IHN3X3N5bmNfaW9jdGwsCit9OworCitzdGF0aWMgc3RydWN0IG1pc2NkZXZpY2Ug c3dfc3luY19kZXYgPSB7CisJLm1pbm9yCT0gTUlTQ19EWU5BTUlDX01JTk9SLAorCS5uYW1lCT0g InN3X3N5bmMiLAorCS5mb3BzCT0gJnN3X3N5bmNfZm9wcywKK307CisKK3N0YXRpYyBpbnQgX19p bml0IHN3X3N5bmNfZGV2aWNlX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gbWlzY19yZWdpc3Rlcigm c3dfc3luY19kZXYpOworfQorZGV2aWNlX2luaXRjYWxsKHN3X3N5bmNfZGV2aWNlX2luaXQpOwor CisjZW5kaWYgLyogQ09ORklHX1NXX1NZTkNfVVNFUiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9h bmRyb2lkL3N3X3N5bmMuaCBiL2RyaXZlcnMvYW5kcm9pZC9zd19zeW5jLmgKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGJmOGI4NgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZl cnMvYW5kcm9pZC9zd19zeW5jLmgKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIGluY2x1ZGUvbGlu dXgvc3dfc3luYy5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSwgSW5jLgorICoK KyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCisgKiBtYXkgYmUgY29waWVkLCBkaXN0cmli dXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgorICoKKyAqIFRoaXMgcHJvZ3Jh bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl dGFpbHMuCisgKgorICovCisKKyNpZm5kZWYgX0xJTlVYX1NXX1NZTkNfSAorI2RlZmluZSBfTElO VVhfU1dfU1lOQ19ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4 L2tjb25maWcuaD4KKyNpbmNsdWRlIDx1YXBpL3N5bmMvc3dfc3luYy5oPgorI2luY2x1ZGUgInN5 bmMuaCIKKworc3RydWN0IHN3X3N5bmNfdGltZWxpbmUgeworCXN0cnVjdAlzeW5jX3RpbWVsaW5l CW9iajsKKworCXUzMgkJCXZhbHVlOworfTsKKworc3RydWN0IHN3X3N5bmNfcHQgeworCXN0cnVj dCBzeW5jX3B0CQlwdDsKKworCXUzMgkJCXZhbHVlOworfTsKKworI2lmIElTX0VOQUJMRUQoQ09O RklHX1NXX1NZTkMpCitzdHJ1Y3Qgc3dfc3luY190aW1lbGluZSAqc3dfc3luY190aW1lbGluZV9j cmVhdGUoY29uc3QgY2hhciAqbmFtZSk7Cit2b2lkIHN3X3N5bmNfdGltZWxpbmVfaW5jKHN0cnVj dCBzd19zeW5jX3RpbWVsaW5lICpvYmosIHUzMiBpbmMpOworCitzdHJ1Y3Qgc3luY19wdCAqc3df c3luY19wdF9jcmVhdGUoc3RydWN0IHN3X3N5bmNfdGltZWxpbmUgKm9iaiwgdTMyIHZhbHVlKTsK KyNlbHNlCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzd19zeW5jX3RpbWVsaW5lICpzd19zeW5jX3Rp bWVsaW5lX2NyZWF0ZShjb25zdCBjaGFyICpuYW1lKQoreworCXJldHVybiBOVUxMOworfQorCitz dGF0aWMgaW5saW5lIHZvaWQgc3dfc3luY190aW1lbGluZV9pbmMoc3RydWN0IHN3X3N5bmNfdGlt ZWxpbmUgKm9iaiwgdTMyIGluYykKK3sKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgc3luY19w dCAqc3dfc3luY19wdF9jcmVhdGUoc3RydWN0IHN3X3N5bmNfdGltZWxpbmUgKm9iaiwKKwkJCQkJ CXUzMiB2YWx1ZSkKK3sKKwlyZXR1cm4gTlVMTDsKK30KKyNlbmRpZiAvKiBJU19FTkFCTEVEKENP TkZJR19TV19TWU5DKSAqLworCisjZW5kaWYgLyogX0xJTlVYX1NXX1NZTkNfSCAqLwpkaWZmIC0t Z2l0IGEvZHJpdmVycy9hbmRyb2lkL3N5bmMuYyBiL2RyaXZlcnMvYW5kcm9pZC9zeW5jLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2YwZTkxOQotLS0gL2Rldi9udWxsCisr KyBiL2RyaXZlcnMvYW5kcm9pZC9zeW5jLmMKQEAgLTAsMCArMSw3MzQgQEAKKy8qCisgKiBkcml2 ZXJzL2Jhc2Uvc3luYy5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSwgSW5jLgor ICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCisgKiBtYXkgYmUgY29waWVkLCBkaXN0 cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgorICoKKyAqIFRoaXMgcHJv Z3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl IGRldGFpbHMuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVk ZSA8bGludXgvZXhwb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvZmlsZS5oPgorI2luY2x1ZGUgPGxp bnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcG9s bC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUu aD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgor I2luY2x1ZGUgPGxpbnV4L2Fub25faW5vZGVzLmg+CisKKyNpbmNsdWRlICJzeW5jLmgiCisKKyNk ZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UUworI2luY2x1ZGUgInRyYWNlL3N5bmMuaCIKKworc3Rh dGljIGNvbnN0IHN0cnVjdCBmZW5jZV9vcHMgYW5kcm9pZF9mZW5jZV9vcHM7CitzdGF0aWMgY29u c3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzeW5jX2ZlbmNlX2ZvcHM7CisKK3N0cnVjdCBzeW5j X3RpbWVsaW5lICpzeW5jX3RpbWVsaW5lX2NyZWF0ZShjb25zdCBzdHJ1Y3Qgc3luY190aW1lbGlu ZV9vcHMgKm9wcywKKwkJCQkJICAgaW50IHNpemUsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3Ry dWN0IHN5bmNfdGltZWxpbmUgKm9iajsKKworCWlmIChzaXplIDwgc2l6ZW9mKHN0cnVjdCBzeW5j X3RpbWVsaW5lKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlvYmogPSBremFsbG9jKHNpemUsIEdGUF9L RVJORUwpOworCWlmIChvYmogPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwlrcmVmX2luaXQo Jm9iai0+a3JlZik7CisJb2JqLT5vcHMgPSBvcHM7CisJb2JqLT5jb250ZXh0ID0gZmVuY2VfY29u dGV4dF9hbGxvYygxKTsKKwlzdHJsY3B5KG9iai0+bmFtZSwgbmFtZSwgc2l6ZW9mKG9iai0+bmFt ZSkpOworCisJSU5JVF9MSVNUX0hFQUQoJm9iai0+Y2hpbGRfbGlzdF9oZWFkKTsKKwlJTklUX0xJ U1RfSEVBRCgmb2JqLT5hY3RpdmVfbGlzdF9oZWFkKTsKKwlzcGluX2xvY2tfaW5pdCgmb2JqLT5j aGlsZF9saXN0X2xvY2spOworCisJc3luY190aW1lbGluZV9kZWJ1Z19hZGQob2JqKTsKKworCXJl dHVybiBvYmo7Cit9CitFWFBPUlRfU1lNQk9MKHN5bmNfdGltZWxpbmVfY3JlYXRlKTsKKworc3Rh dGljIHZvaWQgc3luY190aW1lbGluZV9mcmVlKHN0cnVjdCBrcmVmICprcmVmKQoreworCXN0cnVj dCBzeW5jX3RpbWVsaW5lICpvYmogPQorCQljb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IHN5bmNf dGltZWxpbmUsIGtyZWYpOworCisJc3luY190aW1lbGluZV9kZWJ1Z19yZW1vdmUob2JqKTsKKwor CWlmIChvYmotPm9wcy0+cmVsZWFzZV9vYmopCisJCW9iai0+b3BzLT5yZWxlYXNlX29iaihvYmop OworCisJa2ZyZWUob2JqKTsKK30KKworc3RhdGljIHZvaWQgc3luY190aW1lbGluZV9nZXQoc3Ry dWN0IHN5bmNfdGltZWxpbmUgKm9iaikKK3sKKwlrcmVmX2dldCgmb2JqLT5rcmVmKTsKK30KKwor c3RhdGljIHZvaWQgc3luY190aW1lbGluZV9wdXQoc3RydWN0IHN5bmNfdGltZWxpbmUgKm9iaikK K3sKKwlrcmVmX3B1dCgmb2JqLT5rcmVmLCBzeW5jX3RpbWVsaW5lX2ZyZWUpOworfQorCit2b2lk IHN5bmNfdGltZWxpbmVfZGVzdHJveShzdHJ1Y3Qgc3luY190aW1lbGluZSAqb2JqKQoreworCW9i ai0+ZGVzdHJveWVkID0gdHJ1ZTsKKwkvKgorCSAqIEVuc3VyZSB0aW1lbGluZSBpcyBtYXJrZWQg YXMgZGVzdHJveWVkIGJlZm9yZQorCSAqIGNoYW5naW5nIHRpbWVsaW5lJ3MgZmVuY2VzIHN0YXR1 cy4KKwkgKi8KKwlzbXBfd21iKCk7CisKKwkvKgorCSAqIHNpZ25hbCBhbnkgY2hpbGRyZW4gdGhh dCB0aGVpciBwYXJlbnQgaXMgZ29pbmcgYXdheS4KKwkgKi8KKwlzeW5jX3RpbWVsaW5lX3NpZ25h bChvYmopOworCXN5bmNfdGltZWxpbmVfcHV0KG9iaik7Cit9CitFWFBPUlRfU1lNQk9MKHN5bmNf dGltZWxpbmVfZGVzdHJveSk7CisKK3ZvaWQgc3luY190aW1lbGluZV9zaWduYWwoc3RydWN0IHN5 bmNfdGltZWxpbmUgKm9iaikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCUxJU1RfSEVBRChz aWduYWxlZF9wdHMpOworCXN0cnVjdCBzeW5jX3B0ICpwdCwgKm5leHQ7CisKKwl0cmFjZV9zeW5j X3RpbWVsaW5lKG9iaik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmb2JqLT5jaGlsZF9saXN0X2xv Y2ssIGZsYWdzKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwdCwgbmV4dCwgJm9iai0+ YWN0aXZlX2xpc3RfaGVhZCwKKwkJCQkgYWN0aXZlX2xpc3QpIHsKKwkJaWYgKGZlbmNlX2lzX3Np Z25hbGVkX2xvY2tlZCgmcHQtPmJhc2UpKQorCQkJbGlzdF9kZWxfaW5pdCgmcHQtPmFjdGl2ZV9s aXN0KTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvYmotPmNoaWxkX2xpc3RfbG9j aywgZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTChzeW5jX3RpbWVsaW5lX3NpZ25hbCk7CisKK3N0 cnVjdCBzeW5jX3B0ICpzeW5jX3B0X2NyZWF0ZShzdHJ1Y3Qgc3luY190aW1lbGluZSAqb2JqLCBp bnQgc2l6ZSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBzeW5jX3B0ICpwdDsK KworCWlmIChzaXplIDwgc2l6ZW9mKHN0cnVjdCBzeW5jX3B0KSkKKwkJcmV0dXJuIE5VTEw7CisK KwlwdCA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKHB0ID09IE5VTEwpCisJCXJl dHVybiBOVUxMOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm9iai0+Y2hpbGRfbGlzdF9sb2NrLCBm bGFncyk7CisJc3luY190aW1lbGluZV9nZXQob2JqKTsKKwlmZW5jZV9pbml0KCZwdC0+YmFzZSwg JmFuZHJvaWRfZmVuY2Vfb3BzLCAmb2JqLT5jaGlsZF9saXN0X2xvY2ssCisJCSAgIG9iai0+Y29u dGV4dCwgKytvYmotPnZhbHVlKTsKKwlsaXN0X2FkZF90YWlsKCZwdC0+Y2hpbGRfbGlzdCwgJm9i ai0+Y2hpbGRfbGlzdF9oZWFkKTsKKwlJTklUX0xJU1RfSEVBRCgmcHQtPmFjdGl2ZV9saXN0KTsK KwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvYmotPmNoaWxkX2xpc3RfbG9jaywgZmxhZ3MpOwor CXJldHVybiBwdDsKK30KK0VYUE9SVF9TWU1CT0woc3luY19wdF9jcmVhdGUpOworCit2b2lkIHN5 bmNfcHRfZnJlZShzdHJ1Y3Qgc3luY19wdCAqcHQpCit7CisJZmVuY2VfcHV0KCZwdC0+YmFzZSk7 Cit9CitFWFBPUlRfU1lNQk9MKHN5bmNfcHRfZnJlZSk7CisKK3N0YXRpYyBzdHJ1Y3Qgc3luY19m ZW5jZSAqc3luY19mZW5jZV9hbGxvYyhpbnQgc2l6ZSwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlz dHJ1Y3Qgc3luY19mZW5jZSAqZmVuY2U7CisKKwlmZW5jZSA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tF Uk5FTCk7CisJaWYgKGZlbmNlID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJZmVuY2UtPmZp bGUgPSBhbm9uX2lub2RlX2dldGZpbGUoInN5bmNfZmVuY2UiLCAmc3luY19mZW5jZV9mb3BzLAor CQkJCQkgZmVuY2UsIDApOworCWlmIChJU19FUlIoZmVuY2UtPmZpbGUpKQorCQlnb3RvIGVycjsK KworCWtyZWZfaW5pdCgmZmVuY2UtPmtyZWYpOworCXN0cmxjcHkoZmVuY2UtPm5hbWUsIG5hbWUs IHNpemVvZihmZW5jZS0+bmFtZSkpOworCisJaW5pdF93YWl0cXVldWVfaGVhZCgmZmVuY2UtPndx KTsKKworCXJldHVybiBmZW5jZTsKKworZXJyOgorCWtmcmVlKGZlbmNlKTsKKwlyZXR1cm4gTlVM TDsKK30KKworc3RhdGljIHZvaWQgZmVuY2VfY2hlY2tfY2JfZnVuYyhzdHJ1Y3QgZmVuY2UgKmYs IHN0cnVjdCBmZW5jZV9jYiAqY2IpCit7CisJc3RydWN0IHN5bmNfZmVuY2VfY2IgKmNoZWNrOwor CXN0cnVjdCBzeW5jX2ZlbmNlICpmZW5jZTsKKworCWNoZWNrID0gY29udGFpbmVyX29mKGNiLCBz dHJ1Y3Qgc3luY19mZW5jZV9jYiwgY2IpOworCWZlbmNlID0gY2hlY2stPmZlbmNlOworCisJaWYg KGF0b21pY19kZWNfYW5kX3Rlc3QoJmZlbmNlLT5zdGF0dXMpKQorCQl3YWtlX3VwX2FsbCgmZmVu Y2UtPndxKTsKK30KKworLyogVE9ETzogaW1wbGVtZW50IGEgY3JlYXRlIHdoaWNoIHRha2VzIG1v cmUgdGhhdCBvbmUgc3luY19wdCAqLworc3RydWN0IHN5bmNfZmVuY2UgKnN5bmNfZmVuY2VfY3Jl YXRlX2RtYShjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgZmVuY2UgKnB0KQoreworCXN0cnVjdCBz eW5jX2ZlbmNlICpmZW5jZTsKKworCWZlbmNlID0gc3luY19mZW5jZV9hbGxvYyhvZmZzZXRvZihz dHJ1Y3Qgc3luY19mZW5jZSwgY2JzWzFdKSwgbmFtZSk7CisJaWYgKGZlbmNlID09IE5VTEwpCisJ CXJldHVybiBOVUxMOworCisJZmVuY2UtPm51bV9mZW5jZXMgPSAxOworCWF0b21pY19zZXQoJmZl bmNlLT5zdGF0dXMsIDEpOworCisJZmVuY2UtPmNic1swXS5zeW5jX3B0ID0gcHQ7CisJZmVuY2Ut PmNic1swXS5mZW5jZSA9IGZlbmNlOworCWlmIChmZW5jZV9hZGRfY2FsbGJhY2socHQsICZmZW5j ZS0+Y2JzWzBdLmNiLCBmZW5jZV9jaGVja19jYl9mdW5jKSkKKwkJYXRvbWljX2RlYygmZmVuY2Ut PnN0YXR1cyk7CisKKwlzeW5jX2ZlbmNlX2RlYnVnX2FkZChmZW5jZSk7CisKKwlyZXR1cm4gZmVu Y2U7Cit9CitFWFBPUlRfU1lNQk9MKHN5bmNfZmVuY2VfY3JlYXRlX2RtYSk7CisKK3N0cnVjdCBz eW5jX2ZlbmNlICpzeW5jX2ZlbmNlX2NyZWF0ZShjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3Qgc3lu Y19wdCAqcHQpCit7CisJcmV0dXJuIHN5bmNfZmVuY2VfY3JlYXRlX2RtYShuYW1lLCAmcHQtPmJh c2UpOworfQorRVhQT1JUX1NZTUJPTChzeW5jX2ZlbmNlX2NyZWF0ZSk7CisKK3N0cnVjdCBzeW5j X2ZlbmNlICpzeW5jX2ZlbmNlX2ZkZ2V0KGludCBmZCkKK3sKKwlzdHJ1Y3QgZmlsZSAqZmlsZSA9 IGZnZXQoZmQpOworCisJaWYgKGZpbGUgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAo ZmlsZS0+Zl9vcCAhPSAmc3luY19mZW5jZV9mb3BzKQorCQlnb3RvIGVycjsKKworCXJldHVybiBm aWxlLT5wcml2YXRlX2RhdGE7CisKK2VycjoKKwlmcHV0KGZpbGUpOworCXJldHVybiBOVUxMOwor fQorRVhQT1JUX1NZTUJPTChzeW5jX2ZlbmNlX2ZkZ2V0KTsKKwordm9pZCBzeW5jX2ZlbmNlX3B1 dChzdHJ1Y3Qgc3luY19mZW5jZSAqZmVuY2UpCit7CisJZnB1dChmZW5jZS0+ZmlsZSk7Cit9CitF WFBPUlRfU1lNQk9MKHN5bmNfZmVuY2VfcHV0KTsKKwordm9pZCBzeW5jX2ZlbmNlX2luc3RhbGwo c3RydWN0IHN5bmNfZmVuY2UgKmZlbmNlLCBpbnQgZmQpCit7CisJZmRfaW5zdGFsbChmZCwgZmVu Y2UtPmZpbGUpOworfQorRVhQT1JUX1NZTUJPTChzeW5jX2ZlbmNlX2luc3RhbGwpOworCitzdGF0 aWMgdm9pZCBzeW5jX2ZlbmNlX2FkZF9wdChzdHJ1Y3Qgc3luY19mZW5jZSAqZmVuY2UsCisJCQkg ICAgICBpbnQgKmksIHN0cnVjdCBmZW5jZSAqcHQpCit7CisJZmVuY2UtPmNic1sqaV0uc3luY19w dCA9IHB0OworCWZlbmNlLT5jYnNbKmldLmZlbmNlID0gZmVuY2U7CisKKwlpZiAoIWZlbmNlX2Fk ZF9jYWxsYmFjayhwdCwgJmZlbmNlLT5jYnNbKmldLmNiLCBmZW5jZV9jaGVja19jYl9mdW5jKSkg eworCQlmZW5jZV9nZXQocHQpOworCQkoKmkpKys7CisJfQorfQorCitzdHJ1Y3Qgc3luY19mZW5j ZSAqc3luY19mZW5jZV9tZXJnZShjb25zdCBjaGFyICpuYW1lLAorCQkJCSAgICBzdHJ1Y3Qgc3lu Y19mZW5jZSAqYSwgc3RydWN0IHN5bmNfZmVuY2UgKmIpCit7CisJaW50IG51bV9mZW5jZXMgPSBh LT5udW1fZmVuY2VzICsgYi0+bnVtX2ZlbmNlczsKKwlzdHJ1Y3Qgc3luY19mZW5jZSAqZmVuY2U7 CisJaW50IGksIGlfYSwgaV9iOworCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IG9mZnNldG9mKHN0cnVj dCBzeW5jX2ZlbmNlLCBjYnNbbnVtX2ZlbmNlc10pOworCisJZmVuY2UgPSBzeW5jX2ZlbmNlX2Fs bG9jKHNpemUsIG5hbWUpOworCWlmIChmZW5jZSA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKwor CWF0b21pY19zZXQoJmZlbmNlLT5zdGF0dXMsIG51bV9mZW5jZXMpOworCisJLyoKKwkgKiBBc3N1 bWUgc3luY19mZW5jZSBhIGFuZCBiIGFyZSBib3RoIG9yZGVyZWQgYW5kIGhhdmUgbm8KKwkgKiBk dXBsaWNhdGVzIHdpdGggdGhlIHNhbWUgY29udGV4dC4KKwkgKgorCSAqIElmIGEgc3luY19mZW5j ZSBjYW4gb25seSBiZSBjcmVhdGVkIHdpdGggc3luY19mZW5jZV9tZXJnZQorCSAqIGFuZCBzeW5j X2ZlbmNlX2NyZWF0ZSwgdGhpcyBpcyBhIHJlYXNvbmFibGUgYXNzdW1wdGlvbi4KKwkgKi8KKwlm b3IgKGkgPSBpX2EgPSBpX2IgPSAwOyBpX2EgPCBhLT5udW1fZmVuY2VzICYmIGlfYiA8IGItPm51 bV9mZW5jZXM7ICkgeworCQlzdHJ1Y3QgZmVuY2UgKnB0X2EgPSBhLT5jYnNbaV9hXS5zeW5jX3B0 OworCQlzdHJ1Y3QgZmVuY2UgKnB0X2IgPSBiLT5jYnNbaV9iXS5zeW5jX3B0OworCisJCWlmIChw dF9hLT5jb250ZXh0IDwgcHRfYi0+Y29udGV4dCkgeworCQkJc3luY19mZW5jZV9hZGRfcHQoZmVu Y2UsICZpLCBwdF9hKTsKKworCQkJaV9hKys7CisJCX0gZWxzZSBpZiAocHRfYS0+Y29udGV4dCA+ IHB0X2ItPmNvbnRleHQpIHsKKwkJCXN5bmNfZmVuY2VfYWRkX3B0KGZlbmNlLCAmaSwgcHRfYik7 CisKKwkJCWlfYisrOworCQl9IGVsc2UgeworCQkJaWYgKHB0X2EtPnNlcW5vIC0gcHRfYi0+c2Vx bm8gPD0gSU5UX01BWCkKKwkJCQlzeW5jX2ZlbmNlX2FkZF9wdChmZW5jZSwgJmksIHB0X2EpOwor CQkJZWxzZQorCQkJCXN5bmNfZmVuY2VfYWRkX3B0KGZlbmNlLCAmaSwgcHRfYik7CisKKwkJCWlf YSsrOworCQkJaV9iKys7CisJCX0KKwl9CisKKwlmb3IgKDsgaV9hIDwgYS0+bnVtX2ZlbmNlczsg aV9hKyspCisJCXN5bmNfZmVuY2VfYWRkX3B0KGZlbmNlLCAmaSwgYS0+Y2JzW2lfYV0uc3luY19w dCk7CisKKwlmb3IgKDsgaV9iIDwgYi0+bnVtX2ZlbmNlczsgaV9iKyspCisJCXN5bmNfZmVuY2Vf YWRkX3B0KGZlbmNlLCAmaSwgYi0+Y2JzW2lfYl0uc3luY19wdCk7CisKKwlpZiAobnVtX2ZlbmNl cyA+IGkpCisJCWF0b21pY19zdWIobnVtX2ZlbmNlcyAtIGksICZmZW5jZS0+c3RhdHVzKTsKKwlm ZW5jZS0+bnVtX2ZlbmNlcyA9IGk7CisKKwlzeW5jX2ZlbmNlX2RlYnVnX2FkZChmZW5jZSk7CisJ cmV0dXJuIGZlbmNlOworfQorRVhQT1JUX1NZTUJPTChzeW5jX2ZlbmNlX21lcmdlKTsKKworaW50 IHN5bmNfZmVuY2Vfd2FrZV91cF93cSh3YWl0X3F1ZXVlX3QgKmN1cnIsIHVuc2lnbmVkIG1vZGUs CisJCQkJIGludCB3YWtlX2ZsYWdzLCB2b2lkICprZXkpCit7CisJc3RydWN0IHN5bmNfZmVuY2Vf d2FpdGVyICp3YWl0OworCisJd2FpdCA9IGNvbnRhaW5lcl9vZihjdXJyLCBzdHJ1Y3Qgc3luY19m ZW5jZV93YWl0ZXIsIHdvcmspOworCWxpc3RfZGVsX2luaXQoJndhaXQtPndvcmsudGFza19saXN0 KTsKKworCXdhaXQtPmNhbGxiYWNrKHdhaXQtPndvcmsucHJpdmF0ZSwgd2FpdCk7CisJcmV0dXJu IDE7Cit9CisKK2ludCBzeW5jX2ZlbmNlX3dhaXRfYXN5bmMoc3RydWN0IHN5bmNfZmVuY2UgKmZl bmNlLAorCQkJICBzdHJ1Y3Qgc3luY19mZW5jZV93YWl0ZXIgKndhaXRlcikKK3sKKwlpbnQgZXJy ID0gYXRvbWljX3JlYWQoJmZlbmNlLT5zdGF0dXMpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisK KwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKworCWlmICghZXJyKQorCQlyZXR1cm4gMTsK KworCWluaXRfd2FpdHF1ZXVlX2Z1bmNfZW50cnkoJndhaXRlci0+d29yaywgc3luY19mZW5jZV93 YWtlX3VwX3dxKTsKKwl3YWl0ZXItPndvcmsucHJpdmF0ZSA9IGZlbmNlOworCisJc3Bpbl9sb2Nr X2lycXNhdmUoJmZlbmNlLT53cS5sb2NrLCBmbGFncyk7CisJZXJyID0gYXRvbWljX3JlYWQoJmZl bmNlLT5zdGF0dXMpOworCWlmIChlcnIgPiAwKQorCQlfX2FkZF93YWl0X3F1ZXVlX3RhaWwoJmZl bmNlLT53cSwgJndhaXRlci0+d29yayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmVuY2Ut PndxLmxvY2ssIGZsYWdzKTsKKworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJcmV0 dXJuICFlcnI7Cit9CitFWFBPUlRfU1lNQk9MKHN5bmNfZmVuY2Vfd2FpdF9hc3luYyk7CisKK2lu dCBzeW5jX2ZlbmNlX2NhbmNlbF9hc3luYyhzdHJ1Y3Qgc3luY19mZW5jZSAqZmVuY2UsCisJCQkg ICAgIHN0cnVjdCBzeW5jX2ZlbmNlX3dhaXRlciAqd2FpdGVyKQoreworCXVuc2lnbmVkIGxvbmcg ZmxhZ3M7CisJaW50IHJldCA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZmVuY2UtPndxLmxv Y2ssIGZsYWdzKTsKKwlpZiAoIWxpc3RfZW1wdHkoJndhaXRlci0+d29yay50YXNrX2xpc3QpKQor CQlsaXN0X2RlbF9pbml0KCZ3YWl0ZXItPndvcmsudGFza19saXN0KTsKKwllbHNlCisJCXJldCA9 IC1FTk9FTlQ7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmVuY2UtPndxLmxvY2ssIGZsYWdz KTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChzeW5jX2ZlbmNlX2NhbmNlbF9hc3lu Yyk7CisKK2ludCBzeW5jX2ZlbmNlX3dhaXQoc3RydWN0IHN5bmNfZmVuY2UgKmZlbmNlLCBsb25n IHRpbWVvdXQpCit7CisJbG9uZyByZXQ7CisJaW50IGk7CisKKwlpZiAodGltZW91dCA8IDApCisJ CXRpbWVvdXQgPSBNQVhfU0NIRURVTEVfVElNRU9VVDsKKwllbHNlCisJCXRpbWVvdXQgPSBtc2Vj c190b19qaWZmaWVzKHRpbWVvdXQpOworCisJdHJhY2Vfc3luY193YWl0KGZlbmNlLCAxKTsKKwlm b3IgKGkgPSAwOyBpIDwgZmVuY2UtPm51bV9mZW5jZXM7ICsraSkKKwkJdHJhY2Vfc3luY19wdChm ZW5jZS0+Y2JzW2ldLnN5bmNfcHQpOworCXJldCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90 aW1lb3V0KGZlbmNlLT53cSwKKwkJCQkJICAgICAgIGF0b21pY19yZWFkKCZmZW5jZS0+c3RhdHVz KSA8PSAwLAorCQkJCQkgICAgICAgdGltZW91dCk7CisJdHJhY2Vfc3luY193YWl0KGZlbmNlLCAw KTsKKworCWlmIChyZXQgPCAwKSB7CisJCXJldHVybiByZXQ7CisJfSBlbHNlIGlmIChyZXQgPT0g MCkgeworCQlpZiAodGltZW91dCkgeworCQkJcHJfaW5mbygiZmVuY2UgdGltZW91dCBvbiBbJXBd IGFmdGVyICVkbXNcbiIsIGZlbmNlLAorCQkJCWppZmZpZXNfdG9fbXNlY3ModGltZW91dCkpOwor CQkJc3luY19kdW1wKCk7CisJCX0KKwkJcmV0dXJuIC1FVElNRTsKKwl9CisKKwlyZXQgPSBhdG9t aWNfcmVhZCgmZmVuY2UtPnN0YXR1cyk7CisJaWYgKHJldCkgeworCQlwcl9pbmZvKCJmZW5jZSBl cnJvciAlbGQgb24gWyVwXVxuIiwgcmV0LCBmZW5jZSk7CisJCXN5bmNfZHVtcCgpOworCX0KKwly ZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChzeW5jX2ZlbmNlX3dhaXQpOworCitzdGF0aWMg Y29uc3QgY2hhciAqYW5kcm9pZF9mZW5jZV9nZXRfZHJpdmVyX25hbWUoc3RydWN0IGZlbmNlICpm ZW5jZSkKK3sKKwlzdHJ1Y3Qgc3luY19wdCAqcHQgPSBjb250YWluZXJfb2YoZmVuY2UsIHN0cnVj dCBzeW5jX3B0LCBiYXNlKTsKKwlzdHJ1Y3Qgc3luY190aW1lbGluZSAqcGFyZW50ID0gc3luY19w dF9wYXJlbnQocHQpOworCisJcmV0dXJuIHBhcmVudC0+b3BzLT5kcml2ZXJfbmFtZTsKK30KKwor c3RhdGljIGNvbnN0IGNoYXIgKmFuZHJvaWRfZmVuY2VfZ2V0X3RpbWVsaW5lX25hbWUoc3RydWN0 IGZlbmNlICpmZW5jZSkKK3sKKwlzdHJ1Y3Qgc3luY19wdCAqcHQgPSBjb250YWluZXJfb2YoZmVu Y2UsIHN0cnVjdCBzeW5jX3B0LCBiYXNlKTsKKwlzdHJ1Y3Qgc3luY190aW1lbGluZSAqcGFyZW50 ID0gc3luY19wdF9wYXJlbnQocHQpOworCisJcmV0dXJuIHBhcmVudC0+bmFtZTsKK30KKworc3Rh dGljIHZvaWQgYW5kcm9pZF9mZW5jZV9yZWxlYXNlKHN0cnVjdCBmZW5jZSAqZmVuY2UpCit7CisJ c3RydWN0IHN5bmNfcHQgKnB0ID0gY29udGFpbmVyX29mKGZlbmNlLCBzdHJ1Y3Qgc3luY19wdCwg YmFzZSk7CisJc3RydWN0IHN5bmNfdGltZWxpbmUgKnBhcmVudCA9IHN5bmNfcHRfcGFyZW50KHB0 KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoZmVuY2UtPmxv Y2ssIGZsYWdzKTsKKwlsaXN0X2RlbCgmcHQtPmNoaWxkX2xpc3QpOworCWlmIChXQVJOX09OX09O Q0UoIWxpc3RfZW1wdHkoJnB0LT5hY3RpdmVfbGlzdCkpKQorCQlsaXN0X2RlbCgmcHQtPmFjdGl2 ZV9saXN0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKGZlbmNlLT5sb2NrLCBmbGFncyk7CisK KwlpZiAocGFyZW50LT5vcHMtPmZyZWVfcHQpCisJCXBhcmVudC0+b3BzLT5mcmVlX3B0KHB0KTsK KworCXN5bmNfdGltZWxpbmVfcHV0KHBhcmVudCk7CisJZmVuY2VfZnJlZSgmcHQtPmJhc2UpOwor fQorCitzdGF0aWMgYm9vbCBhbmRyb2lkX2ZlbmNlX3NpZ25hbGVkKHN0cnVjdCBmZW5jZSAqZmVu Y2UpCit7CisJc3RydWN0IHN5bmNfcHQgKnB0ID0gY29udGFpbmVyX29mKGZlbmNlLCBzdHJ1Y3Qg c3luY19wdCwgYmFzZSk7CisJc3RydWN0IHN5bmNfdGltZWxpbmUgKnBhcmVudCA9IHN5bmNfcHRf cGFyZW50KHB0KTsKKwlpbnQgcmV0OworCisJcmV0ID0gcGFyZW50LT5vcHMtPmhhc19zaWduYWxl ZChwdCk7CisJaWYgKHJldCA8IDApCisJCWZlbmNlLT5zdGF0dXMgPSByZXQ7CisJcmV0dXJuIHJl dDsKK30KKworc3RhdGljIGJvb2wgYW5kcm9pZF9mZW5jZV9lbmFibGVfc2lnbmFsaW5nKHN0cnVj dCBmZW5jZSAqZmVuY2UpCit7CisJc3RydWN0IHN5bmNfcHQgKnB0ID0gY29udGFpbmVyX29mKGZl bmNlLCBzdHJ1Y3Qgc3luY19wdCwgYmFzZSk7CisJc3RydWN0IHN5bmNfdGltZWxpbmUgKnBhcmVu dCA9IHN5bmNfcHRfcGFyZW50KHB0KTsKKworCWlmIChhbmRyb2lkX2ZlbmNlX3NpZ25hbGVkKGZl bmNlKSkKKwkJcmV0dXJuIGZhbHNlOworCisJbGlzdF9hZGRfdGFpbCgmcHQtPmFjdGl2ZV9saXN0 LCAmcGFyZW50LT5hY3RpdmVfbGlzdF9oZWFkKTsKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGlj IGludCBhbmRyb2lkX2ZlbmNlX2ZpbGxfZHJpdmVyX2RhdGEoc3RydWN0IGZlbmNlICpmZW5jZSwK KwkJCQkJICB2b2lkICpkYXRhLCBpbnQgc2l6ZSkKK3sKKwlzdHJ1Y3Qgc3luY19wdCAqcHQgPSBj b250YWluZXJfb2YoZmVuY2UsIHN0cnVjdCBzeW5jX3B0LCBiYXNlKTsKKwlzdHJ1Y3Qgc3luY190 aW1lbGluZSAqcGFyZW50ID0gc3luY19wdF9wYXJlbnQocHQpOworCisJaWYgKCFwYXJlbnQtPm9w cy0+ZmlsbF9kcml2ZXJfZGF0YSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIHBhcmVudC0+b3BzLT5m aWxsX2RyaXZlcl9kYXRhKHB0LCBkYXRhLCBzaXplKTsKK30KKworc3RhdGljIHZvaWQgYW5kcm9p ZF9mZW5jZV92YWx1ZV9zdHIoc3RydWN0IGZlbmNlICpmZW5jZSwKKwkJCQkgICAgY2hhciAqc3Ry LCBpbnQgc2l6ZSkKK3sKKwlzdHJ1Y3Qgc3luY19wdCAqcHQgPSBjb250YWluZXJfb2YoZmVuY2Us IHN0cnVjdCBzeW5jX3B0LCBiYXNlKTsKKwlzdHJ1Y3Qgc3luY190aW1lbGluZSAqcGFyZW50ID0g c3luY19wdF9wYXJlbnQocHQpOworCisJaWYgKCFwYXJlbnQtPm9wcy0+cHRfdmFsdWVfc3RyKSB7 CisJCWlmIChzaXplKQorCQkJKnN0ciA9IDA7CisJCXJldHVybjsKKwl9CisJcGFyZW50LT5vcHMt PnB0X3ZhbHVlX3N0cihwdCwgc3RyLCBzaXplKTsKK30KKworc3RhdGljIHZvaWQgYW5kcm9pZF9m ZW5jZV90aW1lbGluZV92YWx1ZV9zdHIoc3RydWN0IGZlbmNlICpmZW5jZSwKKwkJCQkJICAgICBj aGFyICpzdHIsIGludCBzaXplKQoreworCXN0cnVjdCBzeW5jX3B0ICpwdCA9IGNvbnRhaW5lcl9v ZihmZW5jZSwgc3RydWN0IHN5bmNfcHQsIGJhc2UpOworCXN0cnVjdCBzeW5jX3RpbWVsaW5lICpw YXJlbnQgPSBzeW5jX3B0X3BhcmVudChwdCk7CisKKwlpZiAoIXBhcmVudC0+b3BzLT50aW1lbGlu ZV92YWx1ZV9zdHIpIHsKKwkJaWYgKHNpemUpCisJCQkqc3RyID0gMDsKKwkJcmV0dXJuOworCX0K KwlwYXJlbnQtPm9wcy0+dGltZWxpbmVfdmFsdWVfc3RyKHBhcmVudCwgc3RyLCBzaXplKTsKK30K Kworc3RhdGljIGNvbnN0IHN0cnVjdCBmZW5jZV9vcHMgYW5kcm9pZF9mZW5jZV9vcHMgPSB7CisJ LmdldF9kcml2ZXJfbmFtZSA9IGFuZHJvaWRfZmVuY2VfZ2V0X2RyaXZlcl9uYW1lLAorCS5nZXRf dGltZWxpbmVfbmFtZSA9IGFuZHJvaWRfZmVuY2VfZ2V0X3RpbWVsaW5lX25hbWUsCisJLmVuYWJs ZV9zaWduYWxpbmcgPSBhbmRyb2lkX2ZlbmNlX2VuYWJsZV9zaWduYWxpbmcsCisJLnNpZ25hbGVk ID0gYW5kcm9pZF9mZW5jZV9zaWduYWxlZCwKKwkud2FpdCA9IGZlbmNlX2RlZmF1bHRfd2FpdCwK KwkucmVsZWFzZSA9IGFuZHJvaWRfZmVuY2VfcmVsZWFzZSwKKwkuZmlsbF9kcml2ZXJfZGF0YSA9 IGFuZHJvaWRfZmVuY2VfZmlsbF9kcml2ZXJfZGF0YSwKKwkuZmVuY2VfdmFsdWVfc3RyID0gYW5k cm9pZF9mZW5jZV92YWx1ZV9zdHIsCisJLnRpbWVsaW5lX3ZhbHVlX3N0ciA9IGFuZHJvaWRfZmVu Y2VfdGltZWxpbmVfdmFsdWVfc3RyLAorfTsKKworc3RhdGljIHZvaWQgc3luY19mZW5jZV9mcmVl KHN0cnVjdCBrcmVmICprcmVmKQoreworCXN0cnVjdCBzeW5jX2ZlbmNlICpmZW5jZSA9IGNvbnRh aW5lcl9vZihrcmVmLCBzdHJ1Y3Qgc3luY19mZW5jZSwga3JlZik7CisJaW50IGksIHN0YXR1cyA9 IGF0b21pY19yZWFkKCZmZW5jZS0+c3RhdHVzKTsKKworCWZvciAoaSA9IDA7IGkgPCBmZW5jZS0+ bnVtX2ZlbmNlczsgKytpKSB7CisJCWlmIChzdGF0dXMpCisJCQlmZW5jZV9yZW1vdmVfY2FsbGJh Y2soZmVuY2UtPmNic1tpXS5zeW5jX3B0LAorCQkJCQkgICAgICAmZmVuY2UtPmNic1tpXS5jYik7 CisJCWZlbmNlX3B1dChmZW5jZS0+Y2JzW2ldLnN5bmNfcHQpOworCX0KKworCWtmcmVlKGZlbmNl KTsKK30KKworc3RhdGljIGludCBzeW5jX2ZlbmNlX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9k ZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHN5bmNfZmVuY2UgKmZlbmNlID0gZmls ZS0+cHJpdmF0ZV9kYXRhOworCisJc3luY19mZW5jZV9kZWJ1Z19yZW1vdmUoZmVuY2UpOworCisJ a3JlZl9wdXQoJmZlbmNlLT5rcmVmLCBzeW5jX2ZlbmNlX2ZyZWUpOworCXJldHVybiAwOworfQor CitzdGF0aWMgdW5zaWduZWQgaW50IHN5bmNfZmVuY2VfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwg cG9sbF90YWJsZSAqd2FpdCkKK3sKKwlzdHJ1Y3Qgc3luY19mZW5jZSAqZmVuY2UgPSBmaWxlLT5w cml2YXRlX2RhdGE7CisJaW50IHN0YXR1czsKKworCXBvbGxfd2FpdChmaWxlLCAmZmVuY2UtPndx LCB3YWl0KTsKKworCXN0YXR1cyA9IGF0b21pY19yZWFkKCZmZW5jZS0+c3RhdHVzKTsKKworCWlm ICghc3RhdHVzKQorCQlyZXR1cm4gUE9MTElOOworCWVsc2UgaWYgKHN0YXR1cyA8IDApCisJCXJl dHVybiBQT0xMRVJSOworCXJldHVybiAwOworfQorCitzdGF0aWMgbG9uZyBzeW5jX2ZlbmNlX2lv Y3RsX3dhaXQoc3RydWN0IHN5bmNfZmVuY2UgKmZlbmNlLCB1bnNpZ25lZCBsb25nIGFyZykKK3sK KwlfX3MzMiB2YWx1ZTsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmdmFsdWUsICh2b2lkIF9fdXNl ciAqKWFyZywgc2l6ZW9mKHZhbHVlKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJcmV0dXJuIHN5 bmNfZmVuY2Vfd2FpdChmZW5jZSwgdmFsdWUpOworfQorCitzdGF0aWMgbG9uZyBzeW5jX2ZlbmNl X2lvY3RsX21lcmdlKHN0cnVjdCBzeW5jX2ZlbmNlICpmZW5jZSwgdW5zaWduZWQgbG9uZyBhcmcp Cit7CisJaW50IGZkID0gZ2V0X3VudXNlZF9mZF9mbGFncyhPX0NMT0VYRUMpOworCWludCBlcnI7 CisJc3RydWN0IHN5bmNfZmVuY2UgKmZlbmNlMiwgKmZlbmNlMzsKKwlzdHJ1Y3Qgc3luY19tZXJn ZV9kYXRhIGRhdGE7CisKKwlpZiAoZmQgPCAwKQorCQlyZXR1cm4gZmQ7CisKKwlpZiAoY29weV9m cm9tX3VzZXIoJmRhdGEsICh2b2lkIF9fdXNlciAqKWFyZywgc2l6ZW9mKGRhdGEpKSkgeworCQll cnIgPSAtRUZBVUxUOworCQlnb3RvIGVycl9wdXRfZmQ7CisJfQorCisJZmVuY2UyID0gc3luY19m ZW5jZV9mZGdldChkYXRhLmZkMik7CisJaWYgKGZlbmNlMiA9PSBOVUxMKSB7CisJCWVyciA9IC1F Tk9FTlQ7CisJCWdvdG8gZXJyX3B1dF9mZDsKKwl9CisKKwlkYXRhLm5hbWVbc2l6ZW9mKGRhdGEu bmFtZSkgLSAxXSA9ICdcMCc7CisJZmVuY2UzID0gc3luY19mZW5jZV9tZXJnZShkYXRhLm5hbWUs IGZlbmNlLCBmZW5jZTIpOworCWlmIChmZW5jZTMgPT0gTlVMTCkgeworCQllcnIgPSAtRU5PTUVN OworCQlnb3RvIGVycl9wdXRfZmVuY2UyOworCX0KKworCWRhdGEuZmVuY2UgPSBmZDsKKwlpZiAo Y29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWFyZywgJmRhdGEsIHNpemVvZihkYXRhKSkpIHsK KwkJZXJyID0gLUVGQVVMVDsKKwkJZ290byBlcnJfcHV0X2ZlbmNlMzsKKwl9CisKKwlzeW5jX2Zl bmNlX2luc3RhbGwoZmVuY2UzLCBmZCk7CisJc3luY19mZW5jZV9wdXQoZmVuY2UyKTsKKwlyZXR1 cm4gMDsKKworZXJyX3B1dF9mZW5jZTM6CisJc3luY19mZW5jZV9wdXQoZmVuY2UzKTsKKworZXJy X3B1dF9mZW5jZTI6CisJc3luY19mZW5jZV9wdXQoZmVuY2UyKTsKKworZXJyX3B1dF9mZDoKKwlw dXRfdW51c2VkX2ZkKGZkKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHN5bmNfZmls bF9wdF9pbmZvKHN0cnVjdCBmZW5jZSAqZmVuY2UsIHZvaWQgKmRhdGEsIGludCBzaXplKQorewor CXN0cnVjdCBzeW5jX3B0X2luZm8gKmluZm8gPSBkYXRhOworCWludCByZXQ7CisKKwlpZiAoc2l6 ZSA8IHNpemVvZihzdHJ1Y3Qgc3luY19wdF9pbmZvKSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlp bmZvLT5sZW4gPSBzaXplb2Yoc3RydWN0IHN5bmNfcHRfaW5mbyk7CisKKwlpZiAoZmVuY2UtPm9w cy0+ZmlsbF9kcml2ZXJfZGF0YSkgeworCQlyZXQgPSBmZW5jZS0+b3BzLT5maWxsX2RyaXZlcl9k YXRhKGZlbmNlLCBpbmZvLT5kcml2ZXJfZGF0YSwKKwkJCQkJCSAgIHNpemUgLSBzaXplb2YoKmlu Zm8pKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCisJCWluZm8tPmxlbiArPSBy ZXQ7CisJfQorCisJc3RybGNweShpbmZvLT5vYmpfbmFtZSwgZmVuY2UtPm9wcy0+Z2V0X3RpbWVs aW5lX25hbWUoZmVuY2UpLAorCQlzaXplb2YoaW5mby0+b2JqX25hbWUpKTsKKwlzdHJsY3B5KGlu Zm8tPmRyaXZlcl9uYW1lLCBmZW5jZS0+b3BzLT5nZXRfZHJpdmVyX25hbWUoZmVuY2UpLAorCQlz aXplb2YoaW5mby0+ZHJpdmVyX25hbWUpKTsKKwlpZiAoZmVuY2VfaXNfc2lnbmFsZWQoZmVuY2Up KQorCQlpbmZvLT5zdGF0dXMgPSBmZW5jZS0+c3RhdHVzID49IDAgPyAxIDogZmVuY2UtPnN0YXR1 czsKKwllbHNlCisJCWluZm8tPnN0YXR1cyA9IDA7CisJaW5mby0+dGltZXN0YW1wX25zID0ga3Rp bWVfdG9fbnMoZmVuY2UtPnRpbWVzdGFtcCk7CisKKwlyZXR1cm4gaW5mby0+bGVuOworfQorCitz dGF0aWMgbG9uZyBzeW5jX2ZlbmNlX2lvY3RsX2ZlbmNlX2luZm8oc3RydWN0IHN5bmNfZmVuY2Ug KmZlbmNlLAorCQkJCQl1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3Qgc3luY19mZW5jZV9p bmZvX2RhdGEgKmRhdGE7CisJX191MzIgc2l6ZTsKKwlfX3UzMiBsZW4gPSAwOworCWludCByZXQs IGk7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJnNpemUsICh2b2lkIF9fdXNlciAqKWFyZywgc2l6 ZW9mKHNpemUpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlpZiAoc2l6ZSA8IHNpemVvZihzdHJ1 Y3Qgc3luY19mZW5jZV9pbmZvX2RhdGEpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChzaXpl ID4gNDA5NikKKwkJc2l6ZSA9IDQwOTY7CisKKwlkYXRhID0ga3phbGxvYyhzaXplLCBHRlBfS0VS TkVMKTsKKwlpZiAoZGF0YSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXN0cmxjcHko ZGF0YS0+bmFtZSwgZmVuY2UtPm5hbWUsIHNpemVvZihkYXRhLT5uYW1lKSk7CisJZGF0YS0+c3Rh dHVzID0gYXRvbWljX3JlYWQoJmZlbmNlLT5zdGF0dXMpOworCWlmIChkYXRhLT5zdGF0dXMgPj0g MCkKKwkJZGF0YS0+c3RhdHVzID0gIWRhdGEtPnN0YXR1czsKKworCWxlbiA9IHNpemVvZihzdHJ1 Y3Qgc3luY19mZW5jZV9pbmZvX2RhdGEpOworCisJZm9yIChpID0gMDsgaSA8IGZlbmNlLT5udW1f ZmVuY2VzOyArK2kpIHsKKwkJc3RydWN0IGZlbmNlICpwdCA9IGZlbmNlLT5jYnNbaV0uc3luY19w dDsKKworCQlyZXQgPSBzeW5jX2ZpbGxfcHRfaW5mbyhwdCwgKHU4ICopZGF0YSArIGxlbiwgc2l6 ZSAtIGxlbik7CisKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIG91dDsKKworCQlsZW4gKz0gcmV0 OworCX0KKworCWRhdGEtPmxlbiA9IGxlbjsKKworCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191 c2VyICopYXJnLCBkYXRhLCBsZW4pKQorCQlyZXQgPSAtRUZBVUxUOworCWVsc2UKKwkJcmV0ID0g MDsKKworb3V0OgorCWtmcmVlKGRhdGEpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGxv bmcgc3luY19mZW5jZV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwK KwkJCSAgICAgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IHN5bmNfZmVuY2UgKmZlbmNl ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNZTkNfSU9D X1dBSVQ6CisJCXJldHVybiBzeW5jX2ZlbmNlX2lvY3RsX3dhaXQoZmVuY2UsIGFyZyk7CisKKwlj YXNlIFNZTkNfSU9DX01FUkdFOgorCQlyZXR1cm4gc3luY19mZW5jZV9pb2N0bF9tZXJnZShmZW5j ZSwgYXJnKTsKKworCWNhc2UgU1lOQ19JT0NfRkVOQ0VfSU5GTzoKKwkJcmV0dXJuIHN5bmNfZmVu Y2VfaW9jdGxfZmVuY2VfaW5mbyhmZW5jZSwgYXJnKTsKKworCWRlZmF1bHQ6CisJCXJldHVybiAt RU5PVFRZOworCX0KK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3lu Y19mZW5jZV9mb3BzID0geworCS5yZWxlYXNlID0gc3luY19mZW5jZV9yZWxlYXNlLAorCS5wb2xs ID0gc3luY19mZW5jZV9wb2xsLAorCS51bmxvY2tlZF9pb2N0bCA9IHN5bmNfZmVuY2VfaW9jdGws CisJLmNvbXBhdF9pb2N0bCA9IHN5bmNfZmVuY2VfaW9jdGwsCit9OworCmRpZmYgLS1naXQgYS9k cml2ZXJzL2FuZHJvaWQvc3luYy5oIGIvZHJpdmVycy9hbmRyb2lkL3N5bmMuaApuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDQ5MzIzCi0tLSAvZGV2L251bGwKKysrIGIvZHJp dmVycy9hbmRyb2lkL3N5bmMuaApAQCAtMCwwICsxLDM2NiBAQAorLyoKKyAqIGluY2x1ZGUvbGlu dXgvc3luYy5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSwgSW5jLgorICoKKyAq IFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCisgKgorICovCisKKyNpZm5kZWYgX0xJTlVYX1NZTkNfSAorI2Rl ZmluZSBfTElOVVhfU1lOQ19ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUg PGxpbnV4L2tyZWYuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4 L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3dh aXQuaD4KKyNpbmNsdWRlIDxsaW51eC9mZW5jZS5oPgorCisjaW5jbHVkZSA8dWFwaS9zeW5jL3N5 bmMuaD4KKworc3RydWN0IHN5bmNfdGltZWxpbmU7CitzdHJ1Y3Qgc3luY19wdDsKK3N0cnVjdCBz eW5jX2ZlbmNlOworCisvKioKKyAqIHN0cnVjdCBzeW5jX3RpbWVsaW5lX29wcyAtIHN5bmMgb2Jq ZWN0IGltcGxlbWVudGF0aW9uIG9wcworICogQGRyaXZlcl9uYW1lOgluYW1lIG9mIHRoZSBpbXBs ZW1lbnRhdGlvbgorICogQGR1cDoJCWR1cGxpY2F0ZSBhIHN5bmNfcHQKKyAqIEBoYXNfc2lnbmFs ZWQ6CXJldHVybnM6CisgKgkJCSAgMSBpZiBwdCBoYXMgc2lnbmFsZWQKKyAqCQkJICAwIGlmIHB0 IGhhcyBub3Qgc2lnbmFsZWQKKyAqCQkJIDwwIG9uIGVycm9yCisgKiBAY29tcGFyZToJCXJldHVy bnM6CisgKgkJCSAgMSBpZiBiIHdpbGwgc2lnbmFsIGJlZm9yZSBhCisgKgkJCSAgMCBpZiBhIGFu ZCBiIHdpbGwgc2lnbmFsIGF0IHRoZSBzYW1lIHRpbWUKKyAqCQkJIC0xIGlmIGEgd2lsbCBzaWdu YWwgYmVmb3JlIGIKKyAqIEBmcmVlX3B0OgkJY2FsbGVkIGJlZm9yZSBzeW5jX3B0IGlzIGZyZWVk CisgKiBAcmVsZWFzZV9vYmo6CWNhbGxlZCBiZWZvcmUgc3luY190aW1lbGluZSBpcyBmcmVlZAor ICogQGZpbGxfZHJpdmVyX2RhdGE6CXdyaXRlIGltcGxlbWVudGF0aW9uIHNwZWNpZmljIGRyaXZl ciBkYXRhIHRvIGRhdGEuCisgKgkJCSAgc2hvdWxkIHJldHVybiBhbiBlcnJvciBpZiB0aGVyZSBp cyBub3QgZW5vdWdoIHJvb20KKyAqCQkJICBhcyBzcGVjaWZpZWQgYnkgc2l6ZS4gIFRoaXMgaW5m b3JtYXRpb24gaXMgcmV0dXJuZWQKKyAqCQkJICB0byB1c2Vyc3BhY2UgYnkgU1lOQ19JT0NfRkVO Q0VfSU5GTy4KKyAqIEB0aW1lbGluZV92YWx1ZV9zdHI6IGZpbGwgc3RyIHdpdGggdGhlIHZhbHVl IG9mIHRoZSBzeW5jX3RpbWVsaW5lJ3MgY291bnRlcgorICogQHB0X3ZhbHVlX3N0cjoJZmlsbCBz dHIgd2l0aCB0aGUgdmFsdWUgb2YgdGhlIHN5bmNfcHQKKyAqLworc3RydWN0IHN5bmNfdGltZWxp bmVfb3BzIHsKKwljb25zdCBjaGFyICpkcml2ZXJfbmFtZTsKKworCS8qIHJlcXVpcmVkICovCisJ c3RydWN0IHN5bmNfcHQgKiAoKmR1cCkoc3RydWN0IHN5bmNfcHQgKnB0KTsKKworCS8qIHJlcXVp cmVkICovCisJaW50ICgqaGFzX3NpZ25hbGVkKShzdHJ1Y3Qgc3luY19wdCAqcHQpOworCisJLyog cmVxdWlyZWQgKi8KKwlpbnQgKCpjb21wYXJlKShzdHJ1Y3Qgc3luY19wdCAqYSwgc3RydWN0IHN5 bmNfcHQgKmIpOworCisJLyogb3B0aW9uYWwgKi8KKwl2b2lkICgqZnJlZV9wdCkoc3RydWN0IHN5 bmNfcHQgKnN5bmNfcHQpOworCisJLyogb3B0aW9uYWwgKi8KKwl2b2lkICgqcmVsZWFzZV9vYmop KHN0cnVjdCBzeW5jX3RpbWVsaW5lICpzeW5jX3RpbWVsaW5lKTsKKworCS8qIG9wdGlvbmFsICov CisJaW50ICgqZmlsbF9kcml2ZXJfZGF0YSkoc3RydWN0IHN5bmNfcHQgKnN5bmNwdCwgdm9pZCAq ZGF0YSwgaW50IHNpemUpOworCisJLyogb3B0aW9uYWwgKi8KKwl2b2lkICgqdGltZWxpbmVfdmFs dWVfc3RyKShzdHJ1Y3Qgc3luY190aW1lbGluZSAqdGltZWxpbmUsIGNoYXIgKnN0ciwKKwkJCQkg ICBpbnQgc2l6ZSk7CisKKwkvKiBvcHRpb25hbCAqLworCXZvaWQgKCpwdF92YWx1ZV9zdHIpKHN0 cnVjdCBzeW5jX3B0ICpwdCwgY2hhciAqc3RyLCBpbnQgc2l6ZSk7Cit9OworCisvKioKKyAqIHN0 cnVjdCBzeW5jX3RpbWVsaW5lIC0gc3luYyBvYmplY3QKKyAqIEBrcmVmOgkJcmVmZXJlbmNlIGNv dW50IG9uIGZlbmNlLgorICogQG9wczoJCW9wcyB0aGF0IGRlZmluZSB0aGUgaW1wbGVtZW50YXRp b24gb2YgdGhlIHN5bmNfdGltZWxpbmUKKyAqIEBuYW1lOgkJbmFtZSBvZiB0aGUgc3luY190aW1l bGluZS4gVXNlZnVsIGZvciBkZWJ1Z2dpbmcKKyAqIEBkZXN0cm95ZWQ6CQlzZXQgd2hlbiBzeW5j X3RpbWVsaW5lIGlzIGRlc3Ryb3llZAorICogQGNoaWxkX2xpc3RfaGVhZDoJbGlzdCBvZiBjaGls ZHJlbiBzeW5jX3B0cyBmb3IgdGhpcyBzeW5jX3RpbWVsaW5lCisgKiBAY2hpbGRfbGlzdF9sb2Nr Oglsb2NrIHByb3RlY3RpbmcgQGNoaWxkX2xpc3RfaGVhZCwgZGVzdHJveWVkLCBhbmQKKyAqCQkJ ICBzeW5jX3B0LnN0YXR1cworICogQGFjdGl2ZV9saXN0X2hlYWQ6CWxpc3Qgb2YgYWN0aXZlICh1 bnNpZ25hbGVkL2Vycm9yZWQpIHN5bmNfcHRzCisgKiBAc3luY190aW1lbGluZV9saXN0OgltZW1i ZXJzaGlwIGluIGdsb2JhbCBzeW5jX3RpbWVsaW5lX2xpc3QKKyAqLworc3RydWN0IHN5bmNfdGlt ZWxpbmUgeworCXN0cnVjdCBrcmVmCQlrcmVmOworCWNvbnN0IHN0cnVjdCBzeW5jX3RpbWVsaW5l X29wcwkqb3BzOworCWNoYXIJCQluYW1lWzMyXTsKKworCS8qIHByb3RlY3RlZCBieSBjaGlsZF9s aXN0X2xvY2sgKi8KKwlib29sCQkJZGVzdHJveWVkOworCWludAkJCWNvbnRleHQsIHZhbHVlOwor CisJc3RydWN0IGxpc3RfaGVhZAljaGlsZF9saXN0X2hlYWQ7CisJc3BpbmxvY2tfdAkJY2hpbGRf bGlzdF9sb2NrOworCisJc3RydWN0IGxpc3RfaGVhZAlhY3RpdmVfbGlzdF9oZWFkOworCisjaWZk ZWYgQ09ORklHX0RFQlVHX0ZTCisJc3RydWN0IGxpc3RfaGVhZAlzeW5jX3RpbWVsaW5lX2xpc3Q7 CisjZW5kaWYKK307CisKKy8qKgorICogc3RydWN0IHN5bmNfcHQgLSBzeW5jIHBvaW50CisgKiBA ZmVuY2U6CQliYXNlIGZlbmNlIGNsYXNzCisgKiBAY2hpbGRfbGlzdDoJCW1lbWJlcnNoaXAgaW4g c3luY190aW1lbGluZS5jaGlsZF9saXN0X2hlYWQKKyAqIEBhY3RpdmVfbGlzdDoJbWVtYmVyc2hp cCBpbiBzeW5jX3RpbWVsaW5lLmFjdGl2ZV9saXN0X2hlYWQKKyAqIEBzaWduYWxlZF9saXN0Oglt ZW1iZXJzaGlwIGluIHRlbXBvcmFyeSBzaWduYWxlZF9saXN0IG9uIHN0YWNrCisgKiBAZmVuY2U6 CQlzeW5jX2ZlbmNlIHRvIHdoaWNoIHRoZSBzeW5jX3B0IGJlbG9uZ3MKKyAqIEBwdF9saXN0OgkJ bWVtYmVyc2hpcCBpbiBzeW5jX2ZlbmNlLnB0X2xpc3RfaGVhZAorICogQHN0YXR1czoJCTE6IHNp Z25hbGVkLCAwOmFjdGl2ZSwgPDA6IGVycm9yCisgKiBAdGltZXN0YW1wOgkJdGltZSB3aGljaCBz eW5jX3B0IHN0YXR1cyB0cmFuc2l0aW9uZWQgZnJvbSBhY3RpdmUgdG8KKyAqCQkJICBzaWduYWxl ZCBvciBlcnJvci4KKyAqLworc3RydWN0IHN5bmNfcHQgeworCXN0cnVjdCBmZW5jZSBiYXNlOwor CisJc3RydWN0IGxpc3RfaGVhZAljaGlsZF9saXN0OworCXN0cnVjdCBsaXN0X2hlYWQJYWN0aXZl X2xpc3Q7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzeW5jX3RpbWVsaW5lICpzeW5jX3B0 X3BhcmVudChzdHJ1Y3Qgc3luY19wdCAqcHQpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihwdC0+ YmFzZS5sb2NrLCBzdHJ1Y3Qgc3luY190aW1lbGluZSwKKwkJCSAgICBjaGlsZF9saXN0X2xvY2sp OworfQorCitzdHJ1Y3Qgc3luY19mZW5jZV9jYiB7CisJc3RydWN0IGZlbmNlX2NiIGNiOworCXN0 cnVjdCBmZW5jZSAqc3luY19wdDsKKwlzdHJ1Y3Qgc3luY19mZW5jZSAqZmVuY2U7Cit9OworCisv KioKKyAqIHN0cnVjdCBzeW5jX2ZlbmNlIC0gc3luYyBmZW5jZQorICogQGZpbGU6CQlmaWxlIHJl cHJlc2VudGluZyB0aGlzIGZlbmNlCisgKiBAa3JlZjoJCXJlZmVyZW5jZSBjb3VudCBvbiBmZW5j ZS4KKyAqIEBuYW1lOgkJbmFtZSBvZiBzeW5jX2ZlbmNlLiAgVXNlZnVsIGZvciBkZWJ1Z2dpbmcK KyAqIEBwdF9saXN0X2hlYWQ6CWxpc3Qgb2Ygc3luY19wdHMgaW4gdGhlIGZlbmNlLiAgaW1tdXRh YmxlIG9uY2UgZmVuY2UKKyAqCQkJICBpcyBjcmVhdGVkCisgKiBAc3RhdHVzOgkJMDogc2lnbmFs ZWQsID4wOmFjdGl2ZSwgPDA6IGVycm9yCisgKgorICogQHdxOgkJCXdhaXQgcXVldWUgZm9yIGZl bmNlIHNpZ25hbGluZworICogQHN5bmNfZmVuY2VfbGlzdDoJbWVtYmVyc2hpcCBpbiBnbG9iYWwg ZmVuY2UgbGlzdAorICovCitzdHJ1Y3Qgc3luY19mZW5jZSB7CisJc3RydWN0IGZpbGUJCSpmaWxl OworCXN0cnVjdCBrcmVmCQlrcmVmOworCWNoYXIJCQluYW1lWzMyXTsKKyNpZmRlZiBDT05GSUdf REVCVUdfRlMKKwlzdHJ1Y3QgbGlzdF9oZWFkCXN5bmNfZmVuY2VfbGlzdDsKKyNlbmRpZgorCWlu dCBudW1fZmVuY2VzOworCisJd2FpdF9xdWV1ZV9oZWFkX3QJd3E7CisJYXRvbWljX3QJCXN0YXR1 czsKKworCXN0cnVjdCBzeW5jX2ZlbmNlX2NiCWNic1tdOworfTsKKworc3RydWN0IHN5bmNfZmVu Y2Vfd2FpdGVyOwordHlwZWRlZiB2b2lkICgqc3luY19jYWxsYmFja190KShzdHJ1Y3Qgc3luY19m ZW5jZSAqZmVuY2UsCisJCQkJc3RydWN0IHN5bmNfZmVuY2Vfd2FpdGVyICp3YWl0ZXIpOworCisv KioKKyAqIHN0cnVjdCBzeW5jX2ZlbmNlX3dhaXRlciAtIG1ldGFkYXRhIGZvciBhc3luY2hyb25v dXMgd2FpdGVyIG9uIGEgZmVuY2UKKyAqIEB3YWl0ZXJfbGlzdDoJbWVtYmVyc2hpcCBpbiBzeW5j X2ZlbmNlLndhaXRlcl9saXN0X2hlYWQKKyAqIEBjYWxsYmFjazoJCWZ1bmN0aW9uIHBvaW50ZXIg dG8gY2FsbCB3aGVuIGZlbmNlIHNpZ25hbHMKKyAqIEBjYWxsYmFja19kYXRhOglwb2ludGVyIHRv IHBhc3MgdG8gQGNhbGxiYWNrCisgKi8KK3N0cnVjdCBzeW5jX2ZlbmNlX3dhaXRlciB7CisJd2Fp dF9xdWV1ZV90IHdvcms7CisJc3luY19jYWxsYmFja190IGNhbGxiYWNrOworfTsKKworc3RhdGlj IGlubGluZSB2b2lkIHN5bmNfZmVuY2Vfd2FpdGVyX2luaXQoc3RydWN0IHN5bmNfZmVuY2Vfd2Fp dGVyICp3YWl0ZXIsCisJCQkJCSAgc3luY19jYWxsYmFja190IGNhbGxiYWNrKQoreworCUlOSVRf TElTVF9IRUFEKCZ3YWl0ZXItPndvcmsudGFza19saXN0KTsKKwl3YWl0ZXItPmNhbGxiYWNrID0g Y2FsbGJhY2s7Cit9CisKKy8qCisgKiBBUEkgZm9yIHN5bmNfdGltZWxpbmUgaW1wbGVtZW50ZXJz CisgKi8KKworLyoqCisgKiBzeW5jX3RpbWVsaW5lX2NyZWF0ZSgpIC0gY3JlYXRlcyBhIHN5bmMg b2JqZWN0CisgKiBAb3BzOglzcGVjaWZpZXMgdGhlIGltcGxlbWVudGF0aW9uIG9wcyBmb3IgdGhl IG9iamVjdAorICogQHNpemU6CXNpemUgdG8gYWxsb2NhdGUgZm9yIHRoaXMgb2JqCisgKiBAbmFt ZToJc3luY190aW1lbGluZSBuYW1lCisgKgorICogQ3JlYXRlcyBhIG5ldyBzeW5jX3RpbWVsaW5l IHdoaWNoIHdpbGwgdXNlIHRoZSBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpZWQgYnkKKyAqIEBvcHMu ICBAc2l6ZSBieXRlcyB3aWxsIGJlIGFsbG9jYXRlZCBhbGxvd2luZyBmb3IgaW1wbGVtZW50YXRp b24gc3BlY2lmaWMKKyAqIGRhdGEgdG8gYmUga2VwdCBhZnRlciB0aGUgZ2VuZXJpYyBzeW5jX3Rp bWVsaW5lIHN0cnVjdC4KKyAqLworc3RydWN0IHN5bmNfdGltZWxpbmUgKnN5bmNfdGltZWxpbmVf Y3JlYXRlKGNvbnN0IHN0cnVjdCBzeW5jX3RpbWVsaW5lX29wcyAqb3BzLAorCQkJCQkgICBpbnQg c2l6ZSwgY29uc3QgY2hhciAqbmFtZSk7CisKKy8qKgorICogc3luY190aW1lbGluZV9kZXN0cm95 KCkgLSBkZXN0cm95cyBhIHN5bmMgb2JqZWN0CisgKiBAb2JqOglzeW5jX3RpbWVsaW5lIHRvIGRl c3Ryb3kKKyAqCisgKiBBIHN5bmMgaW1wbGVtZW50YXRpb24gc2hvdWxkIGNhbGwgdGhpcyB3aGVu IHRoZSBAb2JqIGlzIGdvaW5nIGF3YXkKKyAqIChpLmUuIG1vZHVsZSB1bmxvYWQuKSAgQG9iaiB3 b24ndCBhY3R1YWxseSBiZSBmcmVlZCB1bnRpbCBhbGwgaXRzIGNoaWxkcmVuCisgKiBzeW5jX3B0 cyBhcmUgZnJlZWQuCisgKi8KK3ZvaWQgc3luY190aW1lbGluZV9kZXN0cm95KHN0cnVjdCBzeW5j X3RpbWVsaW5lICpvYmopOworCisvKioKKyAqIHN5bmNfdGltZWxpbmVfc2lnbmFsKCkgLSBzaWdu YWwgYSBzdGF0dXMgY2hhbmdlIG9uIGEgc3luY190aW1lbGluZQorICogQG9iajoJc3luY190aW1l bGluZSB0byBzaWduYWwKKyAqCisgKiBBIHN5bmMgaW1wbGVtZW50YXRpb24gc2hvdWxkIGNhbGwg dGhpcyBhbnkgdGltZSBvbmUgb2YgaXQncyBzeW5jX3B0cworICogaGFzIHNpZ25hbGVkIG9yIGhh cyBhbiBlcnJvciBjb25kaXRpb24uCisgKi8KK3ZvaWQgc3luY190aW1lbGluZV9zaWduYWwoc3Ry dWN0IHN5bmNfdGltZWxpbmUgKm9iaik7CisKKy8qKgorICogc3luY19wdF9jcmVhdGUoKSAtIGNy ZWF0ZXMgYSBzeW5jIHB0CisgKiBAcGFyZW50OglzeW5jX3B0J3MgcGFyZW50IHN5bmNfdGltZWxp bmUKKyAqIEBzaXplOglzaXplIHRvIGFsbG9jYXRlIGZvciB0aGlzIHB0CisgKgorICogQ3JlYXRl cyBhIG5ldyBzeW5jX3B0IGFzIGEgY2hpbGQgb2YgQHBhcmVudC4gIEBzaXplIGJ5dGVzIHdpbGwg YmUKKyAqIGFsbG9jYXRlZCBhbGxvd2luZyBmb3IgaW1wbGVtZW50YXRpb24gc3BlY2lmaWMgZGF0 YSB0byBiZSBrZXB0IGFmdGVyCisgKiB0aGUgZ2VuZXJpYyBzeW5jX3RpbWVsaW5lIHN0cnVjdC4K KyAqLworc3RydWN0IHN5bmNfcHQgKnN5bmNfcHRfY3JlYXRlKHN0cnVjdCBzeW5jX3RpbWVsaW5l ICpwYXJlbnQsIGludCBzaXplKTsKKworLyoqCisgKiBzeW5jX3B0X2ZyZWUoKSAtIGZyZWVzIGEg c3luYyBwdAorICogQHB0OgkJc3luY19wdCB0byBmcmVlCisgKgorICogVGhpcyBzaG91bGQgb25s eSBiZSBjYWxsZWQgb24gc3luY19wdHMgd2hpY2ggaGF2ZSBiZWVuIGNyZWF0ZWQgYnV0CisgKiBu b3QgYWRkZWQgdG8gYSBmZW5jZS4KKyAqLwordm9pZCBzeW5jX3B0X2ZyZWUoc3RydWN0IHN5bmNf cHQgKnB0KTsKKworLyoqCisgKiBzeW5jX2ZlbmNlX2NyZWF0ZSgpIC0gY3JlYXRlcyBhIHN5bmMg ZmVuY2UKKyAqIEBuYW1lOgluYW1lIG9mIGZlbmNlIHRvIGNyZWF0ZQorICogQHB0OgkJc3luY19w dCB0byBhZGQgdG8gdGhlIGZlbmNlCisgKgorICogQ3JlYXRlcyBhIGZlbmNlIGNvbnRhaW5nIEBw dC4gIE9uY2UgdGhpcyBpcyBjYWxsZWQsIHRoZSBmZW5jZSB0YWtlcworICogYSByZWZlcmVuY2Ug b24gQHB0LgorICovCitzdHJ1Y3Qgc3luY19mZW5jZSAqc3luY19mZW5jZV9jcmVhdGUoY29uc3Qg Y2hhciAqbmFtZSwgc3RydWN0IHN5bmNfcHQgKnB0KTsKKworLyoqCisgKiBzeW5jX2ZlbmNlX2Ny ZWF0ZV9kbWEoKSAtIGNyZWF0ZXMgYSBzeW5jIGZlbmNlIGZyb20gZG1hLWZlbmNlCisgKiBAbmFt ZToJbmFtZSBvZiBmZW5jZSB0byBjcmVhdGUKKyAqIEBwdDoJZG1hLWZlbmNlIHRvIGFkZCB0byB0 aGUgZmVuY2UKKyAqCisgKiBDcmVhdGVzIGEgZmVuY2UgY29udGFpbmcgQHB0LiAgT25jZSB0aGlz IGlzIGNhbGxlZCwgdGhlIGZlbmNlIHRha2VzCisgKiBhIHJlZmVyZW5jZSBvbiBAcHQuCisgKi8K K3N0cnVjdCBzeW5jX2ZlbmNlICpzeW5jX2ZlbmNlX2NyZWF0ZV9kbWEoY29uc3QgY2hhciAqbmFt ZSwgc3RydWN0IGZlbmNlICpwdCk7CisKKy8qCisgKiBBUEkgZm9yIHN5bmNfZmVuY2UgY29uc3Vt ZXJzCisgKi8KKworLyoqCisgKiBzeW5jX2ZlbmNlX21lcmdlKCkgLSBtZXJnZSB0d28gZmVuY2Vz CisgKiBAbmFtZToJbmFtZSBvZiBuZXcgZmVuY2UKKyAqIEBhOgkJZmVuY2UgYQorICogQGI6CQlm ZW5jZSBiCisgKgorICogQ3JlYXRlcyBhIG5ldyBmZW5jZSB3aGljaCBjb250YWlucyBjb3BpZXMg b2YgYWxsIHRoZSBzeW5jX3B0cyBpbiBib3RoCisgKiBAYSBhbmQgQGIuICBAYSBhbmQgQGIgcmVt YWluIHZhbGlkLCBpbmRlcGVuZGVudCBmZW5jZXMuCisgKi8KK3N0cnVjdCBzeW5jX2ZlbmNlICpz eW5jX2ZlbmNlX21lcmdlKGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJICAgIHN0cnVjdCBzeW5jX2Zl bmNlICphLCBzdHJ1Y3Qgc3luY19mZW5jZSAqYik7CisKKy8qKgorICogc3luY19mZW5jZV9mZGdl dCgpIC0gZ2V0IGEgZmVuY2UgZnJvbSBhbiBmZAorICogQGZkOgkJZmQgcmVmZXJlbmNpbmcgYSBm ZW5jZQorICoKKyAqIEVuc3VyZXMgQGZkIHJlZmVyZW5jZXMgYSB2YWxpZCBmZW5jZSwgaW5jcmVt ZW50cyB0aGUgcmVmY291bnQgb2YgdGhlIGJhY2tpbmcKKyAqIGZpbGUsIGFuZCByZXR1cm5zIHRo ZSBmZW5jZS4KKyAqLworc3RydWN0IHN5bmNfZmVuY2UgKnN5bmNfZmVuY2VfZmRnZXQoaW50IGZk KTsKKworLyoqCisgKiBzeW5jX2ZlbmNlX3B1dCgpIC0gcHV0cyBhIHJlZmVyZW5jZSBvZiBhIHN5 bmMgZmVuY2UKKyAqIEBmZW5jZToJZmVuY2UgdG8gcHV0CisgKgorICogUHV0cyBhIHJlZmVyZW5j ZSBvbiBAZmVuY2UuICBJZiB0aGlzIGlzIHRoZSBsYXN0IHJlZmVyZW5jZSwgdGhlIGZlbmNlIGFu ZAorICogYWxsIGl0J3Mgc3luY19wdHMgd2lsbCBiZSBmcmVlZAorICovCit2b2lkIHN5bmNfZmVu Y2VfcHV0KHN0cnVjdCBzeW5jX2ZlbmNlICpmZW5jZSk7CisKKy8qKgorICogc3luY19mZW5jZV9p bnN0YWxsKCkgLSBpbnN0YWxscyBhIGZlbmNlIGludG8gYSBmaWxlIGRlc2NyaXB0b3IKKyAqIEBm ZW5jZToJZmVuY2UgdG8gaW5zdGFsbAorICogQGZkOgkJZmlsZSBkZXNjcmlwdG9yIGluIHdoaWNo IHRvIGluc3RhbGwgdGhlIGZlbmNlCisgKgorICogSW5zdGFsbHMgQGZlbmNlIGludG8gQGZkLiAg QGZkJ3Mgc2hvdWxkIGJlIGFjcXVpcmVkIHRocm91Z2gKKyAqIGdldF91bnVzZWRfZmRfZmxhZ3Mo T19DTE9FWEVDKS4KKyAqLwordm9pZCBzeW5jX2ZlbmNlX2luc3RhbGwoc3RydWN0IHN5bmNfZmVu Y2UgKmZlbmNlLCBpbnQgZmQpOworCisvKioKKyAqIHN5bmNfZmVuY2Vfd2FpdF9hc3luYygpIC0g cmVnaXN0ZXJzIGFuZCBhc3luYyB3YWl0IG9uIHRoZSBmZW5jZQorICogQGZlbmNlOgkJZmVuY2Ug dG8gd2FpdCBvbgorICogQHdhaXRlcjoJCXdhaXRlciBjYWxsYmFjayBzdHJ1Y2sKKyAqCisgKiBS ZXR1cm5zIDEgaWYgQGZlbmNlIGhhcyBhbHJlYWR5IHNpZ25hbGVkLgorICoKKyAqIFJlZ2lzdGVy cyBhIGNhbGxiYWNrIHRvIGJlIGNhbGxlZCB3aGVuIEBmZW5jZSBzaWduYWxzIG9yIGhhcyBhbiBl cnJvci4KKyAqIEB3YWl0ZXIgc2hvdWxkIGJlIGluaXRpYWxpemVkIHdpdGggc3luY19mZW5jZV93 YWl0ZXJfaW5pdCgpLgorICovCitpbnQgc3luY19mZW5jZV93YWl0X2FzeW5jKHN0cnVjdCBzeW5j X2ZlbmNlICpmZW5jZSwKKwkJCSAgc3RydWN0IHN5bmNfZmVuY2Vfd2FpdGVyICp3YWl0ZXIpOwor CisvKioKKyAqIHN5bmNfZmVuY2VfY2FuY2VsX2FzeW5jKCkgLSBjYW5jZWxzIGFuIGFzeW5jIHdh aXQKKyAqIEBmZW5jZToJCWZlbmNlIHRvIHdhaXQgb24KKyAqIEB3YWl0ZXI6CQl3YWl0ZXIgY2Fs bGJhY2sgc3RydWNrCisgKgorICogcmV0dXJucyAwIGlmIHdhaXRlciB3YXMgcmVtb3ZlZCBmcm9t IGZlbmNlJ3MgYXN5bmMgd2FpdGVyIGxpc3QuCisgKiByZXR1cm5zIC1FTk9FTlQgaWYgd2FpdGVy IHdhcyBub3QgZm91bmQgb24gZmVuY2UncyBhc3luYyB3YWl0ZXIgbGlzdC4KKyAqCisgKiBDYW5j ZWxzIGEgcHJldmlvdXNseSByZWdpc3RlcmVkIGFzeW5jIHdhaXQuICBXaWxsIGZhaWwgZ3JhY2Vm dWxseSBpZgorICogQHdhaXRlciB3YXMgbmV2ZXIgcmVnaXN0ZXJlZCBvciBpZiBAZmVuY2UgaGFz IGFscmVhZHkgc2lnbmFsZWQgQHdhaXRlci4KKyAqLworaW50IHN5bmNfZmVuY2VfY2FuY2VsX2Fz eW5jKHN0cnVjdCBzeW5jX2ZlbmNlICpmZW5jZSwKKwkJCSAgICBzdHJ1Y3Qgc3luY19mZW5jZV93 YWl0ZXIgKndhaXRlcik7CisKKy8qKgorICogc3luY19mZW5jZV93YWl0KCkgLSB3YWl0IG9uIGZl bmNlCisgKiBAZmVuY2U6CWZlbmNlIHRvIHdhaXQgb24KKyAqIEB0aWVtb3V0Ogl0aW1lb3V0IGlu IG1zCisgKgorICogV2FpdCBmb3IgQGZlbmNlIHRvIGJlIHNpZ25hbGVkIG9yIGhhdmUgYW4gZXJy b3IuICBXYWl0cyBpbmRlZmluaXRlbHkKKyAqIGlmIEB0aW1lb3V0IDwgMAorICovCitpbnQgc3lu Y19mZW5jZV93YWl0KHN0cnVjdCBzeW5jX2ZlbmNlICpmZW5jZSwgbG9uZyB0aW1lb3V0KTsKKwor I2lmZGVmIENPTkZJR19ERUJVR19GUworCit2b2lkIHN5bmNfdGltZWxpbmVfZGVidWdfYWRkKHN0 cnVjdCBzeW5jX3RpbWVsaW5lICpvYmopOwordm9pZCBzeW5jX3RpbWVsaW5lX2RlYnVnX3JlbW92 ZShzdHJ1Y3Qgc3luY190aW1lbGluZSAqb2JqKTsKK3ZvaWQgc3luY19mZW5jZV9kZWJ1Z19hZGQo c3RydWN0IHN5bmNfZmVuY2UgKmZlbmNlKTsKK3ZvaWQgc3luY19mZW5jZV9kZWJ1Z19yZW1vdmUo c3RydWN0IHN5bmNfZmVuY2UgKmZlbmNlKTsKK3ZvaWQgc3luY19kdW1wKHZvaWQpOworCisjZWxz ZQorIyBkZWZpbmUgc3luY190aW1lbGluZV9kZWJ1Z19hZGQob2JqKQorIyBkZWZpbmUgc3luY190 aW1lbGluZV9kZWJ1Z19yZW1vdmUob2JqKQorIyBkZWZpbmUgc3luY19mZW5jZV9kZWJ1Z19hZGQo ZmVuY2UpCisjIGRlZmluZSBzeW5jX2ZlbmNlX2RlYnVnX3JlbW92ZShmZW5jZSkKKyMgZGVmaW5l IHN5bmNfZHVtcCgpCisjZW5kaWYKK2ludCBzeW5jX2ZlbmNlX3dha2VfdXBfd3Eod2FpdF9xdWV1 ZV90ICpjdXJyLCB1bnNpZ25lZCBtb2RlLAorCQkJCSBpbnQgd2FrZV9mbGFncywgdm9pZCAqa2V5 KTsKKworI2VuZGlmIC8qIF9MSU5VWF9TWU5DX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYW5k cm9pZC9zeW5jX2RlYnVnLmMgYi9kcml2ZXJzL2FuZHJvaWQvc3luY19kZWJ1Zy5jCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0NWQxM2MKLS0tIC9kZXYvbnVsbAorKysgYi9k cml2ZXJzL2FuZHJvaWQvc3luY19kZWJ1Zy5jCkBAIC0wLDAgKzEsMjU2IEBACisvKgorICogZHJp dmVycy9iYXNlL3N5bmMuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUsIEluYy4K KyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5 IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAorICogbWF5IGJlIGNvcGllZCwgZGlz dHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KKyAqCisgKiBUaGlzIHBy b2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y ZSBkZXRhaWxzLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1 ZGUgPGxpbnV4L2V4cG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KKyNpbmNsdWRlIDxs aW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3Bv bGwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxl Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4K KyNpbmNsdWRlIDxsaW51eC9hbm9uX2lub2Rlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWU2NC5o PgorI2luY2x1ZGUgInN5bmMuaCIKKworI2lmZGVmIENPTkZJR19ERUJVR19GUworCitzdGF0aWMg TElTVF9IRUFEKHN5bmNfdGltZWxpbmVfbGlzdF9oZWFkKTsKK3N0YXRpYyBERUZJTkVfU1BJTkxP Q0soc3luY190aW1lbGluZV9saXN0X2xvY2spOworc3RhdGljIExJU1RfSEVBRChzeW5jX2ZlbmNl X2xpc3RfaGVhZCk7CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHN5bmNfZmVuY2VfbGlzdF9sb2Nr KTsKKwordm9pZCBzeW5jX3RpbWVsaW5lX2RlYnVnX2FkZChzdHJ1Y3Qgc3luY190aW1lbGluZSAq b2JqKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc3lu Y190aW1lbGluZV9saXN0X2xvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZF90YWlsKCZvYmotPnN5bmNf dGltZWxpbmVfbGlzdCwgJnN5bmNfdGltZWxpbmVfbGlzdF9oZWFkKTsKKwlzcGluX3VubG9ja19p cnFyZXN0b3JlKCZzeW5jX3RpbWVsaW5lX2xpc3RfbG9jaywgZmxhZ3MpOworfQorCit2b2lkIHN5 bmNfdGltZWxpbmVfZGVidWdfcmVtb3ZlKHN0cnVjdCBzeW5jX3RpbWVsaW5lICpvYmopCit7CisJ dW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzeW5jX3RpbWVsaW5l X2xpc3RfbG9jaywgZmxhZ3MpOworCWxpc3RfZGVsKCZvYmotPnN5bmNfdGltZWxpbmVfbGlzdCk7 CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3luY190aW1lbGluZV9saXN0X2xvY2ssIGZsYWdz KTsKK30KKwordm9pZCBzeW5jX2ZlbmNlX2RlYnVnX2FkZChzdHJ1Y3Qgc3luY19mZW5jZSAqZmVu Y2UpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzeW5j X2ZlbmNlX2xpc3RfbG9jaywgZmxhZ3MpOworCWxpc3RfYWRkX3RhaWwoJmZlbmNlLT5zeW5jX2Zl bmNlX2xpc3QsICZzeW5jX2ZlbmNlX2xpc3RfaGVhZCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9y ZSgmc3luY19mZW5jZV9saXN0X2xvY2ssIGZsYWdzKTsKK30KKwordm9pZCBzeW5jX2ZlbmNlX2Rl YnVnX3JlbW92ZShzdHJ1Y3Qgc3luY19mZW5jZSAqZmVuY2UpCit7CisJdW5zaWduZWQgbG9uZyBm bGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzeW5jX2ZlbmNlX2xpc3RfbG9jaywgZmxhZ3Mp OworCWxpc3RfZGVsKCZmZW5jZS0+c3luY19mZW5jZV9saXN0KTsKKwlzcGluX3VubG9ja19pcnFy ZXN0b3JlKCZzeW5jX2ZlbmNlX2xpc3RfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgY29uc3Qg Y2hhciAqc3luY19zdGF0dXNfc3RyKGludCBzdGF0dXMpCit7CisJaWYgKHN0YXR1cyA9PSAwKQor CQlyZXR1cm4gInNpZ25hbGVkIjsKKworCWlmIChzdGF0dXMgPiAwKQorCQlyZXR1cm4gImFjdGl2 ZSI7CisKKwlyZXR1cm4gImVycm9yIjsKK30KKworc3RhdGljIHZvaWQgc3luY19wcmludF9wdChz dHJ1Y3Qgc2VxX2ZpbGUgKnMsIHN0cnVjdCBmZW5jZSAqcHQsIGJvb2wgZmVuY2UpCit7CisJaW50 IHN0YXR1cyA9IDE7CisKKwlpZiAoZmVuY2VfaXNfc2lnbmFsZWRfbG9ja2VkKHB0KSkKKwkJc3Rh dHVzID0gcHQtPnN0YXR1czsKKworCXNlcV9wcmludGYocywgIiAgJXMlc3B0ICVzIiwKKwkJICAg ZmVuY2UgJiYgcHQtPm9wcy0+Z2V0X3RpbWVsaW5lX25hbWUgPworCQkgICBwdC0+b3BzLT5nZXRf dGltZWxpbmVfbmFtZShwdCkgOiAiIiwKKwkJICAgZmVuY2UgPyAiXyIgOiAiIiwKKwkJICAgc3lu Y19zdGF0dXNfc3RyKHN0YXR1cykpOworCisJaWYgKHN0YXR1cyA8PSAwKSB7CisJCXN0cnVjdCB0 aW1lc3BlYzY0IHRzNjQgPQorCQkJa3RpbWVfdG9fdGltZXNwZWM2NChwdC0+dGltZXN0YW1wKTsK KworCQlzZXFfcHJpbnRmKHMsICJAJWxsZC4lMDlsZCIsIChzNjQpdHM2NC50dl9zZWMsIHRzNjQu dHZfbnNlYyk7CisJfQorCisJaWYgKCghZmVuY2UgfHwgcHQtPm9wcy0+dGltZWxpbmVfdmFsdWVf c3RyKSAmJgorCSAgICBwdC0+b3BzLT5mZW5jZV92YWx1ZV9zdHIpIHsKKwkJY2hhciB2YWx1ZVs2 NF07CisJCWJvb2wgc3VjY2VzczsKKworCQlwdC0+b3BzLT5mZW5jZV92YWx1ZV9zdHIocHQsIHZh bHVlLCBzaXplb2YodmFsdWUpKTsKKwkJc3VjY2VzcyA9IHN0cmxlbih2YWx1ZSk7CisKKwkJaWYg KHN1Y2Nlc3MpCisJCQlzZXFfcHJpbnRmKHMsICI6ICVzIiwgdmFsdWUpOworCisJCWlmIChzdWNj ZXNzICYmIGZlbmNlKSB7CisJCQlwdC0+b3BzLT50aW1lbGluZV92YWx1ZV9zdHIocHQsIHZhbHVl LCBzaXplb2YodmFsdWUpKTsKKworCQkJaWYgKHN0cmxlbih2YWx1ZSkpCisJCQkJc2VxX3ByaW50 ZihzLCAiIC8gJXMiLCB2YWx1ZSk7CisJCX0KKwl9CisKKwlzZXFfcHV0cyhzLCAiXG4iKTsKK30K Kworc3RhdGljIHZvaWQgc3luY19wcmludF9vYmooc3RydWN0IHNlcV9maWxlICpzLCBzdHJ1Y3Qg c3luY190aW1lbGluZSAqb2JqKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKKwl1bnNpZ25l ZCBsb25nIGZsYWdzOworCisJc2VxX3ByaW50ZihzLCAiJXMgJXMiLCBvYmotPm5hbWUsIG9iai0+ b3BzLT5kcml2ZXJfbmFtZSk7CisKKwlpZiAob2JqLT5vcHMtPnRpbWVsaW5lX3ZhbHVlX3N0cikg eworCQljaGFyIHZhbHVlWzY0XTsKKworCQlvYmotPm9wcy0+dGltZWxpbmVfdmFsdWVfc3RyKG9i aiwgdmFsdWUsIHNpemVvZih2YWx1ZSkpOworCQlzZXFfcHJpbnRmKHMsICI6ICVzIiwgdmFsdWUp OworCX0KKworCXNlcV9wdXRzKHMsICJcbiIpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm9iai0+ Y2hpbGRfbGlzdF9sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaChwb3MsICZvYmotPmNoaWxk X2xpc3RfaGVhZCkgeworCQlzdHJ1Y3Qgc3luY19wdCAqcHQgPQorCQkJY29udGFpbmVyX29mKHBv cywgc3RydWN0IHN5bmNfcHQsIGNoaWxkX2xpc3QpOworCQlzeW5jX3ByaW50X3B0KHMsICZwdC0+ YmFzZSwgZmFsc2UpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvYmotPmNoaWxkX2xp c3RfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBzeW5jX3ByaW50X2ZlbmNlKHN0cnVj dCBzZXFfZmlsZSAqcywgc3RydWN0IHN5bmNfZmVuY2UgKmZlbmNlKQoreworCXdhaXRfcXVldWVf dCAqcG9zOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGk7CisKKwlzZXFfcHJpbnRmKHMs ICJbJXBdICVzOiAlc1xuIiwgZmVuY2UsIGZlbmNlLT5uYW1lLAorCQkgICBzeW5jX3N0YXR1c19z dHIoYXRvbWljX3JlYWQoJmZlbmNlLT5zdGF0dXMpKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZmVu Y2UtPm51bV9mZW5jZXM7ICsraSkgeworCQlzeW5jX3ByaW50X3B0KHMsIGZlbmNlLT5jYnNbaV0u c3luY19wdCwgdHJ1ZSk7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJmZlbmNlLT53cS5sb2Nr LCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsICZmZW5jZS0+d3EudGFza19saXN0 LCB0YXNrX2xpc3QpIHsKKwkJc3RydWN0IHN5bmNfZmVuY2Vfd2FpdGVyICp3YWl0ZXI7CisKKwkJ aWYgKHBvcy0+ZnVuYyAhPSAmc3luY19mZW5jZV93YWtlX3VwX3dxKQorCQkJY29udGludWU7CisK KwkJd2FpdGVyID0gY29udGFpbmVyX29mKHBvcywgc3RydWN0IHN5bmNfZmVuY2Vfd2FpdGVyLCB3 b3JrKTsKKworCQlzZXFfcHJpbnRmKHMsICJ3YWl0ZXIgJXBGXG4iLCB3YWl0ZXItPmNhbGxiYWNr KTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmVuY2UtPndxLmxvY2ssIGZsYWdzKTsK K30KKworc3RhdGljIGludCBzeW5jX2RlYnVnZnNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZv aWQgKnVudXNlZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBsaXN0X2hlYWQg KnBvczsKKworCXNlcV9wdXRzKHMsICJvYmpzOlxuLS0tLS0tLS0tLS0tLS1cbiIpOworCisJc3Bp bl9sb2NrX2lycXNhdmUoJnN5bmNfdGltZWxpbmVfbGlzdF9sb2NrLCBmbGFncyk7CisJbGlzdF9m b3JfZWFjaChwb3MsICZzeW5jX3RpbWVsaW5lX2xpc3RfaGVhZCkgeworCQlzdHJ1Y3Qgc3luY190 aW1lbGluZSAqb2JqID0KKwkJCWNvbnRhaW5lcl9vZihwb3MsIHN0cnVjdCBzeW5jX3RpbWVsaW5l LAorCQkJCSAgICAgc3luY190aW1lbGluZV9saXN0KTsKKworCQlzeW5jX3ByaW50X29iaihzLCBv YmopOworCQlzZXFfcHV0cyhzLCAiXG4iKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgm c3luY190aW1lbGluZV9saXN0X2xvY2ssIGZsYWdzKTsKKworCXNlcV9wdXRzKHMsICJmZW5jZXM6 XG4tLS0tLS0tLS0tLS0tLVxuIik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc3luY19mZW5jZV9s aXN0X2xvY2ssIGZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoKHBvcywgJnN5bmNfZmVuY2VfbGlzdF9o ZWFkKSB7CisJCXN0cnVjdCBzeW5jX2ZlbmNlICpmZW5jZSA9CisJCQljb250YWluZXJfb2YocG9z LCBzdHJ1Y3Qgc3luY19mZW5jZSwgc3luY19mZW5jZV9saXN0KTsKKworCQlzeW5jX3ByaW50X2Zl bmNlKHMsIGZlbmNlKTsKKwkJc2VxX3B1dHMocywgIlxuIik7CisJfQorCXNwaW5fdW5sb2NrX2ly cXJlc3RvcmUoJnN5bmNfZmVuY2VfbGlzdF9sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBpbnQgc3luY19kZWJ1Z2ZzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0 IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHN5bmNfZGVidWdmc19z aG93LCBpbm9kZS0+aV9wcml2YXRlKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29w ZXJhdGlvbnMgc3luY19kZWJ1Z2ZzX2ZvcHMgPSB7CisJLm9wZW4gICAgICAgICAgID0gc3luY19k ZWJ1Z2ZzX29wZW4sCisJLnJlYWQgICAgICAgICAgID0gc2VxX3JlYWQsCisJLmxsc2VlayAgICAg ICAgID0gc2VxX2xzZWVrLAorCS5yZWxlYXNlICAgICAgICA9IHNpbmdsZV9yZWxlYXNlLAorfTsK Kworc3RhdGljIF9faW5pdCBpbnQgc3luY19kZWJ1Z2ZzX2luaXQodm9pZCkKK3sKKwlkZWJ1Z2Zz X2NyZWF0ZV9maWxlKCJzeW5jIiwgU19JUlVHTywgTlVMTCwgTlVMTCwgJnN5bmNfZGVidWdmc19m b3BzKTsKKwlyZXR1cm4gMDsKK30KK2xhdGVfaW5pdGNhbGwoc3luY19kZWJ1Z2ZzX2luaXQpOwor CisjZGVmaW5lIERVTVBfQ0hVTksgMjU2CitzdGF0aWMgY2hhciBzeW5jX2R1bXBfYnVmWzY0ICog MTAyNF07Cit2b2lkIHN5bmNfZHVtcCh2b2lkKQoreworCXN0cnVjdCBzZXFfZmlsZSBzID0gewor CQkuYnVmID0gc3luY19kdW1wX2J1ZiwKKwkJLnNpemUgPSBzaXplb2Yoc3luY19kdW1wX2J1Zikg LSAxLAorCX07CisJaW50IGk7CisKKwlzeW5jX2RlYnVnZnNfc2hvdygmcywgTlVMTCk7CisKKwlm b3IgKGkgPSAwOyBpIDwgcy5jb3VudDsgaSArPSBEVU1QX0NIVU5LKSB7CisJCWlmICgocy5jb3Vu dCAtIGkpID4gRFVNUF9DSFVOSykgeworCQkJY2hhciBjID0gcy5idWZbaSArIERVTVBfQ0hVTktd OworCisJCQlzLmJ1ZltpICsgRFVNUF9DSFVOS10gPSAwOworCQkJcHJfY29udCgiJXMiLCBzLmJ1 ZiArIGkpOworCQkJcy5idWZbaSArIERVTVBfQ0hVTktdID0gYzsKKwkJfSBlbHNlIHsKKwkJCXMu YnVmW3MuY291bnRdID0gMDsKKwkJCXByX2NvbnQoIiVzIiwgcy5idWYgKyBpKTsKKwkJfQorCX0K K30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FuZHJvaWQvdHJhY2Uvc3luYy5oIGIv ZHJpdmVycy9hbmRyb2lkL3RyYWNlL3N5bmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi43ZGNmMmZlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9hbmRyb2lkL3RyYWNl L3N5bmMuaApAQCAtMCwwICsxLDgyIEBACisjdW5kZWYgVFJBQ0VfU1lTVEVNCisjZGVmaW5lIFRS QUNFX0lOQ0xVREVfUEFUSCAuLi8uLi9kcml2ZXJzL2FuZHJvaWQvdHJhY2UKKyNkZWZpbmUgVFJB Q0VfU1lTVEVNIHN5bmMKKworI2lmICFkZWZpbmVkKF9UUkFDRV9TWU5DX0gpIHx8IGRlZmluZWQo VFJBQ0VfSEVBREVSX01VTFRJX1JFQUQpCisjZGVmaW5lIF9UUkFDRV9TWU5DX0gKKworI2luY2x1 ZGUgIi4uL3N5bmMuaCIKKyNpbmNsdWRlIDxsaW51eC90cmFjZXBvaW50Lmg+CisKK1RSQUNFX0VW RU5UKHN5bmNfdGltZWxpbmUsCisJVFBfUFJPVE8oc3RydWN0IHN5bmNfdGltZWxpbmUgKnRpbWVs aW5lKSwKKworCVRQX0FSR1ModGltZWxpbmUpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJCV9f c3RyaW5nKG5hbWUsIHRpbWVsaW5lLT5uYW1lKQorCQkJX19hcnJheShjaGFyLCB2YWx1ZSwgMzIp CisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQkJX19hc3NpZ25fc3RyKG5hbWUsIHRpbWVsaW5l LT5uYW1lKTsKKwkJCWlmICh0aW1lbGluZS0+b3BzLT50aW1lbGluZV92YWx1ZV9zdHIpIHsKKwkJ CQl0aW1lbGluZS0+b3BzLT50aW1lbGluZV92YWx1ZV9zdHIodGltZWxpbmUsCisJCQkJCQkJX19l bnRyeS0+dmFsdWUsCisJCQkJCQkJc2l6ZW9mKF9fZW50cnktPnZhbHVlKSk7CisJCQl9IGVsc2Ug eworCQkJCV9fZW50cnktPnZhbHVlWzBdID0gJ1wwJzsKKwkJCX0KKwkpLAorCisJVFBfcHJpbnRr KCJuYW1lPSVzIHZhbHVlPSVzIiwgX19nZXRfc3RyKG5hbWUpLCBfX2VudHJ5LT52YWx1ZSkKKyk7 CisKK1RSQUNFX0VWRU5UKHN5bmNfd2FpdCwKKwlUUF9QUk9UTyhzdHJ1Y3Qgc3luY19mZW5jZSAq ZmVuY2UsIGludCBiZWdpbiksCisKKwlUUF9BUkdTKGZlbmNlLCBiZWdpbiksCisKKwlUUF9TVFJV Q1RfX2VudHJ5KAorCQkJX19zdHJpbmcobmFtZSwgZmVuY2UtPm5hbWUpCisJCQlfX2ZpZWxkKHMz Miwgc3RhdHVzKQorCQkJX19maWVsZCh1MzIsIGJlZ2luKQorCSksCisKKwlUUF9mYXN0X2Fzc2ln bigKKwkJCV9fYXNzaWduX3N0cihuYW1lLCBmZW5jZS0+bmFtZSk7CisJCQlfX2VudHJ5LT5zdGF0 dXMgPSBhdG9taWNfcmVhZCgmZmVuY2UtPnN0YXR1cyk7CisJCQlfX2VudHJ5LT5iZWdpbiA9IGJl Z2luOworCSksCisKKwlUUF9wcmludGsoIiVzIG5hbWU9JXMgc3RhdGU9JWQiLCBfX2VudHJ5LT5i ZWdpbiA/ICJiZWdpbiIgOiAiZW5kIiwKKwkJCV9fZ2V0X3N0cihuYW1lKSwgX19lbnRyeS0+c3Rh dHVzKQorKTsKKworVFJBQ0VfRVZFTlQoc3luY19wdCwKKwlUUF9QUk9UTyhzdHJ1Y3QgZmVuY2Ug KnB0KSwKKworCVRQX0FSR1MocHQpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19zdHJpbmco dGltZWxpbmUsIHB0LT5vcHMtPmdldF90aW1lbGluZV9uYW1lKHB0KSkKKwkJX19hcnJheShjaGFy LCB2YWx1ZSwgMzIpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlfX2Fzc2lnbl9zdHIodGlt ZWxpbmUsIHB0LT5vcHMtPmdldF90aW1lbGluZV9uYW1lKHB0KSk7CisJCWlmIChwdC0+b3BzLT5m ZW5jZV92YWx1ZV9zdHIpIHsKKwkJCXB0LT5vcHMtPmZlbmNlX3ZhbHVlX3N0cihwdCwgX19lbnRy eS0+dmFsdWUsCisJCQkJCQkJc2l6ZW9mKF9fZW50cnktPnZhbHVlKSk7CisJCX0gZWxzZSB7CisJ CQlfX2VudHJ5LT52YWx1ZVswXSA9ICdcMCc7CisJCX0KKwkpLAorCisJVFBfcHJpbnRrKCJuYW1l PSVzIHZhbHVlPSVzIiwgX19nZXRfc3RyKHRpbWVsaW5lKSwgX19lbnRyeS0+dmFsdWUpCispOwor CisjZW5kaWYgLyogaWYgIWRlZmluZWQoX1RSQUNFX1NZTkNfSCkgfHwgZGVmaW5lZChUUkFDRV9I RUFERVJfTVVMVElfUkVBRCkgKi8KKworLyogVGhpcyBwYXJ0IG11c3QgYmUgb3V0c2lkZSBwcm90 ZWN0aW9uICovCisjaW5jbHVkZSA8dHJhY2UvZGVmaW5lX3RyYWNlLmg+CmRpZmYgLS1naXQgYS9k cml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQv S2NvbmZpZwppbmRleCA0MmIxNTEyLi40YjE4ZmVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdp bmcvYW5kcm9pZC9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL0tjb25maWcK QEAgLTM4LDM0ICszOCw2IEBAIGNvbmZpZyBBTkRST0lEX0xPV19NRU1PUllfS0lMTEVSCiAJICBz Y3JpcHRzICgvaW5pdC5yYyksIGFuZCBpdCBkZWZpbmVzIHByaW9yaXR5IHZhbHVlcyB3aXRoIG1p bmltdW0gZnJlZSBtZW1vcnkgc2l6ZQogCSAgZm9yIGVhY2ggcHJpb3JpdHkuCiAKLWNvbmZpZyBT WU5DCi0JYm9vbCAiU3luY2hyb25pemF0aW9uIGZyYW1ld29yayIKLQlkZWZhdWx0IG4KLQlzZWxl Y3QgQU5PTl9JTk9ERVMKLQlzZWxlY3QgRE1BX1NIQVJFRF9CVUZGRVIKLQktLS1oZWxwLS0tCi0J ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBmcmFtZXdvcmsgZm9yIHN5bmNocm9uaXphdGlvbiBi ZXR3ZWVuIG11bHRpcGxlCi0JICBkcml2ZXJzLiAgU3luYyBpbXBsZW1lbnRhdGlvbnMgY2FuIHRh a2UgYWR2YW50YWdlIG9mIGhhcmR3YXJlCi0JICBzeW5jaHJvbml6YXRpb24gYnVpbHQgaW50byBk ZXZpY2VzIGxpa2UgR1BVcy4KLQotY29uZmlnIFNXX1NZTkMKLQlib29sICJTb2Z0d2FyZSBzeW5j aHJvbml6YXRpb24gb2JqZWN0cyIKLQlkZWZhdWx0IG4KLQlkZXBlbmRzIG9uIFNZTkMKLQktLS1o ZWxwLS0tCi0JICBBIHN5bmMgb2JqZWN0IGRyaXZlciB0aGF0IHVzZXMgYSAzMmJpdCBjb3VudGVy IHRvIGNvb3JkaW5hdGUKLQkgIHN5bmNocm9uaXphdGlvbi4gIFVzZWZ1bCB3aGVuIHRoZXJlIGlz IG5vIGhhcmR3YXJlIHByaW1pdGl2ZSBiYWNraW5nCi0JICB0aGUgc3luY2hyb25pemF0aW9uLgot Ci1jb25maWcgU1dfU1lOQ19VU0VSCi0JYm9vbCAiVXNlcnNwYWNlIEFQSSBmb3IgU1dfU1lOQyIK LQlkZWZhdWx0IG4KLQlkZXBlbmRzIG9uIFNXX1NZTkMKLQktLS1oZWxwLS0tCi0JICBQcm92aWRl cyBhIHVzZXIgc3BhY2UgQVBJIHRvIHRoZSBzdyBzeW5jIG9iamVjdC4KLQkgICpXQVJOSU5HKiBp bXByb3BlciB1c2Ugb2YgdGhpcyBjYW4gcmVzdWx0IGluIGRlYWRsb2NraW5nIGtlcm5lbAotCSAg ZHJpdmVycyBmcm9tIHVzZXJzcGFjZS4KLQogc291cmNlICJkcml2ZXJzL3N0YWdpbmcvYW5kcm9p ZC9pb24vS2NvbmZpZyIKIAogZW5kaWYgIyBpZiBBTkRST0lECmRpZmYgLS1naXQgYS9kcml2ZXJz L3N0YWdpbmcvYW5kcm9pZC9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL01ha2Vm aWxlCmluZGV4IGM3YjZjOTkuLjM1NWFkMGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9h bmRyb2lkL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL01ha2VmaWxlCkBA IC02LDUgKzYsMyBAQCBvYmotJChDT05GSUdfQVNITUVNKQkJCSs9IGFzaG1lbS5vCiBvYmotJChD T05GSUdfQU5EUk9JRF9USU1FRF9PVVRQVVQpCSs9IHRpbWVkX291dHB1dC5vCiBvYmotJChDT05G SUdfQU5EUk9JRF9USU1FRF9HUElPKQkrPSB0aW1lZF9ncGlvLm8KIG9iai0kKENPTkZJR19BTkRS T0lEX0xPV19NRU1PUllfS0lMTEVSKQkrPSBsb3dtZW1vcnlraWxsZXIubwotb2JqLSQoQ09ORklH X1NZTkMpCQkJKz0gc3luYy5vIHN5bmNfZGVidWcubwotb2JqLSQoQ09ORklHX1NXX1NZTkMpCQkJ Kz0gc3dfc3luYy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9zd19zeW5j LmMgYi9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9zd19zeW5jLmMKZGVsZXRlZCBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IGM0ZmYxNjcuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2FuZHJv aWQvc3dfc3luYy5jCisrKyAvZGV2L251bGwKQEAgLTEsMjYwICswLDAgQEAKLS8qCi0gKiBkcml2 ZXJzL2Jhc2Uvc3dfc3luYy5jCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSwgSW5j LgotICoKLSAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQg YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCi0gKiBtYXkgYmUgY29waWVkLCBk aXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgotICoKLSAqIFRoaXMg cHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg d2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt b3JlIGRldGFpbHMuCi0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNs dWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZXhwb3J0Lmg+Ci0jaW5jbHVkZSA8 bGludXgvZmlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvbWlz Y2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+Ci0jaW5jbHVkZSA8bGludXgv dWFjY2Vzcy5oPgotCi0jaW5jbHVkZSAic3dfc3luYy5oIgotCi1zdGF0aWMgaW50IHN3X3N5bmNf Y21wKHUzMiBhLCB1MzIgYikKLXsKLQlpZiAoYSA9PSBiKQotCQlyZXR1cm4gMDsKLQotCXJldHVy biAoKHMzMilhIC0gKHMzMiliKSA8IDAgPyAtMSA6IDE7Ci19Ci0KLXN0cnVjdCBzeW5jX3B0ICpz d19zeW5jX3B0X2NyZWF0ZShzdHJ1Y3Qgc3dfc3luY190aW1lbGluZSAqb2JqLCB1MzIgdmFsdWUp Ci17Ci0Jc3RydWN0IHN3X3N5bmNfcHQgKnB0OwotCi0JcHQgPSAoc3RydWN0IHN3X3N5bmNfcHQg KikKLQkJc3luY19wdF9jcmVhdGUoJm9iai0+b2JqLCBzaXplb2Yoc3RydWN0IHN3X3N5bmNfcHQp KTsKLQotCXB0LT52YWx1ZSA9IHZhbHVlOwotCi0JcmV0dXJuIChzdHJ1Y3Qgc3luY19wdCAqKXB0 OwotfQotRVhQT1JUX1NZTUJPTChzd19zeW5jX3B0X2NyZWF0ZSk7Ci0KLXN0YXRpYyBzdHJ1Y3Qg c3luY19wdCAqc3dfc3luY19wdF9kdXAoc3RydWN0IHN5bmNfcHQgKnN5bmNfcHQpCi17Ci0Jc3Ry dWN0IHN3X3N5bmNfcHQgKnB0ID0gKHN0cnVjdCBzd19zeW5jX3B0ICopc3luY19wdDsKLQlzdHJ1 Y3Qgc3dfc3luY190aW1lbGluZSAqb2JqID0KLQkJKHN0cnVjdCBzd19zeW5jX3RpbWVsaW5lICop c3luY19wdF9wYXJlbnQoc3luY19wdCk7Ci0KLQlyZXR1cm4gKHN0cnVjdCBzeW5jX3B0ICopc3df c3luY19wdF9jcmVhdGUob2JqLCBwdC0+dmFsdWUpOwotfQotCi1zdGF0aWMgaW50IHN3X3N5bmNf cHRfaGFzX3NpZ25hbGVkKHN0cnVjdCBzeW5jX3B0ICpzeW5jX3B0KQotewotCXN0cnVjdCBzd19z eW5jX3B0ICpwdCA9IChzdHJ1Y3Qgc3dfc3luY19wdCAqKXN5bmNfcHQ7Ci0Jc3RydWN0IHN3X3N5 bmNfdGltZWxpbmUgKm9iaiA9Ci0JCShzdHJ1Y3Qgc3dfc3luY190aW1lbGluZSAqKXN5bmNfcHRf cGFyZW50KHN5bmNfcHQpOwotCi0JcmV0dXJuIHN3X3N5bmNfY21wKG9iai0+dmFsdWUsIHB0LT52 YWx1ZSkgPj0gMDsKLX0KLQotc3RhdGljIGludCBzd19zeW5jX3B0X2NvbXBhcmUoc3RydWN0IHN5 bmNfcHQgKmEsIHN0cnVjdCBzeW5jX3B0ICpiKQotewotCXN0cnVjdCBzd19zeW5jX3B0ICpwdF9h ID0gKHN0cnVjdCBzd19zeW5jX3B0ICopYTsKLQlzdHJ1Y3Qgc3dfc3luY19wdCAqcHRfYiA9IChz dHJ1Y3Qgc3dfc3luY19wdCAqKWI7Ci0KLQlyZXR1cm4gc3dfc3luY19jbXAocHRfYS0+dmFsdWUs IHB0X2ItPnZhbHVlKTsKLX0KLQotc3RhdGljIGludCBzd19zeW5jX2ZpbGxfZHJpdmVyX2RhdGEo c3RydWN0IHN5bmNfcHQgKnN5bmNfcHQsCi0JCQkJICAgIHZvaWQgKmRhdGEsIGludCBzaXplKQot ewotCXN0cnVjdCBzd19zeW5jX3B0ICpwdCA9IChzdHJ1Y3Qgc3dfc3luY19wdCAqKXN5bmNfcHQ7 Ci0KLQlpZiAoc2l6ZSA8IHNpemVvZihwdC0+dmFsdWUpKQotCQlyZXR1cm4gLUVOT01FTTsKLQot CW1lbWNweShkYXRhLCAmcHQtPnZhbHVlLCBzaXplb2YocHQtPnZhbHVlKSk7Ci0KLQlyZXR1cm4g c2l6ZW9mKHB0LT52YWx1ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHN3X3N5bmNfdGltZWxpbmVfdmFs dWVfc3RyKHN0cnVjdCBzeW5jX3RpbWVsaW5lICpzeW5jX3RpbWVsaW5lLAotCQkJCSAgICAgICBj aGFyICpzdHIsIGludCBzaXplKQotewotCXN0cnVjdCBzd19zeW5jX3RpbWVsaW5lICp0aW1lbGlu ZSA9Ci0JCShzdHJ1Y3Qgc3dfc3luY190aW1lbGluZSAqKXN5bmNfdGltZWxpbmU7Ci0Jc25wcmlu dGYoc3RyLCBzaXplLCAiJWQiLCB0aW1lbGluZS0+dmFsdWUpOwotfQotCi1zdGF0aWMgdm9pZCBz d19zeW5jX3B0X3ZhbHVlX3N0cihzdHJ1Y3Qgc3luY19wdCAqc3luY19wdCwKLQkJCQkgY2hhciAq c3RyLCBpbnQgc2l6ZSkKLXsKLQlzdHJ1Y3Qgc3dfc3luY19wdCAqcHQgPSAoc3RydWN0IHN3X3N5 bmNfcHQgKilzeW5jX3B0OwotCi0Jc25wcmludGYoc3RyLCBzaXplLCAiJWQiLCBwdC0+dmFsdWUp OwotfQotCi1zdGF0aWMgc3RydWN0IHN5bmNfdGltZWxpbmVfb3BzIHN3X3N5bmNfdGltZWxpbmVf b3BzID0gewotCS5kcml2ZXJfbmFtZSA9ICJzd19zeW5jIiwKLQkuZHVwID0gc3dfc3luY19wdF9k dXAsCi0JLmhhc19zaWduYWxlZCA9IHN3X3N5bmNfcHRfaGFzX3NpZ25hbGVkLAotCS5jb21wYXJl ID0gc3dfc3luY19wdF9jb21wYXJlLAotCS5maWxsX2RyaXZlcl9kYXRhID0gc3dfc3luY19maWxs X2RyaXZlcl9kYXRhLAotCS50aW1lbGluZV92YWx1ZV9zdHIgPSBzd19zeW5jX3RpbWVsaW5lX3Zh bHVlX3N0ciwKLQkucHRfdmFsdWVfc3RyID0gc3dfc3luY19wdF92YWx1ZV9zdHIsCi19OwotCi1z dHJ1Y3Qgc3dfc3luY190aW1lbGluZSAqc3dfc3luY190aW1lbGluZV9jcmVhdGUoY29uc3QgY2hh ciAqbmFtZSkKLXsKLQlzdHJ1Y3Qgc3dfc3luY190aW1lbGluZSAqb2JqID0gKHN0cnVjdCBzd19z eW5jX3RpbWVsaW5lICopCi0JCXN5bmNfdGltZWxpbmVfY3JlYXRlKCZzd19zeW5jX3RpbWVsaW5l X29wcywKLQkJCQkgICAgIHNpemVvZihzdHJ1Y3Qgc3dfc3luY190aW1lbGluZSksCi0JCQkJICAg ICBuYW1lKTsKLQotCXJldHVybiBvYmo7Ci19Ci1FWFBPUlRfU1lNQk9MKHN3X3N5bmNfdGltZWxp bmVfY3JlYXRlKTsKLQotdm9pZCBzd19zeW5jX3RpbWVsaW5lX2luYyhzdHJ1Y3Qgc3dfc3luY190 aW1lbGluZSAqb2JqLCB1MzIgaW5jKQotewotCW9iai0+dmFsdWUgKz0gaW5jOwotCi0Jc3luY190 aW1lbGluZV9zaWduYWwoJm9iai0+b2JqKTsKLX0KLUVYUE9SVF9TWU1CT0woc3dfc3luY190aW1l bGluZV9pbmMpOwotCi0jaWZkZWYgQ09ORklHX1NXX1NZTkNfVVNFUgotLyogKldBUk5JTkcqCi0g KgotICogaW1wcm9wZXIgdXNlIG9mIHRoaXMgY2FuIHJlc3VsdCBpbiBkZWFkbG9ja2luZyBrZXJu ZWwgZHJpdmVycyBmcm9tIHVzZXJzcGFjZS4KLSAqLwotCi0vKiBvcGVuaW5nIHN3X3N5bmMgY3Jl YXRlIGEgbmV3IHN5bmMgb2JqICovCi1zdGF0aWMgaW50IHN3X3N5bmNfb3BlbihzdHJ1Y3QgaW5v ZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlzdHJ1Y3Qgc3dfc3luY190aW1lbGlu ZSAqb2JqOwotCWNoYXIgdGFza19jb21tW1RBU0tfQ09NTV9MRU5dOwotCi0JZ2V0X3Rhc2tfY29t bSh0YXNrX2NvbW0sIGN1cnJlbnQpOwotCi0Jb2JqID0gc3dfc3luY190aW1lbGluZV9jcmVhdGUo dGFza19jb21tKTsKLQlpZiAoIW9iaikKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlmaWxlLT5wcml2 YXRlX2RhdGEgPSBvYmo7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzd19zeW5jX3Jl bGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0Jc3RydWN0 IHN3X3N5bmNfdGltZWxpbmUgKm9iaiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQotCXN5bmNfdGlt ZWxpbmVfZGVzdHJveSgmb2JqLT5vYmopOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgbG9uZyBz d19zeW5jX2lvY3RsX2NyZWF0ZV9mZW5jZShzdHJ1Y3Qgc3dfc3luY190aW1lbGluZSAqb2JqLAot CQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGFyZykKLXsKLQlpbnQgZmQgPSBnZXRfdW51c2VkX2Zk X2ZsYWdzKE9fQ0xPRVhFQyk7Ci0JaW50IGVycjsKLQlzdHJ1Y3Qgc3luY19wdCAqcHQ7Ci0Jc3Ry dWN0IHN5bmNfZmVuY2UgKmZlbmNlOwotCXN0cnVjdCBzd19zeW5jX2NyZWF0ZV9mZW5jZV9kYXRh IGRhdGE7Ci0KLQlpZiAoZmQgPCAwKQotCQlyZXR1cm4gZmQ7Ci0KLQlpZiAoY29weV9mcm9tX3Vz ZXIoJmRhdGEsICh2b2lkIF9fdXNlciAqKWFyZywgc2l6ZW9mKGRhdGEpKSkgewotCQllcnIgPSAt RUZBVUxUOwotCQlnb3RvIGVycjsKLQl9Ci0KLQlwdCA9IHN3X3N5bmNfcHRfY3JlYXRlKG9iaiwg ZGF0YS52YWx1ZSk7Ci0JaWYgKCFwdCkgewotCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIGVycjsK LQl9Ci0KLQlkYXRhLm5hbWVbc2l6ZW9mKGRhdGEubmFtZSkgLSAxXSA9ICdcMCc7Ci0JZmVuY2Ug PSBzeW5jX2ZlbmNlX2NyZWF0ZShkYXRhLm5hbWUsIHB0KTsKLQlpZiAoIWZlbmNlKSB7Ci0JCXN5 bmNfcHRfZnJlZShwdCk7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyOwotCX0KLQotCWRh dGEuZmVuY2UgPSBmZDsKLQlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWFyZywgJmRh dGEsIHNpemVvZihkYXRhKSkpIHsKLQkJc3luY19mZW5jZV9wdXQoZmVuY2UpOwotCQllcnIgPSAt RUZBVUxUOwotCQlnb3RvIGVycjsKLQl9Ci0KLQlzeW5jX2ZlbmNlX2luc3RhbGwoZmVuY2UsIGZk KTsKLQotCXJldHVybiAwOwotCi1lcnI6Ci0JcHV0X3VudXNlZF9mZChmZCk7Ci0JcmV0dXJuIGVy cjsKLX0KLQotc3RhdGljIGxvbmcgc3dfc3luY19pb2N0bF9pbmMoc3RydWN0IHN3X3N5bmNfdGlt ZWxpbmUgKm9iaiwgdW5zaWduZWQgbG9uZyBhcmcpCi17Ci0JdTMyIHZhbHVlOwotCi0JaWYgKGNv cHlfZnJvbV91c2VyKCZ2YWx1ZSwgKHZvaWQgX191c2VyICopYXJnLCBzaXplb2YodmFsdWUpKSkK LQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlzd19zeW5jX3RpbWVsaW5lX2luYyhvYmosIHZhbHVlKTsK LQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgbG9uZyBzd19zeW5jX2lvY3RsKHN0cnVjdCBmaWxl ICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLAotCQkJICB1bnNpZ25lZCBsb25nIGFyZykKLXsKLQlz dHJ1Y3Qgc3dfc3luY190aW1lbGluZSAqb2JqID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCi0Jc3dp dGNoIChjbWQpIHsKLQljYXNlIFNXX1NZTkNfSU9DX0NSRUFURV9GRU5DRToKLQkJcmV0dXJuIHN3 X3N5bmNfaW9jdGxfY3JlYXRlX2ZlbmNlKG9iaiwgYXJnKTsKLQotCWNhc2UgU1dfU1lOQ19JT0Nf SU5DOgotCQlyZXR1cm4gc3dfc3luY19pb2N0bF9pbmMob2JqLCBhcmcpOwotCi0JZGVmYXVsdDoK LQkJcmV0dXJuIC1FTk9UVFk7Ci0JfQotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3Bl cmF0aW9ucyBzd19zeW5jX2ZvcHMgPSB7Ci0JLm93bmVyID0gVEhJU19NT0RVTEUsCi0JLm9wZW4g PSBzd19zeW5jX29wZW4sCi0JLnJlbGVhc2UgPSBzd19zeW5jX3JlbGVhc2UsCi0JLnVubG9ja2Vk X2lvY3RsID0gc3dfc3luY19pb2N0bCwKLQkuY29tcGF0X2lvY3RsID0gc3dfc3luY19pb2N0bCwK LX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSBzd19zeW5jX2RldiA9IHsKLQkubWlub3IJ PSBNSVNDX0RZTkFNSUNfTUlOT1IsCi0JLm5hbWUJPSAic3dfc3luYyIsCi0JLmZvcHMJPSAmc3df c3luY19mb3BzLAotfTsKLQotc3RhdGljIGludCBfX2luaXQgc3dfc3luY19kZXZpY2VfaW5pdCh2 b2lkKQotewotCXJldHVybiBtaXNjX3JlZ2lzdGVyKCZzd19zeW5jX2Rldik7Ci19Ci1kZXZpY2Vf aW5pdGNhbGwoc3dfc3luY19kZXZpY2VfaW5pdCk7Ci0KLSNlbmRpZiAvKiBDT05GSUdfU1dfU1lO Q19VU0VSICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9zd19zeW5jLmgg Yi9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9zd19zeW5jLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IGM4N2FlOWUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQv c3dfc3luYy5oCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotLyoKLSAqIGluY2x1ZGUv bGludXgvc3dfc3luYy5oCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSwgSW5jLgot ICoKLSAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCi0gKiBtYXkgYmUgY29waWVkLCBkaXN0 cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgotICoKLSAqIFRoaXMgcHJv Z3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl IGRldGFpbHMuCi0gKgotICovCi0KLSNpZm5kZWYgX0xJTlVYX1NXX1NZTkNfSAotI2RlZmluZSBf TElOVVhfU1dfU1lOQ19ICi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxp bnV4L2tjb25maWcuaD4KLSNpbmNsdWRlICJzeW5jLmgiCi0jaW5jbHVkZSAidWFwaS9zd19zeW5j LmgiCi0KLXN0cnVjdCBzd19zeW5jX3RpbWVsaW5lIHsKLQlzdHJ1Y3QJc3luY190aW1lbGluZQlv Ymo7Ci0KLQl1MzIJCQl2YWx1ZTsKLX07Ci0KLXN0cnVjdCBzd19zeW5jX3B0IHsKLQlzdHJ1Y3Qg c3luY19wdAkJcHQ7Ci0KLQl1MzIJCQl2YWx1ZTsKLX07Ci0KLSNpZiBJU19FTkFCTEVEKENPTkZJ R19TV19TWU5DKQotc3RydWN0IHN3X3N5bmNfdGltZWxpbmUgKnN3X3N5bmNfdGltZWxpbmVfY3Jl YXRlKGNvbnN0IGNoYXIgKm5hbWUpOwotdm9pZCBzd19zeW5jX3RpbWVsaW5lX2luYyhzdHJ1Y3Qg c3dfc3luY190aW1lbGluZSAqb2JqLCB1MzIgaW5jKTsKLQotc3RydWN0IHN5bmNfcHQgKnN3X3N5 bmNfcHRfY3JlYXRlKHN0cnVjdCBzd19zeW5jX3RpbWVsaW5lICpvYmosIHUzMiB2YWx1ZSk7Ci0j ZWxzZQotc3RhdGljIGlubGluZSBzdHJ1Y3Qgc3dfc3luY190aW1lbGluZSAqc3dfc3luY190aW1l bGluZV9jcmVhdGUoY29uc3QgY2hhciAqbmFtZSkKLXsKLQlyZXR1cm4gTlVMTDsKLX0KLQotc3Rh dGljIGlubGluZSB2b2lkIHN3X3N5bmNfdGltZWxpbmVfaW5jKHN0cnVjdCBzd19zeW5jX3RpbWVs aW5lICpvYmosIHUzMiBpbmMpCi17Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHN5bmNfcHQg KnN3X3N5bmNfcHRfY3JlYXRlKHN0cnVjdCBzd19zeW5jX3RpbWVsaW5lICpvYmosCi0JCQkJCQl1 MzIgdmFsdWUpCi17Ci0JcmV0dXJuIE5VTEw7Ci19Ci0jZW5kaWYgLyogSVNfRU5BQkxFRChDT05G SUdfU1dfU1lOQykgKi8KLQotI2VuZGlmIC8qIF9MSU5VWF9TV19TWU5DX0ggKi8KZGlmZiAtLWdp dCBhL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL3N5bmMuYyBiL2RyaXZlcnMvc3RhZ2luZy9hbmRy b2lkL3N5bmMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2YwZTkxOS4uMDAwMDAw MAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9zeW5jLmMKKysrIC9kZXYvbnVsbApAQCAt MSw3MzQgKzAsMCBAQAotLyoKLSAqIGRyaXZlcnMvYmFzZS9zeW5jLmMKLSAqCi0gKiBDb3B5cmln aHQgKEMpIDIwMTIgR29vZ2xlLCBJbmMuCi0gKgotICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNl ZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSB2 ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBh bmQKLSAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhv c2UgdGVybXMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKi8KLQotI2luY2x1ZGUg PGxpbnV4L2RlYnVnZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9leHBvcnQuaD4KLSNpbmNsdWRlIDxs aW51eC9maWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJu ZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9wb2xsLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4K LSNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNp bmNsdWRlIDxsaW51eC91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8bGludXgvYW5vbl9pbm9kZXMuaD4K LQotI2luY2x1ZGUgInN5bmMuaCIKLQotI2RlZmluZSBDUkVBVEVfVFJBQ0VfUE9JTlRTCi0jaW5j bHVkZSAidHJhY2Uvc3luYy5oIgotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZlbmNlX29wcyBhbmRy b2lkX2ZlbmNlX29wczsKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHN5bmNf ZmVuY2VfZm9wczsKLQotc3RydWN0IHN5bmNfdGltZWxpbmUgKnN5bmNfdGltZWxpbmVfY3JlYXRl KGNvbnN0IHN0cnVjdCBzeW5jX3RpbWVsaW5lX29wcyAqb3BzLAotCQkJCQkgICBpbnQgc2l6ZSwg Y29uc3QgY2hhciAqbmFtZSkKLXsKLQlzdHJ1Y3Qgc3luY190aW1lbGluZSAqb2JqOwotCi0JaWYg KHNpemUgPCBzaXplb2Yoc3RydWN0IHN5bmNfdGltZWxpbmUpKQotCQlyZXR1cm4gTlVMTDsKLQot CW9iaiA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKG9iaiA9PSBOVUxMKQotCQly ZXR1cm4gTlVMTDsKLQotCWtyZWZfaW5pdCgmb2JqLT5rcmVmKTsKLQlvYmotPm9wcyA9IG9wczsK LQlvYmotPmNvbnRleHQgPSBmZW5jZV9jb250ZXh0X2FsbG9jKDEpOwotCXN0cmxjcHkob2JqLT5u YW1lLCBuYW1lLCBzaXplb2Yob2JqLT5uYW1lKSk7Ci0KLQlJTklUX0xJU1RfSEVBRCgmb2JqLT5j aGlsZF9saXN0X2hlYWQpOwotCUlOSVRfTElTVF9IRUFEKCZvYmotPmFjdGl2ZV9saXN0X2hlYWQp OwotCXNwaW5fbG9ja19pbml0KCZvYmotPmNoaWxkX2xpc3RfbG9jayk7Ci0KLQlzeW5jX3RpbWVs aW5lX2RlYnVnX2FkZChvYmopOwotCi0JcmV0dXJuIG9iajsKLX0KLUVYUE9SVF9TWU1CT0woc3lu Y190aW1lbGluZV9jcmVhdGUpOwotCi1zdGF0aWMgdm9pZCBzeW5jX3RpbWVsaW5lX2ZyZWUoc3Ry dWN0IGtyZWYgKmtyZWYpCi17Ci0Jc3RydWN0IHN5bmNfdGltZWxpbmUgKm9iaiA9Ci0JCWNvbnRh aW5lcl9vZihrcmVmLCBzdHJ1Y3Qgc3luY190aW1lbGluZSwga3JlZik7Ci0KLQlzeW5jX3RpbWVs aW5lX2RlYnVnX3JlbW92ZShvYmopOwotCi0JaWYgKG9iai0+b3BzLT5yZWxlYXNlX29iaikKLQkJ b2JqLT5vcHMtPnJlbGVhc2Vfb2JqKG9iaik7Ci0KLQlrZnJlZShvYmopOwotfQotCi1zdGF0aWMg dm9pZCBzeW5jX3RpbWVsaW5lX2dldChzdHJ1Y3Qgc3luY190aW1lbGluZSAqb2JqKQotewotCWty ZWZfZ2V0KCZvYmotPmtyZWYpOwotfQotCi1zdGF0aWMgdm9pZCBzeW5jX3RpbWVsaW5lX3B1dChz dHJ1Y3Qgc3luY190aW1lbGluZSAqb2JqKQotewotCWtyZWZfcHV0KCZvYmotPmtyZWYsIHN5bmNf dGltZWxpbmVfZnJlZSk7Ci19Ci0KLXZvaWQgc3luY190aW1lbGluZV9kZXN0cm95KHN0cnVjdCBz eW5jX3RpbWVsaW5lICpvYmopCi17Ci0Jb2JqLT5kZXN0cm95ZWQgPSB0cnVlOwotCS8qCi0JICog RW5zdXJlIHRpbWVsaW5lIGlzIG1hcmtlZCBhcyBkZXN0cm95ZWQgYmVmb3JlCi0JICogY2hhbmdp bmcgdGltZWxpbmUncyBmZW5jZXMgc3RhdHVzLgotCSAqLwotCXNtcF93bWIoKTsKLQotCS8qCi0J ICogc2lnbmFsIGFueSBjaGlsZHJlbiB0aGF0IHRoZWlyIHBhcmVudCBpcyBnb2luZyBhd2F5Lgot CSAqLwotCXN5bmNfdGltZWxpbmVfc2lnbmFsKG9iaik7Ci0Jc3luY190aW1lbGluZV9wdXQob2Jq KTsKLX0KLUVYUE9SVF9TWU1CT0woc3luY190aW1lbGluZV9kZXN0cm95KTsKLQotdm9pZCBzeW5j X3RpbWVsaW5lX3NpZ25hbChzdHJ1Y3Qgc3luY190aW1lbGluZSAqb2JqKQotewotCXVuc2lnbmVk IGxvbmcgZmxhZ3M7Ci0JTElTVF9IRUFEKHNpZ25hbGVkX3B0cyk7Ci0Jc3RydWN0IHN5bmNfcHQg KnB0LCAqbmV4dDsKLQotCXRyYWNlX3N5bmNfdGltZWxpbmUob2JqKTsKLQotCXNwaW5fbG9ja19p cnFzYXZlKCZvYmotPmNoaWxkX2xpc3RfbG9jaywgZmxhZ3MpOwotCi0JbGlzdF9mb3JfZWFjaF9l bnRyeV9zYWZlKHB0LCBuZXh0LCAmb2JqLT5hY3RpdmVfbGlzdF9oZWFkLAotCQkJCSBhY3RpdmVf bGlzdCkgewotCQlpZiAoZmVuY2VfaXNfc2lnbmFsZWRfbG9ja2VkKCZwdC0+YmFzZSkpCi0JCQls aXN0X2RlbF9pbml0KCZwdC0+YWN0aXZlX2xpc3QpOwotCX0KLQotCXNwaW5fdW5sb2NrX2lycXJl c3RvcmUoJm9iai0+Y2hpbGRfbGlzdF9sb2NrLCBmbGFncyk7Ci19Ci1FWFBPUlRfU1lNQk9MKHN5 bmNfdGltZWxpbmVfc2lnbmFsKTsKLQotc3RydWN0IHN5bmNfcHQgKnN5bmNfcHRfY3JlYXRlKHN0 cnVjdCBzeW5jX3RpbWVsaW5lICpvYmosIGludCBzaXplKQotewotCXVuc2lnbmVkIGxvbmcgZmxh Z3M7Ci0Jc3RydWN0IHN5bmNfcHQgKnB0OwotCi0JaWYgKHNpemUgPCBzaXplb2Yoc3RydWN0IHN5 bmNfcHQpKQotCQlyZXR1cm4gTlVMTDsKLQotCXB0ID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVM KTsKLQlpZiAocHQgPT0gTlVMTCkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlzcGluX2xvY2tfaXJxc2F2 ZSgmb2JqLT5jaGlsZF9saXN0X2xvY2ssIGZsYWdzKTsKLQlzeW5jX3RpbWVsaW5lX2dldChvYmop OwotCWZlbmNlX2luaXQoJnB0LT5iYXNlLCAmYW5kcm9pZF9mZW5jZV9vcHMsICZvYmotPmNoaWxk X2xpc3RfbG9jaywKLQkJICAgb2JqLT5jb250ZXh0LCArK29iai0+dmFsdWUpOwotCWxpc3RfYWRk X3RhaWwoJnB0LT5jaGlsZF9saXN0LCAmb2JqLT5jaGlsZF9saXN0X2hlYWQpOwotCUlOSVRfTElT VF9IRUFEKCZwdC0+YWN0aXZlX2xpc3QpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9iai0+ Y2hpbGRfbGlzdF9sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIHB0OwotfQotRVhQT1JUX1NZTUJPTChz eW5jX3B0X2NyZWF0ZSk7Ci0KLXZvaWQgc3luY19wdF9mcmVlKHN0cnVjdCBzeW5jX3B0ICpwdCkK LXsKLQlmZW5jZV9wdXQoJnB0LT5iYXNlKTsKLX0KLUVYUE9SVF9TWU1CT0woc3luY19wdF9mcmVl KTsKLQotc3RhdGljIHN0cnVjdCBzeW5jX2ZlbmNlICpzeW5jX2ZlbmNlX2FsbG9jKGludCBzaXpl LCBjb25zdCBjaGFyICpuYW1lKQotewotCXN0cnVjdCBzeW5jX2ZlbmNlICpmZW5jZTsKLQotCWZl bmNlID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKLQlpZiAoZmVuY2UgPT0gTlVMTCkKLQkJ cmV0dXJuIE5VTEw7Ci0KLQlmZW5jZS0+ZmlsZSA9IGFub25faW5vZGVfZ2V0ZmlsZSgic3luY19m ZW5jZSIsICZzeW5jX2ZlbmNlX2ZvcHMsCi0JCQkJCSBmZW5jZSwgMCk7Ci0JaWYgKElTX0VSUihm ZW5jZS0+ZmlsZSkpCi0JCWdvdG8gZXJyOwotCi0Ja3JlZl9pbml0KCZmZW5jZS0+a3JlZik7Ci0J c3RybGNweShmZW5jZS0+bmFtZSwgbmFtZSwgc2l6ZW9mKGZlbmNlLT5uYW1lKSk7Ci0KLQlpbml0 X3dhaXRxdWV1ZV9oZWFkKCZmZW5jZS0+d3EpOwotCi0JcmV0dXJuIGZlbmNlOwotCi1lcnI6Ci0J a2ZyZWUoZmVuY2UpOwotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgdm9pZCBmZW5jZV9jaGVj a19jYl9mdW5jKHN0cnVjdCBmZW5jZSAqZiwgc3RydWN0IGZlbmNlX2NiICpjYikKLXsKLQlzdHJ1 Y3Qgc3luY19mZW5jZV9jYiAqY2hlY2s7Ci0Jc3RydWN0IHN5bmNfZmVuY2UgKmZlbmNlOwotCi0J Y2hlY2sgPSBjb250YWluZXJfb2YoY2IsIHN0cnVjdCBzeW5jX2ZlbmNlX2NiLCBjYik7Ci0JZmVu Y2UgPSBjaGVjay0+ZmVuY2U7Ci0KLQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmZmVuY2UtPnN0 YXR1cykpCi0JCXdha2VfdXBfYWxsKCZmZW5jZS0+d3EpOwotfQotCi0vKiBUT0RPOiBpbXBsZW1l bnQgYSBjcmVhdGUgd2hpY2ggdGFrZXMgbW9yZSB0aGF0IG9uZSBzeW5jX3B0ICovCi1zdHJ1Y3Qg c3luY19mZW5jZSAqc3luY19mZW5jZV9jcmVhdGVfZG1hKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVj dCBmZW5jZSAqcHQpCi17Ci0Jc3RydWN0IHN5bmNfZmVuY2UgKmZlbmNlOwotCi0JZmVuY2UgPSBz eW5jX2ZlbmNlX2FsbG9jKG9mZnNldG9mKHN0cnVjdCBzeW5jX2ZlbmNlLCBjYnNbMV0pLCBuYW1l KTsKLQlpZiAoZmVuY2UgPT0gTlVMTCkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlmZW5jZS0+bnVtX2Zl bmNlcyA9IDE7Ci0JYXRvbWljX3NldCgmZmVuY2UtPnN0YXR1cywgMSk7Ci0KLQlmZW5jZS0+Y2Jz WzBdLnN5bmNfcHQgPSBwdDsKLQlmZW5jZS0+Y2JzWzBdLmZlbmNlID0gZmVuY2U7Ci0JaWYgKGZl bmNlX2FkZF9jYWxsYmFjayhwdCwgJmZlbmNlLT5jYnNbMF0uY2IsIGZlbmNlX2NoZWNrX2NiX2Z1 bmMpKQotCQlhdG9taWNfZGVjKCZmZW5jZS0+c3RhdHVzKTsKLQotCXN5bmNfZmVuY2VfZGVidWdf YWRkKGZlbmNlKTsKLQotCXJldHVybiBmZW5jZTsKLX0KLUVYUE9SVF9TWU1CT0woc3luY19mZW5j ZV9jcmVhdGVfZG1hKTsKLQotc3RydWN0IHN5bmNfZmVuY2UgKnN5bmNfZmVuY2VfY3JlYXRlKGNv bnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBzeW5jX3B0ICpwdCkKLXsKLQlyZXR1cm4gc3luY19mZW5j ZV9jcmVhdGVfZG1hKG5hbWUsICZwdC0+YmFzZSk7Ci19Ci1FWFBPUlRfU1lNQk9MKHN5bmNfZmVu Y2VfY3JlYXRlKTsKLQotc3RydWN0IHN5bmNfZmVuY2UgKnN5bmNfZmVuY2VfZmRnZXQoaW50IGZk KQotewotCXN0cnVjdCBmaWxlICpmaWxlID0gZmdldChmZCk7Ci0KLQlpZiAoZmlsZSA9PSBOVUxM KQotCQlyZXR1cm4gTlVMTDsKLQotCWlmIChmaWxlLT5mX29wICE9ICZzeW5jX2ZlbmNlX2ZvcHMp Ci0JCWdvdG8gZXJyOwotCi0JcmV0dXJuIGZpbGUtPnByaXZhdGVfZGF0YTsKLQotZXJyOgotCWZw dXQoZmlsZSk7Ci0JcmV0dXJuIE5VTEw7Ci19Ci1FWFBPUlRfU1lNQk9MKHN5bmNfZmVuY2VfZmRn ZXQpOwotCi12b2lkIHN5bmNfZmVuY2VfcHV0KHN0cnVjdCBzeW5jX2ZlbmNlICpmZW5jZSkKLXsK LQlmcHV0KGZlbmNlLT5maWxlKTsKLX0KLUVYUE9SVF9TWU1CT0woc3luY19mZW5jZV9wdXQpOwot Ci12b2lkIHN5bmNfZmVuY2VfaW5zdGFsbChzdHJ1Y3Qgc3luY19mZW5jZSAqZmVuY2UsIGludCBm ZCkKLXsKLQlmZF9pbnN0YWxsKGZkLCBmZW5jZS0+ZmlsZSk7Ci19Ci1FWFBPUlRfU1lNQk9MKHN5 bmNfZmVuY2VfaW5zdGFsbCk7Ci0KLXN0YXRpYyB2b2lkIHN5bmNfZmVuY2VfYWRkX3B0KHN0cnVj dCBzeW5jX2ZlbmNlICpmZW5jZSwKLQkJCSAgICAgIGludCAqaSwgc3RydWN0IGZlbmNlICpwdCkK LXsKLQlmZW5jZS0+Y2JzWyppXS5zeW5jX3B0ID0gcHQ7Ci0JZmVuY2UtPmNic1sqaV0uZmVuY2Ug PSBmZW5jZTsKLQotCWlmICghZmVuY2VfYWRkX2NhbGxiYWNrKHB0LCAmZmVuY2UtPmNic1sqaV0u Y2IsIGZlbmNlX2NoZWNrX2NiX2Z1bmMpKSB7Ci0JCWZlbmNlX2dldChwdCk7Ci0JCSgqaSkrKzsK LQl9Ci19Ci0KLXN0cnVjdCBzeW5jX2ZlbmNlICpzeW5jX2ZlbmNlX21lcmdlKGNvbnN0IGNoYXIg Km5hbWUsCi0JCQkJICAgIHN0cnVjdCBzeW5jX2ZlbmNlICphLCBzdHJ1Y3Qgc3luY19mZW5jZSAq YikKLXsKLQlpbnQgbnVtX2ZlbmNlcyA9IGEtPm51bV9mZW5jZXMgKyBiLT5udW1fZmVuY2VzOwot CXN0cnVjdCBzeW5jX2ZlbmNlICpmZW5jZTsKLQlpbnQgaSwgaV9hLCBpX2I7Ci0JdW5zaWduZWQg bG9uZyBzaXplID0gb2Zmc2V0b2Yoc3RydWN0IHN5bmNfZmVuY2UsIGNic1tudW1fZmVuY2VzXSk7 Ci0KLQlmZW5jZSA9IHN5bmNfZmVuY2VfYWxsb2Moc2l6ZSwgbmFtZSk7Ci0JaWYgKGZlbmNlID09 IE5VTEwpCi0JCXJldHVybiBOVUxMOwotCi0JYXRvbWljX3NldCgmZmVuY2UtPnN0YXR1cywgbnVt X2ZlbmNlcyk7Ci0KLQkvKgotCSAqIEFzc3VtZSBzeW5jX2ZlbmNlIGEgYW5kIGIgYXJlIGJvdGgg b3JkZXJlZCBhbmQgaGF2ZSBubwotCSAqIGR1cGxpY2F0ZXMgd2l0aCB0aGUgc2FtZSBjb250ZXh0 LgotCSAqCi0JICogSWYgYSBzeW5jX2ZlbmNlIGNhbiBvbmx5IGJlIGNyZWF0ZWQgd2l0aCBzeW5j X2ZlbmNlX21lcmdlCi0JICogYW5kIHN5bmNfZmVuY2VfY3JlYXRlLCB0aGlzIGlzIGEgcmVhc29u YWJsZSBhc3N1bXB0aW9uLgotCSAqLwotCWZvciAoaSA9IGlfYSA9IGlfYiA9IDA7IGlfYSA8IGEt Pm51bV9mZW5jZXMgJiYgaV9iIDwgYi0+bnVtX2ZlbmNlczsgKSB7Ci0JCXN0cnVjdCBmZW5jZSAq cHRfYSA9IGEtPmNic1tpX2FdLnN5bmNfcHQ7Ci0JCXN0cnVjdCBmZW5jZSAqcHRfYiA9IGItPmNi c1tpX2JdLnN5bmNfcHQ7Ci0KLQkJaWYgKHB0X2EtPmNvbnRleHQgPCBwdF9iLT5jb250ZXh0KSB7 Ci0JCQlzeW5jX2ZlbmNlX2FkZF9wdChmZW5jZSwgJmksIHB0X2EpOwotCi0JCQlpX2ErKzsKLQkJ fSBlbHNlIGlmIChwdF9hLT5jb250ZXh0ID4gcHRfYi0+Y29udGV4dCkgewotCQkJc3luY19mZW5j ZV9hZGRfcHQoZmVuY2UsICZpLCBwdF9iKTsKLQotCQkJaV9iKys7Ci0JCX0gZWxzZSB7Ci0JCQlp ZiAocHRfYS0+c2Vxbm8gLSBwdF9iLT5zZXFubyA8PSBJTlRfTUFYKQotCQkJCXN5bmNfZmVuY2Vf YWRkX3B0KGZlbmNlLCAmaSwgcHRfYSk7Ci0JCQllbHNlCi0JCQkJc3luY19mZW5jZV9hZGRfcHQo ZmVuY2UsICZpLCBwdF9iKTsKLQotCQkJaV9hKys7Ci0JCQlpX2IrKzsKLQkJfQotCX0KLQotCWZv ciAoOyBpX2EgPCBhLT5udW1fZmVuY2VzOyBpX2ErKykKLQkJc3luY19mZW5jZV9hZGRfcHQoZmVu Y2UsICZpLCBhLT5jYnNbaV9hXS5zeW5jX3B0KTsKLQotCWZvciAoOyBpX2IgPCBiLT5udW1fZmVu Y2VzOyBpX2IrKykKLQkJc3luY19mZW5jZV9hZGRfcHQoZmVuY2UsICZpLCBiLT5jYnNbaV9iXS5z eW5jX3B0KTsKLQotCWlmIChudW1fZmVuY2VzID4gaSkKLQkJYXRvbWljX3N1YihudW1fZmVuY2Vz IC0gaSwgJmZlbmNlLT5zdGF0dXMpOwotCWZlbmNlLT5udW1fZmVuY2VzID0gaTsKLQotCXN5bmNf ZmVuY2VfZGVidWdfYWRkKGZlbmNlKTsKLQlyZXR1cm4gZmVuY2U7Ci19Ci1FWFBPUlRfU1lNQk9M KHN5bmNfZmVuY2VfbWVyZ2UpOwotCi1pbnQgc3luY19mZW5jZV93YWtlX3VwX3dxKHdhaXRfcXVl dWVfdCAqY3VyciwgdW5zaWduZWQgbW9kZSwKLQkJCQkgaW50IHdha2VfZmxhZ3MsIHZvaWQgKmtl eSkKLXsKLQlzdHJ1Y3Qgc3luY19mZW5jZV93YWl0ZXIgKndhaXQ7Ci0KLQl3YWl0ID0gY29udGFp bmVyX29mKGN1cnIsIHN0cnVjdCBzeW5jX2ZlbmNlX3dhaXRlciwgd29yayk7Ci0JbGlzdF9kZWxf aW5pdCgmd2FpdC0+d29yay50YXNrX2xpc3QpOwotCi0Jd2FpdC0+Y2FsbGJhY2sod2FpdC0+d29y ay5wcml2YXRlLCB3YWl0KTsKLQlyZXR1cm4gMTsKLX0KLQotaW50IHN5bmNfZmVuY2Vfd2FpdF9h c3luYyhzdHJ1Y3Qgc3luY19mZW5jZSAqZmVuY2UsCi0JCQkgIHN0cnVjdCBzeW5jX2ZlbmNlX3dh aXRlciAqd2FpdGVyKQotewotCWludCBlcnIgPSBhdG9taWNfcmVhZCgmZmVuY2UtPnN0YXR1cyk7 Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwot Ci0JaWYgKCFlcnIpCi0JCXJldHVybiAxOwotCi0JaW5pdF93YWl0cXVldWVfZnVuY19lbnRyeSgm d2FpdGVyLT53b3JrLCBzeW5jX2ZlbmNlX3dha2VfdXBfd3EpOwotCXdhaXRlci0+d29yay5wcml2 YXRlID0gZmVuY2U7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZmVuY2UtPndxLmxvY2ssIGZsYWdz KTsKLQllcnIgPSBhdG9taWNfcmVhZCgmZmVuY2UtPnN0YXR1cyk7Ci0JaWYgKGVyciA+IDApCi0J CV9fYWRkX3dhaXRfcXVldWVfdGFpbCgmZmVuY2UtPndxLCAmd2FpdGVyLT53b3JrKTsKLQlzcGlu X3VubG9ja19pcnFyZXN0b3JlKCZmZW5jZS0+d3EubG9jaywgZmxhZ3MpOwotCi0JaWYgKGVyciA8 IDApCi0JCXJldHVybiBlcnI7Ci0KLQlyZXR1cm4gIWVycjsKLX0KLUVYUE9SVF9TWU1CT0woc3lu Y19mZW5jZV93YWl0X2FzeW5jKTsKLQotaW50IHN5bmNfZmVuY2VfY2FuY2VsX2FzeW5jKHN0cnVj dCBzeW5jX2ZlbmNlICpmZW5jZSwKLQkJCSAgICAgc3RydWN0IHN5bmNfZmVuY2Vfd2FpdGVyICp3 YWl0ZXIpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcmV0ID0gMDsKLQotCXNwaW5f bG9ja19pcnFzYXZlKCZmZW5jZS0+d3EubG9jaywgZmxhZ3MpOwotCWlmICghbGlzdF9lbXB0eSgm d2FpdGVyLT53b3JrLnRhc2tfbGlzdCkpCi0JCWxpc3RfZGVsX2luaXQoJndhaXRlci0+d29yay50 YXNrX2xpc3QpOwotCWVsc2UKLQkJcmV0ID0gLUVOT0VOVDsKLQlzcGluX3VubG9ja19pcnFyZXN0 b3JlKCZmZW5jZS0+d3EubG9jaywgZmxhZ3MpOwotCXJldHVybiByZXQ7Ci19Ci1FWFBPUlRfU1lN Qk9MKHN5bmNfZmVuY2VfY2FuY2VsX2FzeW5jKTsKLQotaW50IHN5bmNfZmVuY2Vfd2FpdChzdHJ1 Y3Qgc3luY19mZW5jZSAqZmVuY2UsIGxvbmcgdGltZW91dCkKLXsKLQlsb25nIHJldDsKLQlpbnQg aTsKLQotCWlmICh0aW1lb3V0IDwgMCkKLQkJdGltZW91dCA9IE1BWF9TQ0hFRFVMRV9USU1FT1VU OwotCWVsc2UKLQkJdGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXModGltZW91dCk7Ci0KLQl0cmFj ZV9zeW5jX3dhaXQoZmVuY2UsIDEpOwotCWZvciAoaSA9IDA7IGkgPCBmZW5jZS0+bnVtX2ZlbmNl czsgKytpKQotCQl0cmFjZV9zeW5jX3B0KGZlbmNlLT5jYnNbaV0uc3luY19wdCk7Ci0JcmV0ID0g d2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoZmVuY2UtPndxLAotCQkJCQkgICAgICAg YXRvbWljX3JlYWQoJmZlbmNlLT5zdGF0dXMpIDw9IDAsCi0JCQkJCSAgICAgICB0aW1lb3V0KTsK LQl0cmFjZV9zeW5jX3dhaXQoZmVuY2UsIDApOwotCi0JaWYgKHJldCA8IDApIHsKLQkJcmV0dXJu IHJldDsKLQl9IGVsc2UgaWYgKHJldCA9PSAwKSB7Ci0JCWlmICh0aW1lb3V0KSB7Ci0JCQlwcl9p bmZvKCJmZW5jZSB0aW1lb3V0IG9uIFslcF0gYWZ0ZXIgJWRtc1xuIiwgZmVuY2UsCi0JCQkJamlm Zmllc190b19tc2Vjcyh0aW1lb3V0KSk7Ci0JCQlzeW5jX2R1bXAoKTsKLQkJfQotCQlyZXR1cm4g LUVUSU1FOwotCX0KLQotCXJldCA9IGF0b21pY19yZWFkKCZmZW5jZS0+c3RhdHVzKTsKLQlpZiAo cmV0KSB7Ci0JCXByX2luZm8oImZlbmNlIGVycm9yICVsZCBvbiBbJXBdXG4iLCByZXQsIGZlbmNl KTsKLQkJc3luY19kdW1wKCk7Ci0JfQotCXJldHVybiByZXQ7Ci19Ci1FWFBPUlRfU1lNQk9MKHN5 bmNfZmVuY2Vfd2FpdCk7Ci0KLXN0YXRpYyBjb25zdCBjaGFyICphbmRyb2lkX2ZlbmNlX2dldF9k cml2ZXJfbmFtZShzdHJ1Y3QgZmVuY2UgKmZlbmNlKQotewotCXN0cnVjdCBzeW5jX3B0ICpwdCA9 IGNvbnRhaW5lcl9vZihmZW5jZSwgc3RydWN0IHN5bmNfcHQsIGJhc2UpOwotCXN0cnVjdCBzeW5j X3RpbWVsaW5lICpwYXJlbnQgPSBzeW5jX3B0X3BhcmVudChwdCk7Ci0KLQlyZXR1cm4gcGFyZW50 LT5vcHMtPmRyaXZlcl9uYW1lOwotfQotCi1zdGF0aWMgY29uc3QgY2hhciAqYW5kcm9pZF9mZW5j ZV9nZXRfdGltZWxpbmVfbmFtZShzdHJ1Y3QgZmVuY2UgKmZlbmNlKQotewotCXN0cnVjdCBzeW5j X3B0ICpwdCA9IGNvbnRhaW5lcl9vZihmZW5jZSwgc3RydWN0IHN5bmNfcHQsIGJhc2UpOwotCXN0 cnVjdCBzeW5jX3RpbWVsaW5lICpwYXJlbnQgPSBzeW5jX3B0X3BhcmVudChwdCk7Ci0KLQlyZXR1 cm4gcGFyZW50LT5uYW1lOwotfQotCi1zdGF0aWMgdm9pZCBhbmRyb2lkX2ZlbmNlX3JlbGVhc2Uo c3RydWN0IGZlbmNlICpmZW5jZSkKLXsKLQlzdHJ1Y3Qgc3luY19wdCAqcHQgPSBjb250YWluZXJf b2YoZmVuY2UsIHN0cnVjdCBzeW5jX3B0LCBiYXNlKTsKLQlzdHJ1Y3Qgc3luY190aW1lbGluZSAq cGFyZW50ID0gc3luY19wdF9wYXJlbnQocHQpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlz cGluX2xvY2tfaXJxc2F2ZShmZW5jZS0+bG9jaywgZmxhZ3MpOwotCWxpc3RfZGVsKCZwdC0+Y2hp bGRfbGlzdCk7Ci0JaWYgKFdBUk5fT05fT05DRSghbGlzdF9lbXB0eSgmcHQtPmFjdGl2ZV9saXN0 KSkpCi0JCWxpc3RfZGVsKCZwdC0+YWN0aXZlX2xpc3QpOwotCXNwaW5fdW5sb2NrX2lycXJlc3Rv cmUoZmVuY2UtPmxvY2ssIGZsYWdzKTsKLQotCWlmIChwYXJlbnQtPm9wcy0+ZnJlZV9wdCkKLQkJ cGFyZW50LT5vcHMtPmZyZWVfcHQocHQpOwotCi0Jc3luY190aW1lbGluZV9wdXQocGFyZW50KTsK LQlmZW5jZV9mcmVlKCZwdC0+YmFzZSk7Ci19Ci0KLXN0YXRpYyBib29sIGFuZHJvaWRfZmVuY2Vf c2lnbmFsZWQoc3RydWN0IGZlbmNlICpmZW5jZSkKLXsKLQlzdHJ1Y3Qgc3luY19wdCAqcHQgPSBj b250YWluZXJfb2YoZmVuY2UsIHN0cnVjdCBzeW5jX3B0LCBiYXNlKTsKLQlzdHJ1Y3Qgc3luY190 aW1lbGluZSAqcGFyZW50ID0gc3luY19wdF9wYXJlbnQocHQpOwotCWludCByZXQ7Ci0KLQlyZXQg PSBwYXJlbnQtPm9wcy0+aGFzX3NpZ25hbGVkKHB0KTsKLQlpZiAocmV0IDwgMCkKLQkJZmVuY2Ut PnN0YXR1cyA9IHJldDsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgYm9vbCBhbmRyb2lkX2Zl bmNlX2VuYWJsZV9zaWduYWxpbmcoc3RydWN0IGZlbmNlICpmZW5jZSkKLXsKLQlzdHJ1Y3Qgc3lu Y19wdCAqcHQgPSBjb250YWluZXJfb2YoZmVuY2UsIHN0cnVjdCBzeW5jX3B0LCBiYXNlKTsKLQlz dHJ1Y3Qgc3luY190aW1lbGluZSAqcGFyZW50ID0gc3luY19wdF9wYXJlbnQocHQpOwotCi0JaWYg KGFuZHJvaWRfZmVuY2Vfc2lnbmFsZWQoZmVuY2UpKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQlsaXN0 X2FkZF90YWlsKCZwdC0+YWN0aXZlX2xpc3QsICZwYXJlbnQtPmFjdGl2ZV9saXN0X2hlYWQpOwot CXJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgaW50IGFuZHJvaWRfZmVuY2VfZmlsbF9kcml2ZXJf ZGF0YShzdHJ1Y3QgZmVuY2UgKmZlbmNlLAotCQkJCQkgIHZvaWQgKmRhdGEsIGludCBzaXplKQot ewotCXN0cnVjdCBzeW5jX3B0ICpwdCA9IGNvbnRhaW5lcl9vZihmZW5jZSwgc3RydWN0IHN5bmNf cHQsIGJhc2UpOwotCXN0cnVjdCBzeW5jX3RpbWVsaW5lICpwYXJlbnQgPSBzeW5jX3B0X3BhcmVu dChwdCk7Ci0KLQlpZiAoIXBhcmVudC0+b3BzLT5maWxsX2RyaXZlcl9kYXRhKQotCQlyZXR1cm4g MDsKLQlyZXR1cm4gcGFyZW50LT5vcHMtPmZpbGxfZHJpdmVyX2RhdGEocHQsIGRhdGEsIHNpemUp OwotfQotCi1zdGF0aWMgdm9pZCBhbmRyb2lkX2ZlbmNlX3ZhbHVlX3N0cihzdHJ1Y3QgZmVuY2Ug KmZlbmNlLAotCQkJCSAgICBjaGFyICpzdHIsIGludCBzaXplKQotewotCXN0cnVjdCBzeW5jX3B0 ICpwdCA9IGNvbnRhaW5lcl9vZihmZW5jZSwgc3RydWN0IHN5bmNfcHQsIGJhc2UpOwotCXN0cnVj dCBzeW5jX3RpbWVsaW5lICpwYXJlbnQgPSBzeW5jX3B0X3BhcmVudChwdCk7Ci0KLQlpZiAoIXBh cmVudC0+b3BzLT5wdF92YWx1ZV9zdHIpIHsKLQkJaWYgKHNpemUpCi0JCQkqc3RyID0gMDsKLQkJ cmV0dXJuOwotCX0KLQlwYXJlbnQtPm9wcy0+cHRfdmFsdWVfc3RyKHB0LCBzdHIsIHNpemUpOwot fQotCi1zdGF0aWMgdm9pZCBhbmRyb2lkX2ZlbmNlX3RpbWVsaW5lX3ZhbHVlX3N0cihzdHJ1Y3Qg ZmVuY2UgKmZlbmNlLAotCQkJCQkgICAgIGNoYXIgKnN0ciwgaW50IHNpemUpCi17Ci0Jc3RydWN0 IHN5bmNfcHQgKnB0ID0gY29udGFpbmVyX29mKGZlbmNlLCBzdHJ1Y3Qgc3luY19wdCwgYmFzZSk7 Ci0Jc3RydWN0IHN5bmNfdGltZWxpbmUgKnBhcmVudCA9IHN5bmNfcHRfcGFyZW50KHB0KTsKLQot CWlmICghcGFyZW50LT5vcHMtPnRpbWVsaW5lX3ZhbHVlX3N0cikgewotCQlpZiAoc2l6ZSkKLQkJ CSpzdHIgPSAwOwotCQlyZXR1cm47Ci0JfQotCXBhcmVudC0+b3BzLT50aW1lbGluZV92YWx1ZV9z dHIocGFyZW50LCBzdHIsIHNpemUpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZlbmNlX29w cyBhbmRyb2lkX2ZlbmNlX29wcyA9IHsKLQkuZ2V0X2RyaXZlcl9uYW1lID0gYW5kcm9pZF9mZW5j ZV9nZXRfZHJpdmVyX25hbWUsCi0JLmdldF90aW1lbGluZV9uYW1lID0gYW5kcm9pZF9mZW5jZV9n ZXRfdGltZWxpbmVfbmFtZSwKLQkuZW5hYmxlX3NpZ25hbGluZyA9IGFuZHJvaWRfZmVuY2VfZW5h YmxlX3NpZ25hbGluZywKLQkuc2lnbmFsZWQgPSBhbmRyb2lkX2ZlbmNlX3NpZ25hbGVkLAotCS53 YWl0ID0gZmVuY2VfZGVmYXVsdF93YWl0LAotCS5yZWxlYXNlID0gYW5kcm9pZF9mZW5jZV9yZWxl YXNlLAotCS5maWxsX2RyaXZlcl9kYXRhID0gYW5kcm9pZF9mZW5jZV9maWxsX2RyaXZlcl9kYXRh LAotCS5mZW5jZV92YWx1ZV9zdHIgPSBhbmRyb2lkX2ZlbmNlX3ZhbHVlX3N0ciwKLQkudGltZWxp bmVfdmFsdWVfc3RyID0gYW5kcm9pZF9mZW5jZV90aW1lbGluZV92YWx1ZV9zdHIsCi19OwotCi1z dGF0aWMgdm9pZCBzeW5jX2ZlbmNlX2ZyZWUoc3RydWN0IGtyZWYgKmtyZWYpCi17Ci0Jc3RydWN0 IHN5bmNfZmVuY2UgKmZlbmNlID0gY29udGFpbmVyX29mKGtyZWYsIHN0cnVjdCBzeW5jX2ZlbmNl LCBrcmVmKTsKLQlpbnQgaSwgc3RhdHVzID0gYXRvbWljX3JlYWQoJmZlbmNlLT5zdGF0dXMpOwot Ci0JZm9yIChpID0gMDsgaSA8IGZlbmNlLT5udW1fZmVuY2VzOyArK2kpIHsKLQkJaWYgKHN0YXR1 cykKLQkJCWZlbmNlX3JlbW92ZV9jYWxsYmFjayhmZW5jZS0+Y2JzW2ldLnN5bmNfcHQsCi0JCQkJ CSAgICAgICZmZW5jZS0+Y2JzW2ldLmNiKTsKLQkJZmVuY2VfcHV0KGZlbmNlLT5jYnNbaV0uc3lu Y19wdCk7Ci0JfQotCi0Ja2ZyZWUoZmVuY2UpOwotfQotCi1zdGF0aWMgaW50IHN5bmNfZmVuY2Vf cmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlzdHJ1 Y3Qgc3luY19mZW5jZSAqZmVuY2UgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0KLQlzeW5jX2ZlbmNl X2RlYnVnX3JlbW92ZShmZW5jZSk7Ci0KLQlrcmVmX3B1dCgmZmVuY2UtPmtyZWYsIHN5bmNfZmVu Y2VfZnJlZSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgc3luY19mZW5j ZV9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KQotewotCXN0cnVjdCBz eW5jX2ZlbmNlICpmZW5jZSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQlpbnQgc3RhdHVzOwotCi0J cG9sbF93YWl0KGZpbGUsICZmZW5jZS0+d3EsIHdhaXQpOwotCi0Jc3RhdHVzID0gYXRvbWljX3Jl YWQoJmZlbmNlLT5zdGF0dXMpOwotCi0JaWYgKCFzdGF0dXMpCi0JCXJldHVybiBQT0xMSU47Ci0J ZWxzZSBpZiAoc3RhdHVzIDwgMCkKLQkJcmV0dXJuIFBPTExFUlI7Ci0JcmV0dXJuIDA7Ci19Ci0K LXN0YXRpYyBsb25nIHN5bmNfZmVuY2VfaW9jdGxfd2FpdChzdHJ1Y3Qgc3luY19mZW5jZSAqZmVu Y2UsIHVuc2lnbmVkIGxvbmcgYXJnKQotewotCV9fczMyIHZhbHVlOwotCi0JaWYgKGNvcHlfZnJv bV91c2VyKCZ2YWx1ZSwgKHZvaWQgX191c2VyICopYXJnLCBzaXplb2YodmFsdWUpKSkKLQkJcmV0 dXJuIC1FRkFVTFQ7Ci0KLQlyZXR1cm4gc3luY19mZW5jZV93YWl0KGZlbmNlLCB2YWx1ZSk7Ci19 Ci0KLXN0YXRpYyBsb25nIHN5bmNfZmVuY2VfaW9jdGxfbWVyZ2Uoc3RydWN0IHN5bmNfZmVuY2Ug KmZlbmNlLCB1bnNpZ25lZCBsb25nIGFyZykKLXsKLQlpbnQgZmQgPSBnZXRfdW51c2VkX2ZkX2Zs YWdzKE9fQ0xPRVhFQyk7Ci0JaW50IGVycjsKLQlzdHJ1Y3Qgc3luY19mZW5jZSAqZmVuY2UyLCAq ZmVuY2UzOwotCXN0cnVjdCBzeW5jX21lcmdlX2RhdGEgZGF0YTsKLQotCWlmIChmZCA8IDApCi0J CXJldHVybiBmZDsKLQotCWlmIChjb3B5X2Zyb21fdXNlcigmZGF0YSwgKHZvaWQgX191c2VyICop YXJnLCBzaXplb2YoZGF0YSkpKSB7Ci0JCWVyciA9IC1FRkFVTFQ7Ci0JCWdvdG8gZXJyX3B1dF9m ZDsKLQl9Ci0KLQlmZW5jZTIgPSBzeW5jX2ZlbmNlX2ZkZ2V0KGRhdGEuZmQyKTsKLQlpZiAoZmVu Y2UyID09IE5VTEwpIHsKLQkJZXJyID0gLUVOT0VOVDsKLQkJZ290byBlcnJfcHV0X2ZkOwotCX0K LQotCWRhdGEubmFtZVtzaXplb2YoZGF0YS5uYW1lKSAtIDFdID0gJ1wwJzsKLQlmZW5jZTMgPSBz eW5jX2ZlbmNlX21lcmdlKGRhdGEubmFtZSwgZmVuY2UsIGZlbmNlMik7Ci0JaWYgKGZlbmNlMyA9 PSBOVUxMKSB7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyX3B1dF9mZW5jZTI7Ci0JfQot Ci0JZGF0YS5mZW5jZSA9IGZkOwotCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYXJn LCAmZGF0YSwgc2l6ZW9mKGRhdGEpKSkgewotCQllcnIgPSAtRUZBVUxUOwotCQlnb3RvIGVycl9w dXRfZmVuY2UzOwotCX0KLQotCXN5bmNfZmVuY2VfaW5zdGFsbChmZW5jZTMsIGZkKTsKLQlzeW5j X2ZlbmNlX3B1dChmZW5jZTIpOwotCXJldHVybiAwOwotCi1lcnJfcHV0X2ZlbmNlMzoKLQlzeW5j X2ZlbmNlX3B1dChmZW5jZTMpOwotCi1lcnJfcHV0X2ZlbmNlMjoKLQlzeW5jX2ZlbmNlX3B1dChm ZW5jZTIpOwotCi1lcnJfcHV0X2ZkOgotCXB1dF91bnVzZWRfZmQoZmQpOwotCXJldHVybiBlcnI7 Ci19Ci0KLXN0YXRpYyBpbnQgc3luY19maWxsX3B0X2luZm8oc3RydWN0IGZlbmNlICpmZW5jZSwg dm9pZCAqZGF0YSwgaW50IHNpemUpCi17Ci0Jc3RydWN0IHN5bmNfcHRfaW5mbyAqaW5mbyA9IGRh dGE7Ci0JaW50IHJldDsKLQotCWlmIChzaXplIDwgc2l6ZW9mKHN0cnVjdCBzeW5jX3B0X2luZm8p KQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWluZm8tPmxlbiA9IHNpemVvZihzdHJ1Y3Qgc3luY19w dF9pbmZvKTsKLQotCWlmIChmZW5jZS0+b3BzLT5maWxsX2RyaXZlcl9kYXRhKSB7Ci0JCXJldCA9 IGZlbmNlLT5vcHMtPmZpbGxfZHJpdmVyX2RhdGEoZmVuY2UsIGluZm8tPmRyaXZlcl9kYXRhLAot CQkJCQkJICAgc2l6ZSAtIHNpemVvZigqaW5mbykpOwotCQlpZiAocmV0IDwgMCkKLQkJCXJldHVy biByZXQ7Ci0KLQkJaW5mby0+bGVuICs9IHJldDsKLQl9Ci0KLQlzdHJsY3B5KGluZm8tPm9ial9u YW1lLCBmZW5jZS0+b3BzLT5nZXRfdGltZWxpbmVfbmFtZShmZW5jZSksCi0JCXNpemVvZihpbmZv LT5vYmpfbmFtZSkpOwotCXN0cmxjcHkoaW5mby0+ZHJpdmVyX25hbWUsIGZlbmNlLT5vcHMtPmdl dF9kcml2ZXJfbmFtZShmZW5jZSksCi0JCXNpemVvZihpbmZvLT5kcml2ZXJfbmFtZSkpOwotCWlm IChmZW5jZV9pc19zaWduYWxlZChmZW5jZSkpCi0JCWluZm8tPnN0YXR1cyA9IGZlbmNlLT5zdGF0 dXMgPj0gMCA/IDEgOiBmZW5jZS0+c3RhdHVzOwotCWVsc2UKLQkJaW5mby0+c3RhdHVzID0gMDsK LQlpbmZvLT50aW1lc3RhbXBfbnMgPSBrdGltZV90b19ucyhmZW5jZS0+dGltZXN0YW1wKTsKLQot CXJldHVybiBpbmZvLT5sZW47Ci19Ci0KLXN0YXRpYyBsb25nIHN5bmNfZmVuY2VfaW9jdGxfZmVu Y2VfaW5mbyhzdHJ1Y3Qgc3luY19mZW5jZSAqZmVuY2UsCi0JCQkJCXVuc2lnbmVkIGxvbmcgYXJn KQotewotCXN0cnVjdCBzeW5jX2ZlbmNlX2luZm9fZGF0YSAqZGF0YTsKLQlfX3UzMiBzaXplOwot CV9fdTMyIGxlbiA9IDA7Ci0JaW50IHJldCwgaTsKLQotCWlmIChjb3B5X2Zyb21fdXNlcigmc2l6 ZSwgKHZvaWQgX191c2VyICopYXJnLCBzaXplb2Yoc2l6ZSkpKQotCQlyZXR1cm4gLUVGQVVMVDsK LQotCWlmIChzaXplIDwgc2l6ZW9mKHN0cnVjdCBzeW5jX2ZlbmNlX2luZm9fZGF0YSkpCi0JCXJl dHVybiAtRUlOVkFMOwotCi0JaWYgKHNpemUgPiA0MDk2KQotCQlzaXplID0gNDA5NjsKLQotCWRh dGEgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwotCWlmIChkYXRhID09IE5VTEwpCi0JCXJl dHVybiAtRU5PTUVNOwotCi0Jc3RybGNweShkYXRhLT5uYW1lLCBmZW5jZS0+bmFtZSwgc2l6ZW9m KGRhdGEtPm5hbWUpKTsKLQlkYXRhLT5zdGF0dXMgPSBhdG9taWNfcmVhZCgmZmVuY2UtPnN0YXR1 cyk7Ci0JaWYgKGRhdGEtPnN0YXR1cyA+PSAwKQotCQlkYXRhLT5zdGF0dXMgPSAhZGF0YS0+c3Rh dHVzOwotCi0JbGVuID0gc2l6ZW9mKHN0cnVjdCBzeW5jX2ZlbmNlX2luZm9fZGF0YSk7Ci0KLQlm b3IgKGkgPSAwOyBpIDwgZmVuY2UtPm51bV9mZW5jZXM7ICsraSkgewotCQlzdHJ1Y3QgZmVuY2Ug KnB0ID0gZmVuY2UtPmNic1tpXS5zeW5jX3B0OwotCi0JCXJldCA9IHN5bmNfZmlsbF9wdF9pbmZv KHB0LCAodTggKilkYXRhICsgbGVuLCBzaXplIC0gbGVuKTsKLQotCQlpZiAocmV0IDwgMCkKLQkJ CWdvdG8gb3V0OwotCi0JCWxlbiArPSByZXQ7Ci0JfQotCi0JZGF0YS0+bGVuID0gbGVuOwotCi0J aWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilhcmcsIGRhdGEsIGxlbikpCi0JCXJldCA9 IC1FRkFVTFQ7Ci0JZWxzZQotCQlyZXQgPSAwOwotCi1vdXQ6Ci0Ja2ZyZWUoZGF0YSk7Ci0KLQly ZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgbG9uZyBzeW5jX2ZlbmNlX2lvY3RsKHN0cnVjdCBmaWxl ICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLAotCQkJICAgICB1bnNpZ25lZCBsb25nIGFyZykKLXsK LQlzdHJ1Y3Qgc3luY19mZW5jZSAqZmVuY2UgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0KLQlzd2l0 Y2ggKGNtZCkgewotCWNhc2UgU1lOQ19JT0NfV0FJVDoKLQkJcmV0dXJuIHN5bmNfZmVuY2VfaW9j dGxfd2FpdChmZW5jZSwgYXJnKTsKLQotCWNhc2UgU1lOQ19JT0NfTUVSR0U6Ci0JCXJldHVybiBz eW5jX2ZlbmNlX2lvY3RsX21lcmdlKGZlbmNlLCBhcmcpOwotCi0JY2FzZSBTWU5DX0lPQ19GRU5D RV9JTkZPOgotCQlyZXR1cm4gc3luY19mZW5jZV9pb2N0bF9mZW5jZV9pbmZvKGZlbmNlLCBhcmcp OwotCi0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FTk9UVFk7Ci0JfQotfQotCi1zdGF0aWMgY29uc3Qg c3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzeW5jX2ZlbmNlX2ZvcHMgPSB7Ci0JLnJlbGVhc2UgPSBz eW5jX2ZlbmNlX3JlbGVhc2UsCi0JLnBvbGwgPSBzeW5jX2ZlbmNlX3BvbGwsCi0JLnVubG9ja2Vk X2lvY3RsID0gc3luY19mZW5jZV9pb2N0bCwKLQkuY29tcGF0X2lvY3RsID0gc3luY19mZW5jZV9p b2N0bCwKLX07Ci0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL3N5bmMuaCBi L2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL3N5bmMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggNzk4Y2Q1Ni4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9zeW5j LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNjYgKzAsMCBAQAotLyoKLSAqIGluY2x1ZGUvbGludXgv c3luYy5oCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSwgSW5jLgotICoKLSAqIFRo aXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv ciBtb3JlIGRldGFpbHMuCi0gKgotICovCi0KLSNpZm5kZWYgX0xJTlVYX1NZTkNfSAotI2RlZmlu ZSBfTElOVVhfU1lOQ19ICi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxp bnV4L2tyZWYuaD4KLSNpbmNsdWRlIDxsaW51eC9rdGltZS5oPgotI2luY2x1ZGUgPGxpbnV4L2xp c3QuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L3dhaXQu aD4KLSNpbmNsdWRlIDxsaW51eC9mZW5jZS5oPgotCi0jaW5jbHVkZSAidWFwaS9zeW5jLmgiCi0K LXN0cnVjdCBzeW5jX3RpbWVsaW5lOwotc3RydWN0IHN5bmNfcHQ7Ci1zdHJ1Y3Qgc3luY19mZW5j ZTsKLQotLyoqCi0gKiBzdHJ1Y3Qgc3luY190aW1lbGluZV9vcHMgLSBzeW5jIG9iamVjdCBpbXBs ZW1lbnRhdGlvbiBvcHMKLSAqIEBkcml2ZXJfbmFtZToJbmFtZSBvZiB0aGUgaW1wbGVtZW50YXRp b24KLSAqIEBkdXA6CQlkdXBsaWNhdGUgYSBzeW5jX3B0Ci0gKiBAaGFzX3NpZ25hbGVkOglyZXR1 cm5zOgotICoJCQkgIDEgaWYgcHQgaGFzIHNpZ25hbGVkCi0gKgkJCSAgMCBpZiBwdCBoYXMgbm90 IHNpZ25hbGVkCi0gKgkJCSA8MCBvbiBlcnJvcgotICogQGNvbXBhcmU6CQlyZXR1cm5zOgotICoJ CQkgIDEgaWYgYiB3aWxsIHNpZ25hbCBiZWZvcmUgYQotICoJCQkgIDAgaWYgYSBhbmQgYiB3aWxs IHNpZ25hbCBhdCB0aGUgc2FtZSB0aW1lCi0gKgkJCSAtMSBpZiBhIHdpbGwgc2lnbmFsIGJlZm9y ZSBiCi0gKiBAZnJlZV9wdDoJCWNhbGxlZCBiZWZvcmUgc3luY19wdCBpcyBmcmVlZAotICogQHJl bGVhc2Vfb2JqOgljYWxsZWQgYmVmb3JlIHN5bmNfdGltZWxpbmUgaXMgZnJlZWQKLSAqIEBmaWxs X2RyaXZlcl9kYXRhOgl3cml0ZSBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpYyBkcml2ZXIgZGF0YSB0 byBkYXRhLgotICoJCQkgIHNob3VsZCByZXR1cm4gYW4gZXJyb3IgaWYgdGhlcmUgaXMgbm90IGVu b3VnaCByb29tCi0gKgkJCSAgYXMgc3BlY2lmaWVkIGJ5IHNpemUuICBUaGlzIGluZm9ybWF0aW9u IGlzIHJldHVybmVkCi0gKgkJCSAgdG8gdXNlcnNwYWNlIGJ5IFNZTkNfSU9DX0ZFTkNFX0lORk8u Ci0gKiBAdGltZWxpbmVfdmFsdWVfc3RyOiBmaWxsIHN0ciB3aXRoIHRoZSB2YWx1ZSBvZiB0aGUg c3luY190aW1lbGluZSdzIGNvdW50ZXIKLSAqIEBwdF92YWx1ZV9zdHI6CWZpbGwgc3RyIHdpdGgg dGhlIHZhbHVlIG9mIHRoZSBzeW5jX3B0Ci0gKi8KLXN0cnVjdCBzeW5jX3RpbWVsaW5lX29wcyB7 Ci0JY29uc3QgY2hhciAqZHJpdmVyX25hbWU7Ci0KLQkvKiByZXF1aXJlZCAqLwotCXN0cnVjdCBz eW5jX3B0ICogKCpkdXApKHN0cnVjdCBzeW5jX3B0ICpwdCk7Ci0KLQkvKiByZXF1aXJlZCAqLwot CWludCAoKmhhc19zaWduYWxlZCkoc3RydWN0IHN5bmNfcHQgKnB0KTsKLQotCS8qIHJlcXVpcmVk ICovCi0JaW50ICgqY29tcGFyZSkoc3RydWN0IHN5bmNfcHQgKmEsIHN0cnVjdCBzeW5jX3B0ICpi KTsKLQotCS8qIG9wdGlvbmFsICovCi0Jdm9pZCAoKmZyZWVfcHQpKHN0cnVjdCBzeW5jX3B0ICpz eW5jX3B0KTsKLQotCS8qIG9wdGlvbmFsICovCi0Jdm9pZCAoKnJlbGVhc2Vfb2JqKShzdHJ1Y3Qg c3luY190aW1lbGluZSAqc3luY190aW1lbGluZSk7Ci0KLQkvKiBvcHRpb25hbCAqLwotCWludCAo KmZpbGxfZHJpdmVyX2RhdGEpKHN0cnVjdCBzeW5jX3B0ICpzeW5jcHQsIHZvaWQgKmRhdGEsIGlu dCBzaXplKTsKLQotCS8qIG9wdGlvbmFsICovCi0Jdm9pZCAoKnRpbWVsaW5lX3ZhbHVlX3N0ciko c3RydWN0IHN5bmNfdGltZWxpbmUgKnRpbWVsaW5lLCBjaGFyICpzdHIsCi0JCQkJICAgaW50IHNp emUpOwotCi0JLyogb3B0aW9uYWwgKi8KLQl2b2lkICgqcHRfdmFsdWVfc3RyKShzdHJ1Y3Qgc3lu Y19wdCAqcHQsIGNoYXIgKnN0ciwgaW50IHNpemUpOwotfTsKLQotLyoqCi0gKiBzdHJ1Y3Qgc3lu Y190aW1lbGluZSAtIHN5bmMgb2JqZWN0Ci0gKiBAa3JlZjoJCXJlZmVyZW5jZSBjb3VudCBvbiBm ZW5jZS4KLSAqIEBvcHM6CQlvcHMgdGhhdCBkZWZpbmUgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRo ZSBzeW5jX3RpbWVsaW5lCi0gKiBAbmFtZToJCW5hbWUgb2YgdGhlIHN5bmNfdGltZWxpbmUuIFVz ZWZ1bCBmb3IgZGVidWdnaW5nCi0gKiBAZGVzdHJveWVkOgkJc2V0IHdoZW4gc3luY190aW1lbGlu ZSBpcyBkZXN0cm95ZWQKLSAqIEBjaGlsZF9saXN0X2hlYWQ6CWxpc3Qgb2YgY2hpbGRyZW4gc3lu Y19wdHMgZm9yIHRoaXMgc3luY190aW1lbGluZQotICogQGNoaWxkX2xpc3RfbG9jazoJbG9jayBw cm90ZWN0aW5nIEBjaGlsZF9saXN0X2hlYWQsIGRlc3Ryb3llZCwgYW5kCi0gKgkJCSAgc3luY19w dC5zdGF0dXMKLSAqIEBhY3RpdmVfbGlzdF9oZWFkOglsaXN0IG9mIGFjdGl2ZSAodW5zaWduYWxl ZC9lcnJvcmVkKSBzeW5jX3B0cwotICogQHN5bmNfdGltZWxpbmVfbGlzdDoJbWVtYmVyc2hpcCBp biBnbG9iYWwgc3luY190aW1lbGluZV9saXN0Ci0gKi8KLXN0cnVjdCBzeW5jX3RpbWVsaW5lIHsK LQlzdHJ1Y3Qga3JlZgkJa3JlZjsKLQljb25zdCBzdHJ1Y3Qgc3luY190aW1lbGluZV9vcHMJKm9w czsKLQljaGFyCQkJbmFtZVszMl07Ci0KLQkvKiBwcm90ZWN0ZWQgYnkgY2hpbGRfbGlzdF9sb2Nr ICovCi0JYm9vbAkJCWRlc3Ryb3llZDsKLQlpbnQJCQljb250ZXh0LCB2YWx1ZTsKLQotCXN0cnVj dCBsaXN0X2hlYWQJY2hpbGRfbGlzdF9oZWFkOwotCXNwaW5sb2NrX3QJCWNoaWxkX2xpc3RfbG9j azsKLQotCXN0cnVjdCBsaXN0X2hlYWQJYWN0aXZlX2xpc3RfaGVhZDsKLQotI2lmZGVmIENPTkZJ R19ERUJVR19GUwotCXN0cnVjdCBsaXN0X2hlYWQJc3luY190aW1lbGluZV9saXN0OwotI2VuZGlm Ci19OwotCi0vKioKLSAqIHN0cnVjdCBzeW5jX3B0IC0gc3luYyBwb2ludAotICogQGZlbmNlOgkJ YmFzZSBmZW5jZSBjbGFzcwotICogQGNoaWxkX2xpc3Q6CQltZW1iZXJzaGlwIGluIHN5bmNfdGlt ZWxpbmUuY2hpbGRfbGlzdF9oZWFkCi0gKiBAYWN0aXZlX2xpc3Q6CW1lbWJlcnNoaXAgaW4gc3lu Y190aW1lbGluZS5hY3RpdmVfbGlzdF9oZWFkCi0gKiBAc2lnbmFsZWRfbGlzdDoJbWVtYmVyc2hp cCBpbiB0ZW1wb3Jhcnkgc2lnbmFsZWRfbGlzdCBvbiBzdGFjawotICogQGZlbmNlOgkJc3luY19m ZW5jZSB0byB3aGljaCB0aGUgc3luY19wdCBiZWxvbmdzCi0gKiBAcHRfbGlzdDoJCW1lbWJlcnNo aXAgaW4gc3luY19mZW5jZS5wdF9saXN0X2hlYWQKLSAqIEBzdGF0dXM6CQkxOiBzaWduYWxlZCwg MDphY3RpdmUsIDwwOiBlcnJvcgotICogQHRpbWVzdGFtcDoJCXRpbWUgd2hpY2ggc3luY19wdCBz dGF0dXMgdHJhbnNpdGlvbmVkIGZyb20gYWN0aXZlIHRvCi0gKgkJCSAgc2lnbmFsZWQgb3IgZXJy b3IuCi0gKi8KLXN0cnVjdCBzeW5jX3B0IHsKLQlzdHJ1Y3QgZmVuY2UgYmFzZTsKLQotCXN0cnVj dCBsaXN0X2hlYWQJY2hpbGRfbGlzdDsKLQlzdHJ1Y3QgbGlzdF9oZWFkCWFjdGl2ZV9saXN0Owot fTsKLQotc3RhdGljIGlubGluZSBzdHJ1Y3Qgc3luY190aW1lbGluZSAqc3luY19wdF9wYXJlbnQo c3RydWN0IHN5bmNfcHQgKnB0KQotewotCXJldHVybiBjb250YWluZXJfb2YocHQtPmJhc2UubG9j aywgc3RydWN0IHN5bmNfdGltZWxpbmUsCi0JCQkgICAgY2hpbGRfbGlzdF9sb2NrKTsKLX0KLQot c3RydWN0IHN5bmNfZmVuY2VfY2IgewotCXN0cnVjdCBmZW5jZV9jYiBjYjsKLQlzdHJ1Y3QgZmVu Y2UgKnN5bmNfcHQ7Ci0Jc3RydWN0IHN5bmNfZmVuY2UgKmZlbmNlOwotfTsKLQotLyoqCi0gKiBz dHJ1Y3Qgc3luY19mZW5jZSAtIHN5bmMgZmVuY2UKLSAqIEBmaWxlOgkJZmlsZSByZXByZXNlbnRp bmcgdGhpcyBmZW5jZQotICogQGtyZWY6CQlyZWZlcmVuY2UgY291bnQgb24gZmVuY2UuCi0gKiBA bmFtZToJCW5hbWUgb2Ygc3luY19mZW5jZS4gIFVzZWZ1bCBmb3IgZGVidWdnaW5nCi0gKiBAcHRf bGlzdF9oZWFkOglsaXN0IG9mIHN5bmNfcHRzIGluIHRoZSBmZW5jZS4gIGltbXV0YWJsZSBvbmNl IGZlbmNlCi0gKgkJCSAgaXMgY3JlYXRlZAotICogQHN0YXR1czoJCTA6IHNpZ25hbGVkLCA+MDph Y3RpdmUsIDwwOiBlcnJvcgotICoKLSAqIEB3cToJCQl3YWl0IHF1ZXVlIGZvciBmZW5jZSBzaWdu YWxpbmcKLSAqIEBzeW5jX2ZlbmNlX2xpc3Q6CW1lbWJlcnNoaXAgaW4gZ2xvYmFsIGZlbmNlIGxp c3QKLSAqLwotc3RydWN0IHN5bmNfZmVuY2UgewotCXN0cnVjdCBmaWxlCQkqZmlsZTsKLQlzdHJ1 Y3Qga3JlZgkJa3JlZjsKLQljaGFyCQkJbmFtZVszMl07Ci0jaWZkZWYgQ09ORklHX0RFQlVHX0ZT Ci0Jc3RydWN0IGxpc3RfaGVhZAlzeW5jX2ZlbmNlX2xpc3Q7Ci0jZW5kaWYKLQlpbnQgbnVtX2Zl bmNlczsKLQotCXdhaXRfcXVldWVfaGVhZF90CXdxOwotCWF0b21pY190CQlzdGF0dXM7Ci0KLQlz dHJ1Y3Qgc3luY19mZW5jZV9jYgljYnNbXTsKLX07Ci0KLXN0cnVjdCBzeW5jX2ZlbmNlX3dhaXRl cjsKLXR5cGVkZWYgdm9pZCAoKnN5bmNfY2FsbGJhY2tfdCkoc3RydWN0IHN5bmNfZmVuY2UgKmZl bmNlLAotCQkJCXN0cnVjdCBzeW5jX2ZlbmNlX3dhaXRlciAqd2FpdGVyKTsKLQotLyoqCi0gKiBz dHJ1Y3Qgc3luY19mZW5jZV93YWl0ZXIgLSBtZXRhZGF0YSBmb3IgYXN5bmNocm9ub3VzIHdhaXRl ciBvbiBhIGZlbmNlCi0gKiBAd2FpdGVyX2xpc3Q6CW1lbWJlcnNoaXAgaW4gc3luY19mZW5jZS53 YWl0ZXJfbGlzdF9oZWFkCi0gKiBAY2FsbGJhY2s6CQlmdW5jdGlvbiBwb2ludGVyIHRvIGNhbGwg d2hlbiBmZW5jZSBzaWduYWxzCi0gKiBAY2FsbGJhY2tfZGF0YToJcG9pbnRlciB0byBwYXNzIHRv IEBjYWxsYmFjawotICovCi1zdHJ1Y3Qgc3luY19mZW5jZV93YWl0ZXIgewotCXdhaXRfcXVldWVf dCB3b3JrOwotCXN5bmNfY2FsbGJhY2tfdCBjYWxsYmFjazsKLX07Ci0KLXN0YXRpYyBpbmxpbmUg dm9pZCBzeW5jX2ZlbmNlX3dhaXRlcl9pbml0KHN0cnVjdCBzeW5jX2ZlbmNlX3dhaXRlciAqd2Fp dGVyLAotCQkJCQkgIHN5bmNfY2FsbGJhY2tfdCBjYWxsYmFjaykKLXsKLQlJTklUX0xJU1RfSEVB RCgmd2FpdGVyLT53b3JrLnRhc2tfbGlzdCk7Ci0Jd2FpdGVyLT5jYWxsYmFjayA9IGNhbGxiYWNr OwotfQotCi0vKgotICogQVBJIGZvciBzeW5jX3RpbWVsaW5lIGltcGxlbWVudGVycwotICovCi0K LS8qKgotICogc3luY190aW1lbGluZV9jcmVhdGUoKSAtIGNyZWF0ZXMgYSBzeW5jIG9iamVjdAot ICogQG9wczoJc3BlY2lmaWVzIHRoZSBpbXBsZW1lbnRhdGlvbiBvcHMgZm9yIHRoZSBvYmplY3QK LSAqIEBzaXplOglzaXplIHRvIGFsbG9jYXRlIGZvciB0aGlzIG9iagotICogQG5hbWU6CXN5bmNf dGltZWxpbmUgbmFtZQotICoKLSAqIENyZWF0ZXMgYSBuZXcgc3luY190aW1lbGluZSB3aGljaCB3 aWxsIHVzZSB0aGUgaW1wbGVtZW50YXRpb24gc3BlY2lmaWVkIGJ5Ci0gKiBAb3BzLiAgQHNpemUg Ynl0ZXMgd2lsbCBiZSBhbGxvY2F0ZWQgYWxsb3dpbmcgZm9yIGltcGxlbWVudGF0aW9uIHNwZWNp ZmljCi0gKiBkYXRhIHRvIGJlIGtlcHQgYWZ0ZXIgdGhlIGdlbmVyaWMgc3luY190aW1lbGluZSBz dHJ1Y3QuCi0gKi8KLXN0cnVjdCBzeW5jX3RpbWVsaW5lICpzeW5jX3RpbWVsaW5lX2NyZWF0ZShj b25zdCBzdHJ1Y3Qgc3luY190aW1lbGluZV9vcHMgKm9wcywKLQkJCQkJICAgaW50IHNpemUsIGNv bnN0IGNoYXIgKm5hbWUpOwotCi0vKioKLSAqIHN5bmNfdGltZWxpbmVfZGVzdHJveSgpIC0gZGVz dHJveXMgYSBzeW5jIG9iamVjdAotICogQG9iajoJc3luY190aW1lbGluZSB0byBkZXN0cm95Ci0g KgotICogQSBzeW5jIGltcGxlbWVudGF0aW9uIHNob3VsZCBjYWxsIHRoaXMgd2hlbiB0aGUgQG9i aiBpcyBnb2luZyBhd2F5Ci0gKiAoaS5lLiBtb2R1bGUgdW5sb2FkLikgIEBvYmogd29uJ3QgYWN0 dWFsbHkgYmUgZnJlZWQgdW50aWwgYWxsIGl0cyBjaGlsZHJlbgotICogc3luY19wdHMgYXJlIGZy ZWVkLgotICovCi12b2lkIHN5bmNfdGltZWxpbmVfZGVzdHJveShzdHJ1Y3Qgc3luY190aW1lbGlu ZSAqb2JqKTsKLQotLyoqCi0gKiBzeW5jX3RpbWVsaW5lX3NpZ25hbCgpIC0gc2lnbmFsIGEgc3Rh dHVzIGNoYW5nZSBvbiBhIHN5bmNfdGltZWxpbmUKLSAqIEBvYmo6CXN5bmNfdGltZWxpbmUgdG8g c2lnbmFsCi0gKgotICogQSBzeW5jIGltcGxlbWVudGF0aW9uIHNob3VsZCBjYWxsIHRoaXMgYW55 IHRpbWUgb25lIG9mIGl0J3Mgc3luY19wdHMKLSAqIGhhcyBzaWduYWxlZCBvciBoYXMgYW4gZXJy b3IgY29uZGl0aW9uLgotICovCi12b2lkIHN5bmNfdGltZWxpbmVfc2lnbmFsKHN0cnVjdCBzeW5j X3RpbWVsaW5lICpvYmopOwotCi0vKioKLSAqIHN5bmNfcHRfY3JlYXRlKCkgLSBjcmVhdGVzIGEg c3luYyBwdAotICogQHBhcmVudDoJc3luY19wdCdzIHBhcmVudCBzeW5jX3RpbWVsaW5lCi0gKiBA c2l6ZToJc2l6ZSB0byBhbGxvY2F0ZSBmb3IgdGhpcyBwdAotICoKLSAqIENyZWF0ZXMgYSBuZXcg c3luY19wdCBhcyBhIGNoaWxkIG9mIEBwYXJlbnQuICBAc2l6ZSBieXRlcyB3aWxsIGJlCi0gKiBh bGxvY2F0ZWQgYWxsb3dpbmcgZm9yIGltcGxlbWVudGF0aW9uIHNwZWNpZmljIGRhdGEgdG8gYmUg a2VwdCBhZnRlcgotICogdGhlIGdlbmVyaWMgc3luY190aW1lbGluZSBzdHJ1Y3QuCi0gKi8KLXN0 cnVjdCBzeW5jX3B0ICpzeW5jX3B0X2NyZWF0ZShzdHJ1Y3Qgc3luY190aW1lbGluZSAqcGFyZW50 LCBpbnQgc2l6ZSk7Ci0KLS8qKgotICogc3luY19wdF9mcmVlKCkgLSBmcmVlcyBhIHN5bmMgcHQK LSAqIEBwdDoJCXN5bmNfcHQgdG8gZnJlZQotICoKLSAqIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2Fs bGVkIG9uIHN5bmNfcHRzIHdoaWNoIGhhdmUgYmVlbiBjcmVhdGVkIGJ1dAotICogbm90IGFkZGVk IHRvIGEgZmVuY2UuCi0gKi8KLXZvaWQgc3luY19wdF9mcmVlKHN0cnVjdCBzeW5jX3B0ICpwdCk7 Ci0KLS8qKgotICogc3luY19mZW5jZV9jcmVhdGUoKSAtIGNyZWF0ZXMgYSBzeW5jIGZlbmNlCi0g KiBAbmFtZToJbmFtZSBvZiBmZW5jZSB0byBjcmVhdGUKLSAqIEBwdDoJCXN5bmNfcHQgdG8gYWRk IHRvIHRoZSBmZW5jZQotICoKLSAqIENyZWF0ZXMgYSBmZW5jZSBjb250YWluZyBAcHQuICBPbmNl IHRoaXMgaXMgY2FsbGVkLCB0aGUgZmVuY2UgdGFrZXMKLSAqIGEgcmVmZXJlbmNlIG9uIEBwdC4K LSAqLwotc3RydWN0IHN5bmNfZmVuY2UgKnN5bmNfZmVuY2VfY3JlYXRlKGNvbnN0IGNoYXIgKm5h bWUsIHN0cnVjdCBzeW5jX3B0ICpwdCk7Ci0KLS8qKgotICogc3luY19mZW5jZV9jcmVhdGVfZG1h KCkgLSBjcmVhdGVzIGEgc3luYyBmZW5jZSBmcm9tIGRtYS1mZW5jZQotICogQG5hbWU6CW5hbWUg b2YgZmVuY2UgdG8gY3JlYXRlCi0gKiBAcHQ6CWRtYS1mZW5jZSB0byBhZGQgdG8gdGhlIGZlbmNl Ci0gKgotICogQ3JlYXRlcyBhIGZlbmNlIGNvbnRhaW5nIEBwdC4gIE9uY2UgdGhpcyBpcyBjYWxs ZWQsIHRoZSBmZW5jZSB0YWtlcwotICogYSByZWZlcmVuY2Ugb24gQHB0LgotICovCi1zdHJ1Y3Qg c3luY19mZW5jZSAqc3luY19mZW5jZV9jcmVhdGVfZG1hKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVj dCBmZW5jZSAqcHQpOwotCi0vKgotICogQVBJIGZvciBzeW5jX2ZlbmNlIGNvbnN1bWVycwotICov Ci0KLS8qKgotICogc3luY19mZW5jZV9tZXJnZSgpIC0gbWVyZ2UgdHdvIGZlbmNlcwotICogQG5h bWU6CW5hbWUgb2YgbmV3IGZlbmNlCi0gKiBAYToJCWZlbmNlIGEKLSAqIEBiOgkJZmVuY2UgYgot ICoKLSAqIENyZWF0ZXMgYSBuZXcgZmVuY2Ugd2hpY2ggY29udGFpbnMgY29waWVzIG9mIGFsbCB0 aGUgc3luY19wdHMgaW4gYm90aAotICogQGEgYW5kIEBiLiAgQGEgYW5kIEBiIHJlbWFpbiB2YWxp ZCwgaW5kZXBlbmRlbnQgZmVuY2VzLgotICovCi1zdHJ1Y3Qgc3luY19mZW5jZSAqc3luY19mZW5j ZV9tZXJnZShjb25zdCBjaGFyICpuYW1lLAotCQkJCSAgICBzdHJ1Y3Qgc3luY19mZW5jZSAqYSwg c3RydWN0IHN5bmNfZmVuY2UgKmIpOwotCi0vKioKLSAqIHN5bmNfZmVuY2VfZmRnZXQoKSAtIGdl dCBhIGZlbmNlIGZyb20gYW4gZmQKLSAqIEBmZDoJCWZkIHJlZmVyZW5jaW5nIGEgZmVuY2UKLSAq Ci0gKiBFbnN1cmVzIEBmZCByZWZlcmVuY2VzIGEgdmFsaWQgZmVuY2UsIGluY3JlbWVudHMgdGhl IHJlZmNvdW50IG9mIHRoZSBiYWNraW5nCi0gKiBmaWxlLCBhbmQgcmV0dXJucyB0aGUgZmVuY2Uu Ci0gKi8KLXN0cnVjdCBzeW5jX2ZlbmNlICpzeW5jX2ZlbmNlX2ZkZ2V0KGludCBmZCk7Ci0KLS8q KgotICogc3luY19mZW5jZV9wdXQoKSAtIHB1dHMgYSByZWZlcmVuY2Ugb2YgYSBzeW5jIGZlbmNl Ci0gKiBAZmVuY2U6CWZlbmNlIHRvIHB1dAotICoKLSAqIFB1dHMgYSByZWZlcmVuY2Ugb24gQGZl bmNlLiAgSWYgdGhpcyBpcyB0aGUgbGFzdCByZWZlcmVuY2UsIHRoZSBmZW5jZSBhbmQKLSAqIGFs bCBpdCdzIHN5bmNfcHRzIHdpbGwgYmUgZnJlZWQKLSAqLwotdm9pZCBzeW5jX2ZlbmNlX3B1dChz dHJ1Y3Qgc3luY19mZW5jZSAqZmVuY2UpOwotCi0vKioKLSAqIHN5bmNfZmVuY2VfaW5zdGFsbCgp IC0gaW5zdGFsbHMgYSBmZW5jZSBpbnRvIGEgZmlsZSBkZXNjcmlwdG9yCi0gKiBAZmVuY2U6CWZl bmNlIHRvIGluc3RhbGwKLSAqIEBmZDoJCWZpbGUgZGVzY3JpcHRvciBpbiB3aGljaCB0byBpbnN0 YWxsIHRoZSBmZW5jZQotICoKLSAqIEluc3RhbGxzIEBmZW5jZSBpbnRvIEBmZC4gIEBmZCdzIHNo b3VsZCBiZSBhY3F1aXJlZCB0aHJvdWdoCi0gKiBnZXRfdW51c2VkX2ZkX2ZsYWdzKE9fQ0xPRVhF QykuCi0gKi8KLXZvaWQgc3luY19mZW5jZV9pbnN0YWxsKHN0cnVjdCBzeW5jX2ZlbmNlICpmZW5j ZSwgaW50IGZkKTsKLQotLyoqCi0gKiBzeW5jX2ZlbmNlX3dhaXRfYXN5bmMoKSAtIHJlZ2lzdGVy cyBhbmQgYXN5bmMgd2FpdCBvbiB0aGUgZmVuY2UKLSAqIEBmZW5jZToJCWZlbmNlIHRvIHdhaXQg b24KLSAqIEB3YWl0ZXI6CQl3YWl0ZXIgY2FsbGJhY2sgc3RydWNrCi0gKgotICogUmV0dXJucyAx IGlmIEBmZW5jZSBoYXMgYWxyZWFkeSBzaWduYWxlZC4KLSAqCi0gKiBSZWdpc3RlcnMgYSBjYWxs YmFjayB0byBiZSBjYWxsZWQgd2hlbiBAZmVuY2Ugc2lnbmFscyBvciBoYXMgYW4gZXJyb3IuCi0g KiBAd2FpdGVyIHNob3VsZCBiZSBpbml0aWFsaXplZCB3aXRoIHN5bmNfZmVuY2Vfd2FpdGVyX2lu aXQoKS4KLSAqLwotaW50IHN5bmNfZmVuY2Vfd2FpdF9hc3luYyhzdHJ1Y3Qgc3luY19mZW5jZSAq ZmVuY2UsCi0JCQkgIHN0cnVjdCBzeW5jX2ZlbmNlX3dhaXRlciAqd2FpdGVyKTsKLQotLyoqCi0g KiBzeW5jX2ZlbmNlX2NhbmNlbF9hc3luYygpIC0gY2FuY2VscyBhbiBhc3luYyB3YWl0Ci0gKiBA ZmVuY2U6CQlmZW5jZSB0byB3YWl0IG9uCi0gKiBAd2FpdGVyOgkJd2FpdGVyIGNhbGxiYWNrIHN0 cnVjawotICoKLSAqIHJldHVybnMgMCBpZiB3YWl0ZXIgd2FzIHJlbW92ZWQgZnJvbSBmZW5jZSdz IGFzeW5jIHdhaXRlciBsaXN0LgotICogcmV0dXJucyAtRU5PRU5UIGlmIHdhaXRlciB3YXMgbm90 IGZvdW5kIG9uIGZlbmNlJ3MgYXN5bmMgd2FpdGVyIGxpc3QuCi0gKgotICogQ2FuY2VscyBhIHBy ZXZpb3VzbHkgcmVnaXN0ZXJlZCBhc3luYyB3YWl0LiAgV2lsbCBmYWlsIGdyYWNlZnVsbHkgaWYK LSAqIEB3YWl0ZXIgd2FzIG5ldmVyIHJlZ2lzdGVyZWQgb3IgaWYgQGZlbmNlIGhhcyBhbHJlYWR5 IHNpZ25hbGVkIEB3YWl0ZXIuCi0gKi8KLWludCBzeW5jX2ZlbmNlX2NhbmNlbF9hc3luYyhzdHJ1 Y3Qgc3luY19mZW5jZSAqZmVuY2UsCi0JCQkgICAgc3RydWN0IHN5bmNfZmVuY2Vfd2FpdGVyICp3 YWl0ZXIpOwotCi0vKioKLSAqIHN5bmNfZmVuY2Vfd2FpdCgpIC0gd2FpdCBvbiBmZW5jZQotICog QGZlbmNlOglmZW5jZSB0byB3YWl0IG9uCi0gKiBAdGllbW91dDoJdGltZW91dCBpbiBtcwotICoK LSAqIFdhaXQgZm9yIEBmZW5jZSB0byBiZSBzaWduYWxlZCBvciBoYXZlIGFuIGVycm9yLiAgV2Fp dHMgaW5kZWZpbml0ZWx5Ci0gKiBpZiBAdGltZW91dCA8IDAKLSAqLwotaW50IHN5bmNfZmVuY2Vf d2FpdChzdHJ1Y3Qgc3luY19mZW5jZSAqZmVuY2UsIGxvbmcgdGltZW91dCk7Ci0KLSNpZmRlZiBD T05GSUdfREVCVUdfRlMKLQotdm9pZCBzeW5jX3RpbWVsaW5lX2RlYnVnX2FkZChzdHJ1Y3Qgc3lu Y190aW1lbGluZSAqb2JqKTsKLXZvaWQgc3luY190aW1lbGluZV9kZWJ1Z19yZW1vdmUoc3RydWN0 IHN5bmNfdGltZWxpbmUgKm9iaik7Ci12b2lkIHN5bmNfZmVuY2VfZGVidWdfYWRkKHN0cnVjdCBz eW5jX2ZlbmNlICpmZW5jZSk7Ci12b2lkIHN5bmNfZmVuY2VfZGVidWdfcmVtb3ZlKHN0cnVjdCBz eW5jX2ZlbmNlICpmZW5jZSk7Ci12b2lkIHN5bmNfZHVtcCh2b2lkKTsKLQotI2Vsc2UKLSMgZGVm aW5lIHN5bmNfdGltZWxpbmVfZGVidWdfYWRkKG9iaikKLSMgZGVmaW5lIHN5bmNfdGltZWxpbmVf ZGVidWdfcmVtb3ZlKG9iaikKLSMgZGVmaW5lIHN5bmNfZmVuY2VfZGVidWdfYWRkKGZlbmNlKQot IyBkZWZpbmUgc3luY19mZW5jZV9kZWJ1Z19yZW1vdmUoZmVuY2UpCi0jIGRlZmluZSBzeW5jX2R1 bXAoKQotI2VuZGlmCi1pbnQgc3luY19mZW5jZV93YWtlX3VwX3dxKHdhaXRfcXVldWVfdCAqY3Vy ciwgdW5zaWduZWQgbW9kZSwKLQkJCQkgaW50IHdha2VfZmxhZ3MsIHZvaWQgKmtleSk7Ci0KLSNl bmRpZiAvKiBfTElOVVhfU1lOQ19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYW5k cm9pZC9zeW5jX2RlYnVnLmMgYi9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC9zeW5jX2RlYnVnLmMK ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0NWQxM2MuLjAwMDAwMDAKLS0tIGEvZHJp dmVycy9zdGFnaW5nL2FuZHJvaWQvc3luY19kZWJ1Zy5jCisrKyAvZGV2L251bGwKQEAgLTEsMjU2 ICswLDAgQEAKLS8qCi0gKiBkcml2ZXJzL2Jhc2Uvc3luYy5jCi0gKgotICogQ29weXJpZ2h0IChD KSAyMDEyIEdvb2dsZSwgSW5jLgotICoKLSAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgdmVyc2lv biAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCi0g KiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRl cm1zLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0 IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51 eC9kZWJ1Z2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvZXhwb3J0Lmg+Ci0jaW5jbHVkZSA8bGludXgv ZmlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+ Ci0jaW5jbHVkZSA8bGludXgvcG9sbC5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5j bHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVk ZSA8bGludXgvdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGxpbnV4L2Fub25faW5vZGVzLmg+Ci0jaW5j bHVkZSA8bGludXgvdGltZTY0Lmg+Ci0jaW5jbHVkZSAic3luYy5oIgotCi0jaWZkZWYgQ09ORklH X0RFQlVHX0ZTCi0KLXN0YXRpYyBMSVNUX0hFQUQoc3luY190aW1lbGluZV9saXN0X2hlYWQpOwot c3RhdGljIERFRklORV9TUElOTE9DSyhzeW5jX3RpbWVsaW5lX2xpc3RfbG9jayk7Ci1zdGF0aWMg TElTVF9IRUFEKHN5bmNfZmVuY2VfbGlzdF9oZWFkKTsKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0so c3luY19mZW5jZV9saXN0X2xvY2spOwotCi12b2lkIHN5bmNfdGltZWxpbmVfZGVidWdfYWRkKHN0 cnVjdCBzeW5jX3RpbWVsaW5lICpvYmopCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNw aW5fbG9ja19pcnFzYXZlKCZzeW5jX3RpbWVsaW5lX2xpc3RfbG9jaywgZmxhZ3MpOwotCWxpc3Rf YWRkX3RhaWwoJm9iai0+c3luY190aW1lbGluZV9saXN0LCAmc3luY190aW1lbGluZV9saXN0X2hl YWQpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN5bmNfdGltZWxpbmVfbGlzdF9sb2NrLCBm bGFncyk7Ci19Ci0KLXZvaWQgc3luY190aW1lbGluZV9kZWJ1Z19yZW1vdmUoc3RydWN0IHN5bmNf dGltZWxpbmUgKm9iaikKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2ly cXNhdmUoJnN5bmNfdGltZWxpbmVfbGlzdF9sb2NrLCBmbGFncyk7Ci0JbGlzdF9kZWwoJm9iai0+ c3luY190aW1lbGluZV9saXN0KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzeW5jX3RpbWVs aW5lX2xpc3RfbG9jaywgZmxhZ3MpOwotfQotCi12b2lkIHN5bmNfZmVuY2VfZGVidWdfYWRkKHN0 cnVjdCBzeW5jX2ZlbmNlICpmZW5jZSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bp bl9sb2NrX2lycXNhdmUoJnN5bmNfZmVuY2VfbGlzdF9sb2NrLCBmbGFncyk7Ci0JbGlzdF9hZGRf dGFpbCgmZmVuY2UtPnN5bmNfZmVuY2VfbGlzdCwgJnN5bmNfZmVuY2VfbGlzdF9oZWFkKTsKLQlz cGluX3VubG9ja19pcnFyZXN0b3JlKCZzeW5jX2ZlbmNlX2xpc3RfbG9jaywgZmxhZ3MpOwotfQot Ci12b2lkIHN5bmNfZmVuY2VfZGVidWdfcmVtb3ZlKHN0cnVjdCBzeW5jX2ZlbmNlICpmZW5jZSkK LXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnN5bmNfZmVu Y2VfbGlzdF9sb2NrLCBmbGFncyk7Ci0JbGlzdF9kZWwoJmZlbmNlLT5zeW5jX2ZlbmNlX2xpc3Qp OwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN5bmNfZmVuY2VfbGlzdF9sb2NrLCBmbGFncyk7 Ci19Ci0KLXN0YXRpYyBjb25zdCBjaGFyICpzeW5jX3N0YXR1c19zdHIoaW50IHN0YXR1cykKLXsK LQlpZiAoc3RhdHVzID09IDApCi0JCXJldHVybiAic2lnbmFsZWQiOwotCi0JaWYgKHN0YXR1cyA+ IDApCi0JCXJldHVybiAiYWN0aXZlIjsKLQotCXJldHVybiAiZXJyb3IiOwotfQotCi1zdGF0aWMg dm9pZCBzeW5jX3ByaW50X3B0KHN0cnVjdCBzZXFfZmlsZSAqcywgc3RydWN0IGZlbmNlICpwdCwg Ym9vbCBmZW5jZSkKLXsKLQlpbnQgc3RhdHVzID0gMTsKLQotCWlmIChmZW5jZV9pc19zaWduYWxl ZF9sb2NrZWQocHQpKQotCQlzdGF0dXMgPSBwdC0+c3RhdHVzOwotCi0Jc2VxX3ByaW50ZihzLCAi ICAlcyVzcHQgJXMiLAotCQkgICBmZW5jZSAmJiBwdC0+b3BzLT5nZXRfdGltZWxpbmVfbmFtZSA/ Ci0JCSAgIHB0LT5vcHMtPmdldF90aW1lbGluZV9uYW1lKHB0KSA6ICIiLAotCQkgICBmZW5jZSA/ ICJfIiA6ICIiLAotCQkgICBzeW5jX3N0YXR1c19zdHIoc3RhdHVzKSk7Ci0KLQlpZiAoc3RhdHVz IDw9IDApIHsKLQkJc3RydWN0IHRpbWVzcGVjNjQgdHM2NCA9Ci0JCQlrdGltZV90b190aW1lc3Bl YzY0KHB0LT50aW1lc3RhbXApOwotCi0JCXNlcV9wcmludGYocywgIkAlbGxkLiUwOWxkIiwgKHM2 NCl0czY0LnR2X3NlYywgdHM2NC50dl9uc2VjKTsKLQl9Ci0KLQlpZiAoKCFmZW5jZSB8fCBwdC0+ b3BzLT50aW1lbGluZV92YWx1ZV9zdHIpICYmCi0JICAgIHB0LT5vcHMtPmZlbmNlX3ZhbHVlX3N0 cikgewotCQljaGFyIHZhbHVlWzY0XTsKLQkJYm9vbCBzdWNjZXNzOwotCi0JCXB0LT5vcHMtPmZl bmNlX3ZhbHVlX3N0cihwdCwgdmFsdWUsIHNpemVvZih2YWx1ZSkpOwotCQlzdWNjZXNzID0gc3Ry bGVuKHZhbHVlKTsKLQotCQlpZiAoc3VjY2VzcykKLQkJCXNlcV9wcmludGYocywgIjogJXMiLCB2 YWx1ZSk7Ci0KLQkJaWYgKHN1Y2Nlc3MgJiYgZmVuY2UpIHsKLQkJCXB0LT5vcHMtPnRpbWVsaW5l X3ZhbHVlX3N0cihwdCwgdmFsdWUsIHNpemVvZih2YWx1ZSkpOwotCi0JCQlpZiAoc3RybGVuKHZh bHVlKSkKLQkJCQlzZXFfcHJpbnRmKHMsICIgLyAlcyIsIHZhbHVlKTsKLQkJfQotCX0KLQotCXNl cV9wdXRzKHMsICJcbiIpOwotfQotCi1zdGF0aWMgdm9pZCBzeW5jX3ByaW50X29iaihzdHJ1Y3Qg c2VxX2ZpbGUgKnMsIHN0cnVjdCBzeW5jX3RpbWVsaW5lICpvYmopCi17Ci0Jc3RydWN0IGxpc3Rf aGVhZCAqcG9zOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzZXFfcHJpbnRmKHMsICIlcyAl cyIsIG9iai0+bmFtZSwgb2JqLT5vcHMtPmRyaXZlcl9uYW1lKTsKLQotCWlmIChvYmotPm9wcy0+ dGltZWxpbmVfdmFsdWVfc3RyKSB7Ci0JCWNoYXIgdmFsdWVbNjRdOwotCi0JCW9iai0+b3BzLT50 aW1lbGluZV92YWx1ZV9zdHIob2JqLCB2YWx1ZSwgc2l6ZW9mKHZhbHVlKSk7Ci0JCXNlcV9wcmlu dGYocywgIjogJXMiLCB2YWx1ZSk7Ci0JfQotCi0Jc2VxX3B1dHMocywgIlxuIik7Ci0KLQlzcGlu X2xvY2tfaXJxc2F2ZSgmb2JqLT5jaGlsZF9saXN0X2xvY2ssIGZsYWdzKTsKLQlsaXN0X2Zvcl9l YWNoKHBvcywgJm9iai0+Y2hpbGRfbGlzdF9oZWFkKSB7Ci0JCXN0cnVjdCBzeW5jX3B0ICpwdCA9 Ci0JCQljb250YWluZXJfb2YocG9zLCBzdHJ1Y3Qgc3luY19wdCwgY2hpbGRfbGlzdCk7Ci0JCXN5 bmNfcHJpbnRfcHQocywgJnB0LT5iYXNlLCBmYWxzZSk7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJl c3RvcmUoJm9iai0+Y2hpbGRfbGlzdF9sb2NrLCBmbGFncyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHN5 bmNfcHJpbnRfZmVuY2Uoc3RydWN0IHNlcV9maWxlICpzLCBzdHJ1Y3Qgc3luY19mZW5jZSAqZmVu Y2UpCi17Ci0Jd2FpdF9xdWV1ZV90ICpwb3M7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQg aTsKLQotCXNlcV9wcmludGYocywgIlslcF0gJXM6ICVzXG4iLCBmZW5jZSwgZmVuY2UtPm5hbWUs Ci0JCSAgIHN5bmNfc3RhdHVzX3N0cihhdG9taWNfcmVhZCgmZmVuY2UtPnN0YXR1cykpKTsKLQot CWZvciAoaSA9IDA7IGkgPCBmZW5jZS0+bnVtX2ZlbmNlczsgKytpKSB7Ci0JCXN5bmNfcHJpbnRf cHQocywgZmVuY2UtPmNic1tpXS5zeW5jX3B0LCB0cnVlKTsKLQl9Ci0KLQlzcGluX2xvY2tfaXJx c2F2ZSgmZmVuY2UtPndxLmxvY2ssIGZsYWdzKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywg JmZlbmNlLT53cS50YXNrX2xpc3QsIHRhc2tfbGlzdCkgewotCQlzdHJ1Y3Qgc3luY19mZW5jZV93 YWl0ZXIgKndhaXRlcjsKLQotCQlpZiAocG9zLT5mdW5jICE9ICZzeW5jX2ZlbmNlX3dha2VfdXBf d3EpCi0JCQljb250aW51ZTsKLQotCQl3YWl0ZXIgPSBjb250YWluZXJfb2YocG9zLCBzdHJ1Y3Qg c3luY19mZW5jZV93YWl0ZXIsIHdvcmspOwotCi0JCXNlcV9wcmludGYocywgIndhaXRlciAlcEZc biIsIHdhaXRlci0+Y2FsbGJhY2spOwotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmZW5j ZS0+d3EubG9jaywgZmxhZ3MpOwotfQotCi1zdGF0aWMgaW50IHN5bmNfZGVidWdmc19zaG93KHN0 cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdW51c2VkKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7 Ci0Jc3RydWN0IGxpc3RfaGVhZCAqcG9zOwotCi0Jc2VxX3B1dHMocywgIm9ianM6XG4tLS0tLS0t LS0tLS0tLVxuIik7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmc3luY190aW1lbGluZV9saXN0X2xv Y2ssIGZsYWdzKTsKLQlsaXN0X2Zvcl9lYWNoKHBvcywgJnN5bmNfdGltZWxpbmVfbGlzdF9oZWFk KSB7Ci0JCXN0cnVjdCBzeW5jX3RpbWVsaW5lICpvYmogPQotCQkJY29udGFpbmVyX29mKHBvcywg c3RydWN0IHN5bmNfdGltZWxpbmUsCi0JCQkJICAgICBzeW5jX3RpbWVsaW5lX2xpc3QpOwotCi0J CXN5bmNfcHJpbnRfb2JqKHMsIG9iaik7Ci0JCXNlcV9wdXRzKHMsICJcbiIpOwotCX0KLQlzcGlu X3VubG9ja19pcnFyZXN0b3JlKCZzeW5jX3RpbWVsaW5lX2xpc3RfbG9jaywgZmxhZ3MpOwotCi0J c2VxX3B1dHMocywgImZlbmNlczpcbi0tLS0tLS0tLS0tLS0tXG4iKTsKLQotCXNwaW5fbG9ja19p cnFzYXZlKCZzeW5jX2ZlbmNlX2xpc3RfbG9jaywgZmxhZ3MpOwotCWxpc3RfZm9yX2VhY2gocG9z LCAmc3luY19mZW5jZV9saXN0X2hlYWQpIHsKLQkJc3RydWN0IHN5bmNfZmVuY2UgKmZlbmNlID0K LQkJCWNvbnRhaW5lcl9vZihwb3MsIHN0cnVjdCBzeW5jX2ZlbmNlLCBzeW5jX2ZlbmNlX2xpc3Qp OwotCi0JCXN5bmNfcHJpbnRfZmVuY2UocywgZmVuY2UpOwotCQlzZXFfcHV0cyhzLCAiXG4iKTsK LQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3luY19mZW5jZV9saXN0X2xvY2ssIGZsYWdz KTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzeW5jX2RlYnVnZnNfb3BlbihzdHJ1Y3Qg aW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlyZXR1cm4gc2luZ2xlX29wZW4o ZmlsZSwgc3luY19kZWJ1Z2ZzX3Nob3csIGlub2RlLT5pX3ByaXZhdGUpOwotfQotCi1zdGF0aWMg Y29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzeW5jX2RlYnVnZnNfZm9wcyA9IHsKLQkub3Bl biAgICAgICAgICAgPSBzeW5jX2RlYnVnZnNfb3BlbiwKLQkucmVhZCAgICAgICAgICAgPSBzZXFf cmVhZCwKLQkubGxzZWVrICAgICAgICAgPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UgICAgICAgID0g c2luZ2xlX3JlbGVhc2UsCi19OwotCi1zdGF0aWMgX19pbml0IGludCBzeW5jX2RlYnVnZnNfaW5p dCh2b2lkKQotewotCWRlYnVnZnNfY3JlYXRlX2ZpbGUoInN5bmMiLCBTX0lSVUdPLCBOVUxMLCBO VUxMLCAmc3luY19kZWJ1Z2ZzX2ZvcHMpOwotCXJldHVybiAwOwotfQotbGF0ZV9pbml0Y2FsbChz eW5jX2RlYnVnZnNfaW5pdCk7Ci0KLSNkZWZpbmUgRFVNUF9DSFVOSyAyNTYKLXN0YXRpYyBjaGFy IHN5bmNfZHVtcF9idWZbNjQgKiAxMDI0XTsKLXZvaWQgc3luY19kdW1wKHZvaWQpCi17Ci0Jc3Ry dWN0IHNlcV9maWxlIHMgPSB7Ci0JCS5idWYgPSBzeW5jX2R1bXBfYnVmLAotCQkuc2l6ZSA9IHNp emVvZihzeW5jX2R1bXBfYnVmKSAtIDEsCi0JfTsKLQlpbnQgaTsKLQotCXN5bmNfZGVidWdmc19z aG93KCZzLCBOVUxMKTsKLQotCWZvciAoaSA9IDA7IGkgPCBzLmNvdW50OyBpICs9IERVTVBfQ0hV TkspIHsKLQkJaWYgKChzLmNvdW50IC0gaSkgPiBEVU1QX0NIVU5LKSB7Ci0JCQljaGFyIGMgPSBz LmJ1ZltpICsgRFVNUF9DSFVOS107Ci0KLQkJCXMuYnVmW2kgKyBEVU1QX0NIVU5LXSA9IDA7Ci0J CQlwcl9jb250KCIlcyIsIHMuYnVmICsgaSk7Ci0JCQlzLmJ1ZltpICsgRFVNUF9DSFVOS10gPSBj OwotCQl9IGVsc2UgewotCQkJcy5idWZbcy5jb3VudF0gPSAwOwotCQkJcHJfY29udCgiJXMiLCBz LmJ1ZiArIGkpOwotCQl9Ci0JfQotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3Rh Z2luZy9hbmRyb2lkL3RyYWNlL3N5bmMuaCBiL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL3RyYWNl L3N5bmMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzdlZGI5Ny4uMDAwMDAwMAot LS0gYS9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC90cmFjZS9zeW5jLmgKKysrIC9kZXYvbnVsbApA QCAtMSw4MiArMCwwIEBACi0jdW5kZWYgVFJBQ0VfU1lTVEVNCi0jZGVmaW5lIFRSQUNFX0lOQ0xV REVfUEFUSCAuLi8uLi9kcml2ZXJzL3N0YWdpbmcvYW5kcm9pZC90cmFjZQotI2RlZmluZSBUUkFD RV9TWVNURU0gc3luYwotCi0jaWYgIWRlZmluZWQoX1RSQUNFX1NZTkNfSCkgfHwgZGVmaW5lZChU UkFDRV9IRUFERVJfTVVMVElfUkVBRCkKLSNkZWZpbmUgX1RSQUNFX1NZTkNfSAotCi0jaW5jbHVk ZSAiLi4vc3luYy5oIgotI2luY2x1ZGUgPGxpbnV4L3RyYWNlcG9pbnQuaD4KLQotVFJBQ0VfRVZF TlQoc3luY190aW1lbGluZSwKLQlUUF9QUk9UTyhzdHJ1Y3Qgc3luY190aW1lbGluZSAqdGltZWxp bmUpLAotCi0JVFBfQVJHUyh0aW1lbGluZSksCi0KLQlUUF9TVFJVQ1RfX2VudHJ5KAotCQkJX19z dHJpbmcobmFtZSwgdGltZWxpbmUtPm5hbWUpCi0JCQlfX2FycmF5KGNoYXIsIHZhbHVlLCAzMikK LQkpLAotCi0JVFBfZmFzdF9hc3NpZ24oCi0JCQlfX2Fzc2lnbl9zdHIobmFtZSwgdGltZWxpbmUt Pm5hbWUpOwotCQkJaWYgKHRpbWVsaW5lLT5vcHMtPnRpbWVsaW5lX3ZhbHVlX3N0cikgewotCQkJ CXRpbWVsaW5lLT5vcHMtPnRpbWVsaW5lX3ZhbHVlX3N0cih0aW1lbGluZSwKLQkJCQkJCQlfX2Vu dHJ5LT52YWx1ZSwKLQkJCQkJCQlzaXplb2YoX19lbnRyeS0+dmFsdWUpKTsKLQkJCX0gZWxzZSB7 Ci0JCQkJX19lbnRyeS0+dmFsdWVbMF0gPSAnXDAnOwotCQkJfQotCSksCi0KLQlUUF9wcmludGso Im5hbWU9JXMgdmFsdWU9JXMiLCBfX2dldF9zdHIobmFtZSksIF9fZW50cnktPnZhbHVlKQotKTsK LQotVFJBQ0VfRVZFTlQoc3luY193YWl0LAotCVRQX1BST1RPKHN0cnVjdCBzeW5jX2ZlbmNlICpm ZW5jZSwgaW50IGJlZ2luKSwKLQotCVRQX0FSR1MoZmVuY2UsIGJlZ2luKSwKLQotCVRQX1NUUlVD VF9fZW50cnkoCi0JCQlfX3N0cmluZyhuYW1lLCBmZW5jZS0+bmFtZSkKLQkJCV9fZmllbGQoczMy LCBzdGF0dXMpCi0JCQlfX2ZpZWxkKHUzMiwgYmVnaW4pCi0JKSwKLQotCVRQX2Zhc3RfYXNzaWdu KAotCQkJX19hc3NpZ25fc3RyKG5hbWUsIGZlbmNlLT5uYW1lKTsKLQkJCV9fZW50cnktPnN0YXR1 cyA9IGF0b21pY19yZWFkKCZmZW5jZS0+c3RhdHVzKTsKLQkJCV9fZW50cnktPmJlZ2luID0gYmVn aW47Ci0JKSwKLQotCVRQX3ByaW50aygiJXMgbmFtZT0lcyBzdGF0ZT0lZCIsIF9fZW50cnktPmJl Z2luID8gImJlZ2luIiA6ICJlbmQiLAotCQkJX19nZXRfc3RyKG5hbWUpLCBfX2VudHJ5LT5zdGF0 dXMpCi0pOwotCi1UUkFDRV9FVkVOVChzeW5jX3B0LAotCVRQX1BST1RPKHN0cnVjdCBmZW5jZSAq cHQpLAotCi0JVFBfQVJHUyhwdCksCi0KLQlUUF9TVFJVQ1RfX2VudHJ5KAotCQlfX3N0cmluZyh0 aW1lbGluZSwgcHQtPm9wcy0+Z2V0X3RpbWVsaW5lX25hbWUocHQpKQotCQlfX2FycmF5KGNoYXIs IHZhbHVlLCAzMikKLQkpLAotCi0JVFBfZmFzdF9hc3NpZ24oCi0JCV9fYXNzaWduX3N0cih0aW1l bGluZSwgcHQtPm9wcy0+Z2V0X3RpbWVsaW5lX25hbWUocHQpKTsKLQkJaWYgKHB0LT5vcHMtPmZl bmNlX3ZhbHVlX3N0cikgewotCQkJcHQtPm9wcy0+ZmVuY2VfdmFsdWVfc3RyKHB0LCBfX2VudHJ5 LT52YWx1ZSwKLQkJCQkJCQlzaXplb2YoX19lbnRyeS0+dmFsdWUpKTsKLQkJfSBlbHNlIHsKLQkJ CV9fZW50cnktPnZhbHVlWzBdID0gJ1wwJzsKLQkJfQotCSksCi0KLQlUUF9wcmludGsoIm5hbWU9 JXMgdmFsdWU9JXMiLCBfX2dldF9zdHIodGltZWxpbmUpLCBfX2VudHJ5LT52YWx1ZSkKLSk7Ci0K LSNlbmRpZiAvKiBpZiAhZGVmaW5lZChfVFJBQ0VfU1lOQ19IKSB8fCBkZWZpbmVkKFRSQUNFX0hF QURFUl9NVUxUSV9SRUFEKSAqLwotCi0vKiBUaGlzIHBhcnQgbXVzdCBiZSBvdXRzaWRlIHByb3Rl Y3Rpb24gKi8KLSNpbmNsdWRlIDx0cmFjZS9kZWZpbmVfdHJhY2UuaD4KZGlmZiAtLWdpdCBhL2Ry aXZlcnMvc3RhZ2luZy9hbmRyb2lkL3VhcGkvc3dfc3luYy5oIGIvZHJpdmVycy9zdGFnaW5nL2Fu ZHJvaWQvdWFwaS9zd19zeW5jLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliNWQ0 ODYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvdWFwaS9zd19zeW5jLmgK KysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEy IEdvb2dsZSwgSW5jLgotICoKLSAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgdmVyc2lvbiAyLCBh cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCi0gKiBtYXkg YmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgot ICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp bGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g dGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICovCi0KLSNpZm5kZWYgX1VBUElfTElOVVhf U1dfU1lOQ19ICi0jZGVmaW5lIF9VQVBJX0xJTlVYX1NXX1NZTkNfSAotCi0jaW5jbHVkZSA8bGlu dXgvdHlwZXMuaD4KLQotc3RydWN0IHN3X3N5bmNfY3JlYXRlX2ZlbmNlX2RhdGEgewotCV9fdTMy CXZhbHVlOwotCWNoYXIJbmFtZVszMl07Ci0JX19zMzIJZmVuY2U7IC8qIGZkIG9mIG5ldyBmZW5j ZSAqLwotfTsKLQotI2RlZmluZSBTV19TWU5DX0lPQ19NQUdJQwknVycKLQotI2RlZmluZSBTV19T WU5DX0lPQ19DUkVBVEVfRkVOQ0UJX0lPV1IoU1dfU1lOQ19JT0NfTUFHSUMsIDAsXAotCQlzdHJ1 Y3Qgc3dfc3luY19jcmVhdGVfZmVuY2VfZGF0YSkKLSNkZWZpbmUgU1dfU1lOQ19JT0NfSU5DCQkJ X0lPVyhTV19TWU5DX0lPQ19NQUdJQywgMSwgX191MzIpCi0KLSNlbmRpZiAvKiBfVUFQSV9MSU5V WF9TV19TWU5DX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hbmRyb2lkL3VhcGkv c3luYy5oIGIvZHJpdmVycy9zdGFnaW5nL2FuZHJvaWQvdWFwaS9zeW5jLmgKZGVsZXRlZCBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IGU5NjRjNzUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5n L2FuZHJvaWQvdWFwaS9zeW5jLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5NyArMCwwIEBACi0vKgot ICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSwgSW5jLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBp cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0 IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg b2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp bHMuCi0gKgotICovCi0KLSNpZm5kZWYgX1VBUElfTElOVVhfU1lOQ19ICi0jZGVmaW5lIF9VQVBJ X0xJTlVYX1NZTkNfSAotCi0jaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KLSNpbmNsdWRlIDxsaW51 eC90eXBlcy5oPgotCi0vKioKLSAqIHN0cnVjdCBzeW5jX21lcmdlX2RhdGEgLSBkYXRhIHBhc3Nl ZCB0byBtZXJnZSBpb2N0bAotICogQGZkMjoJZmlsZSBkZXNjcmlwdG9yIG9mIHNlY29uZCBmZW5j ZQotICogQG5hbWU6CW5hbWUgb2YgbmV3IGZlbmNlCi0gKiBAZmVuY2U6CXJldHVybnMgdGhlIGZk IG9mIHRoZSBuZXcgZmVuY2UgdG8gdXNlcnNwYWNlCi0gKi8KLXN0cnVjdCBzeW5jX21lcmdlX2Rh dGEgewotCV9fczMyCWZkMjsgLyogZmQgb2Ygc2Vjb25kIGZlbmNlICovCi0JY2hhcgluYW1lWzMy XTsgLyogbmFtZSBvZiBuZXcgZmVuY2UgKi8KLQlfX3MzMglmZW5jZTsgLyogZmQgb24gbmV3bHkg Y3JlYXRlZCBmZW5jZSAqLwotfTsKLQotLyoqCi0gKiBzdHJ1Y3Qgc3luY19wdF9pbmZvIC0gZGV0 YWlsZWQgc3luY19wdCBpbmZvcm1hdGlvbgotICogQGxlbjoJCWxlbmd0aCBvZiBzeW5jX3B0X2lu Zm8gaW5jbHVkaW5nIGFueSBkcml2ZXJfZGF0YQotICogQG9ial9uYW1lOgkJbmFtZSBvZiBwYXJl bnQgc3luY190aW1lbGluZQotICogQGRyaXZlcl9uYW1lOgluYW1lIG9mIGRyaXZlciBpbXBsZW1l bnRpbmcgdGhlIHBhcmVudAotICogQHN0YXR1czoJCXN0YXR1cyBvZiB0aGUgc3luY19wdCAwOmFj dGl2ZSAxOnNpZ25hbGVkIDwwOmVycm9yCi0gKiBAdGltZXN0YW1wX25zOgl0aW1lc3RhbXAgb2Yg c3RhdHVzIGNoYW5nZSBpbiBuYW5vc2Vjb25kcwotICogQGRyaXZlcl9kYXRhOglhbnkgZHJpdmVy IGRlcGVuZGVudCBkYXRhCi0gKi8KLXN0cnVjdCBzeW5jX3B0X2luZm8gewotCV9fdTMyCWxlbjsK LQljaGFyCW9ial9uYW1lWzMyXTsKLQljaGFyCWRyaXZlcl9uYW1lWzMyXTsKLQlfX3MzMglzdGF0 dXM7Ci0JX191NjQJdGltZXN0YW1wX25zOwotCi0JX191OAlkcml2ZXJfZGF0YVswXTsKLX07Ci0K LS8qKgotICogc3RydWN0IHN5bmNfZmVuY2VfaW5mb19kYXRhIC0gZGF0YSByZXR1cm5lZCBmcm9t IGZlbmNlIGluZm8gaW9jdGwKLSAqIEBsZW46CWlvY3RsIGNhbGxlciB3cml0ZXMgdGhlIHNpemUg b2YgdGhlIGJ1ZmZlciBpdHMgcGFzc2luZyBpbi4KLSAqCQlpb2N0bCByZXR1cm5zIGxlbmd0aCBv ZiBzeW5jX2ZlbmNlX2RhdGEgcmV0dXJuZWQgdG8gdXNlcnNwYWNlCi0gKgkJaW5jbHVkaW5nIHB0 X2luZm8uCi0gKiBAbmFtZToJbmFtZSBvZiBmZW5jZQotICogQHN0YXR1czoJc3RhdHVzIG9mIGZl bmNlLiAxOiBzaWduYWxlZCAwOmFjdGl2ZSA8MDplcnJvcgotICogQHB0X2luZm86CWEgc3luY19w dF9pbmZvIHN0cnVjdCBmb3IgZXZlcnkgc3luY19wdCBpbiB0aGUgZmVuY2UKLSAqLwotc3RydWN0 IHN5bmNfZmVuY2VfaW5mb19kYXRhIHsKLQlfX3UzMglsZW47Ci0JY2hhcgluYW1lWzMyXTsKLQlf X3MzMglzdGF0dXM7Ci0KLQlfX3U4CXB0X2luZm9bMF07Ci19OwotCi0jZGVmaW5lIFNZTkNfSU9D X01BR0lDCQknPicKLQotLyoqCi0gKiBET0M6IFNZTkNfSU9DX1dBSVQgLSB3YWl0IGZvciBhIGZl bmNlIHRvIHNpZ25hbAotICoKLSAqIHBhc3MgdGltZW91dCBpbiBtaWxsaXNlY29uZHMuICBXYWl0 cyBpbmRlZmluaXRlbHkgdGltZW91dCA8IDAuCi0gKi8KLSNkZWZpbmUgU1lOQ19JT0NfV0FJVAkJ X0lPVyhTWU5DX0lPQ19NQUdJQywgMCwgX19zMzIpCi0KLS8qKgotICogRE9DOiBTWU5DX0lPQ19N RVJHRSAtIG1lcmdlIHR3byBmZW5jZXMKLSAqCi0gKiBUYWtlcyBhIHN0cnVjdCBzeW5jX21lcmdl X2RhdGEuICBDcmVhdGVzIGEgbmV3IGZlbmNlIGNvbnRhaW5pbmcgY29waWVzIG9mCi0gKiB0aGUg c3luY19wdHMgaW4gYm90aCB0aGUgY2FsbGluZyBmZCBhbmQgc3luY19tZXJnZV9kYXRhLmZkMi4g IFJldHVybnMgdGhlCi0gKiBuZXcgZmVuY2UncyBmZCBpbiBzeW5jX21lcmdlX2RhdGEuZmVuY2UK LSAqLwotI2RlZmluZSBTWU5DX0lPQ19NRVJHRQkJX0lPV1IoU1lOQ19JT0NfTUFHSUMsIDEsIHN0 cnVjdCBzeW5jX21lcmdlX2RhdGEpCi0KLS8qKgotICogRE9DOiBTWU5DX0lPQ19GRU5DRV9JTkZP IC0gZ2V0IGRldGFpbGVkIGluZm9ybWF0aW9uIG9uIGEgZmVuY2UKLSAqCi0gKiBUYWtlcyBhIHN0 cnVjdCBzeW5jX2ZlbmNlX2luZm9fZGF0YSB3aXRoIGV4dHJhIHNwYWNlIGFsbG9jYXRlZCBmb3Ig cHRfaW5mby4KLSAqIENhbGxlciBzaG91bGQgd3JpdGUgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciBp bnRvIGxlbi4gIE9uIHJldHVybiwgbGVuIGlzCi0gKiB1cGRhdGVkIHRvIHJlZmxlY3QgdGhlIHRv dGFsIHNpemUgb2YgdGhlIHN5bmNfZmVuY2VfaW5mb19kYXRhIGluY2x1ZGluZwotICogcHRfaW5m by4KLSAqCi0gKiBwdF9pbmZvIGlzIGEgYnVmZmVyIGNvbnRhaW5pbmcgc3luY19wdF9pbmZvcyBm b3IgZXZlcnkgc3luY19wdCBpbiB0aGUgZmVuY2UuCi0gKiBUbyBpdGVyYXRlIG92ZXIgdGhlIHN5 bmNfcHRfaW5mb3MsIHVzZSB0aGUgc3luY19wdF9pbmZvLmxlbiBmaWVsZC4KLSAqLwotI2RlZmlu ZSBTWU5DX0lPQ19GRU5DRV9JTkZPCV9JT1dSKFNZTkNfSU9DX01BR0lDLCAyLFwKLQlzdHJ1Y3Qg c3luY19mZW5jZV9pbmZvX2RhdGEpCi0KLSNlbmRpZiAvKiBfVUFQSV9MSU5VWF9TWU5DX0ggKi8K ZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9LYnVpbGQgYi9pbmNsdWRlL3VhcGkvS2J1aWxkCmlu ZGV4IDI0NWFhNmUuLjdjNDE1ZDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9LYnVpbGQKKysr IGIvaW5jbHVkZS91YXBpL0tidWlsZApAQCAtMTMsMyArMTMsNCBAQCBoZWFkZXIteSArPSBkcm0v CiBoZWFkZXIteSArPSB4ZW4vCiBoZWFkZXIteSArPSBzY3NpLwogaGVhZGVyLXkgKz0gbWlzYy8K K2hlYWRlci15ICs9IHN5bmMvCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvc3luYy9LYnVpbGQg Yi9pbmNsdWRlL3VhcGkvc3luYy9LYnVpbGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMC4uMjcxNmZmZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvdWFwaS9zeW5jL0tidWls ZApAQCAtMCwwICsxLDMgQEAKKyMgc3luYyBIZWFkZXIgZXhwb3J0IGxpc3QKK2hlYWRlci15ICs9 IHN3X3N5bmMuaAoraGVhZGVyLXkgKz0gc3luYy5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkv c3luYy9zd19zeW5jLmggYi9pbmNsdWRlL3VhcGkvc3luYy9zd19zeW5jLmgKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWI1ZDQ4NgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1 ZGUvdWFwaS9zeW5jL3N3X3N5bmMuaApAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0 IChDKSAyMDEyIEdvb2dsZSwgSW5jLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVy c2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5k CisgKiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3Nl IHRlcm1zLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0 aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICovCisKKyNpZm5kZWYgX1VB UElfTElOVVhfU1dfU1lOQ19ICisjZGVmaW5lIF9VQVBJX0xJTlVYX1NXX1NZTkNfSAorCisjaW5j bHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0IHN3X3N5bmNfY3JlYXRlX2ZlbmNlX2RhdGEg eworCV9fdTMyCXZhbHVlOworCWNoYXIJbmFtZVszMl07CisJX19zMzIJZmVuY2U7IC8qIGZkIG9m IG5ldyBmZW5jZSAqLworfTsKKworI2RlZmluZSBTV19TWU5DX0lPQ19NQUdJQwknVycKKworI2Rl ZmluZSBTV19TWU5DX0lPQ19DUkVBVEVfRkVOQ0UJX0lPV1IoU1dfU1lOQ19JT0NfTUFHSUMsIDAs XAorCQlzdHJ1Y3Qgc3dfc3luY19jcmVhdGVfZmVuY2VfZGF0YSkKKyNkZWZpbmUgU1dfU1lOQ19J T0NfSU5DCQkJX0lPVyhTV19TWU5DX0lPQ19NQUdJQywgMSwgX191MzIpCisKKyNlbmRpZiAvKiBf VUFQSV9MSU5VWF9TV19TWU5DX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9zeW5jL3N5 bmMuaCBiL2luY2x1ZGUvdWFwaS9zeW5jL3N5bmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi5lOTY0Yzc1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS91YXBpL3N5bmMv c3luYy5oCkBAIC0wLDAgKzEsOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xl LCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKworI2lmbmRlZiBfVUFQ SV9MSU5VWF9TWU5DX0gKKyNkZWZpbmUgX1VBUElfTElOVVhfU1lOQ19ICisKKyNpbmNsdWRlIDxs aW51eC9pb2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qKgorICogc3RydWN0 IHN5bmNfbWVyZ2VfZGF0YSAtIGRhdGEgcGFzc2VkIHRvIG1lcmdlIGlvY3RsCisgKiBAZmQyOglm aWxlIGRlc2NyaXB0b3Igb2Ygc2Vjb25kIGZlbmNlCisgKiBAbmFtZToJbmFtZSBvZiBuZXcgZmVu Y2UKKyAqIEBmZW5jZToJcmV0dXJucyB0aGUgZmQgb2YgdGhlIG5ldyBmZW5jZSB0byB1c2Vyc3Bh Y2UKKyAqLworc3RydWN0IHN5bmNfbWVyZ2VfZGF0YSB7CisJX19zMzIJZmQyOyAvKiBmZCBvZiBz ZWNvbmQgZmVuY2UgKi8KKwljaGFyCW5hbWVbMzJdOyAvKiBuYW1lIG9mIG5ldyBmZW5jZSAqLwor CV9fczMyCWZlbmNlOyAvKiBmZCBvbiBuZXdseSBjcmVhdGVkIGZlbmNlICovCit9OworCisvKioK KyAqIHN0cnVjdCBzeW5jX3B0X2luZm8gLSBkZXRhaWxlZCBzeW5jX3B0IGluZm9ybWF0aW9uCisg KiBAbGVuOgkJbGVuZ3RoIG9mIHN5bmNfcHRfaW5mbyBpbmNsdWRpbmcgYW55IGRyaXZlcl9kYXRh CisgKiBAb2JqX25hbWU6CQluYW1lIG9mIHBhcmVudCBzeW5jX3RpbWVsaW5lCisgKiBAZHJpdmVy X25hbWU6CW5hbWUgb2YgZHJpdmVyIGltcGxlbWVudGluZyB0aGUgcGFyZW50CisgKiBAc3RhdHVz OgkJc3RhdHVzIG9mIHRoZSBzeW5jX3B0IDA6YWN0aXZlIDE6c2lnbmFsZWQgPDA6ZXJyb3IKKyAq IEB0aW1lc3RhbXBfbnM6CXRpbWVzdGFtcCBvZiBzdGF0dXMgY2hhbmdlIGluIG5hbm9zZWNvbmRz CisgKiBAZHJpdmVyX2RhdGE6CWFueSBkcml2ZXIgZGVwZW5kZW50IGRhdGEKKyAqLworc3RydWN0 IHN5bmNfcHRfaW5mbyB7CisJX191MzIJbGVuOworCWNoYXIJb2JqX25hbWVbMzJdOworCWNoYXIJ ZHJpdmVyX25hbWVbMzJdOworCV9fczMyCXN0YXR1czsKKwlfX3U2NAl0aW1lc3RhbXBfbnM7CisK KwlfX3U4CWRyaXZlcl9kYXRhWzBdOworfTsKKworLyoqCisgKiBzdHJ1Y3Qgc3luY19mZW5jZV9p bmZvX2RhdGEgLSBkYXRhIHJldHVybmVkIGZyb20gZmVuY2UgaW5mbyBpb2N0bAorICogQGxlbjoJ aW9jdGwgY2FsbGVyIHdyaXRlcyB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyIGl0cyBwYXNzaW5nIGlu LgorICoJCWlvY3RsIHJldHVybnMgbGVuZ3RoIG9mIHN5bmNfZmVuY2VfZGF0YSByZXR1cm5lZCB0 byB1c2Vyc3BhY2UKKyAqCQlpbmNsdWRpbmcgcHRfaW5mby4KKyAqIEBuYW1lOgluYW1lIG9mIGZl bmNlCisgKiBAc3RhdHVzOglzdGF0dXMgb2YgZmVuY2UuIDE6IHNpZ25hbGVkIDA6YWN0aXZlIDww OmVycm9yCisgKiBAcHRfaW5mbzoJYSBzeW5jX3B0X2luZm8gc3RydWN0IGZvciBldmVyeSBzeW5j X3B0IGluIHRoZSBmZW5jZQorICovCitzdHJ1Y3Qgc3luY19mZW5jZV9pbmZvX2RhdGEgeworCV9f dTMyCWxlbjsKKwljaGFyCW5hbWVbMzJdOworCV9fczMyCXN0YXR1czsKKworCV9fdTgJcHRfaW5m b1swXTsKK307CisKKyNkZWZpbmUgU1lOQ19JT0NfTUFHSUMJCSc+JworCisvKioKKyAqIERPQzog U1lOQ19JT0NfV0FJVCAtIHdhaXQgZm9yIGEgZmVuY2UgdG8gc2lnbmFsCisgKgorICogcGFzcyB0 aW1lb3V0IGluIG1pbGxpc2Vjb25kcy4gIFdhaXRzIGluZGVmaW5pdGVseSB0aW1lb3V0IDwgMC4K KyAqLworI2RlZmluZSBTWU5DX0lPQ19XQUlUCQlfSU9XKFNZTkNfSU9DX01BR0lDLCAwLCBfX3Mz MikKKworLyoqCisgKiBET0M6IFNZTkNfSU9DX01FUkdFIC0gbWVyZ2UgdHdvIGZlbmNlcworICoK KyAqIFRha2VzIGEgc3RydWN0IHN5bmNfbWVyZ2VfZGF0YS4gIENyZWF0ZXMgYSBuZXcgZmVuY2Ug Y29udGFpbmluZyBjb3BpZXMgb2YKKyAqIHRoZSBzeW5jX3B0cyBpbiBib3RoIHRoZSBjYWxsaW5n IGZkIGFuZCBzeW5jX21lcmdlX2RhdGEuZmQyLiAgUmV0dXJucyB0aGUKKyAqIG5ldyBmZW5jZSdz IGZkIGluIHN5bmNfbWVyZ2VfZGF0YS5mZW5jZQorICovCisjZGVmaW5lIFNZTkNfSU9DX01FUkdF CQlfSU9XUihTWU5DX0lPQ19NQUdJQywgMSwgc3RydWN0IHN5bmNfbWVyZ2VfZGF0YSkKKworLyoq CisgKiBET0M6IFNZTkNfSU9DX0ZFTkNFX0lORk8gLSBnZXQgZGV0YWlsZWQgaW5mb3JtYXRpb24g b24gYSBmZW5jZQorICoKKyAqIFRha2VzIGEgc3RydWN0IHN5bmNfZmVuY2VfaW5mb19kYXRhIHdp dGggZXh0cmEgc3BhY2UgYWxsb2NhdGVkIGZvciBwdF9pbmZvLgorICogQ2FsbGVyIHNob3VsZCB3 cml0ZSB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyIGludG8gbGVuLiAgT24gcmV0dXJuLCBsZW4gaXMK KyAqIHVwZGF0ZWQgdG8gcmVmbGVjdCB0aGUgdG90YWwgc2l6ZSBvZiB0aGUgc3luY19mZW5jZV9p bmZvX2RhdGEgaW5jbHVkaW5nCisgKiBwdF9pbmZvLgorICoKKyAqIHB0X2luZm8gaXMgYSBidWZm ZXIgY29udGFpbmluZyBzeW5jX3B0X2luZm9zIGZvciBldmVyeSBzeW5jX3B0IGluIHRoZSBmZW5j ZS4KKyAqIFRvIGl0ZXJhdGUgb3ZlciB0aGUgc3luY19wdF9pbmZvcywgdXNlIHRoZSBzeW5jX3B0 X2luZm8ubGVuIGZpZWxkLgorICovCisjZGVmaW5lIFNZTkNfSU9DX0ZFTkNFX0lORk8JX0lPV1Io U1lOQ19JT0NfTUFHSUMsIDIsXAorCXN0cnVjdCBzeW5jX2ZlbmNlX2luZm9fZGF0YSkKKworI2Vu ZGlmIC8qIF9VQVBJX0xJTlVYX1NZTkNfSCAqLwotLSAKMS45LjEKCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50 ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3Jn L21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==