From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pj1-x102f.google.com (mail-pj1-x102f.google.com [IPv6:2607:f8b0:4864:20::102f]) by gabe.freedesktop.org (Postfix) with ESMTPS id 33E8E6F423 for ; Tue, 4 Feb 2020 23:59:06 +0000 (UTC) Received: by mail-pj1-x102f.google.com with SMTP id m7so1281012pjs.0 for ; Tue, 04 Feb 2020 15:59:06 -0800 (PST) From: Matt Turner Date: Tue, 4 Feb 2020 15:58:31 -0800 Message-Id: <20200204235831.1263837-1-mattst88@gmail.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t] tools: Delete aubdump List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: Development mailing list for IGT GPU Tools Cc: Matt Turner List-ID: U3VwZXJzZWRlZCBieSBpbnRlbF9kdW1wX2dwdSBpbiBNZXNhLgoKU2lnbmVkLW9mZi1ieTogTWF0 dCBUdXJuZXIgPG1hdHRzdDg4QGdtYWlsLmNvbT4KLS0tCiBjb25maWd1cmUuYWMgICAgICAgICAg IHwgICAgMiAtCiBtYW4vaW50ZWxfYXViZHVtcC5yc3QgIHwgICA1NSAtLQogbWFuL21lc29uLmJ1 aWxkICAgICAgICB8ICAgIDEgLQogdG9vbHMvLmdpdGlnbm9yZSAgICAgICB8ICAgIDEgLQogdG9v bHMvTWFrZWZpbGUuYW0gICAgICB8ICAgMTEgLQogdG9vbHMvYXViZHVtcC5jICAgICAgICB8IDEz MTUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogdG9vbHMvaW50ZWxf YXViZHVtcC5pbiB8ICAxMTEgLS0tLQogdG9vbHMvbWVzb24uYnVpbGQgICAgICB8ICAgMTMgLQog OCBmaWxlcyBjaGFuZ2VkLCAxNTA5IGRlbGV0aW9ucygtKQogZGVsZXRlIG1vZGUgMTAwNjQ0IG1h bi9pbnRlbF9hdWJkdW1wLnJzdAogZGVsZXRlIG1vZGUgMTAwNjQ0IHRvb2xzL2F1YmR1bXAuYwog ZGVsZXRlIG1vZGUgMTAwNzU1IHRvb2xzL2ludGVsX2F1YmR1bXAuaW4KCmRpZmYgLS1naXQgYS9j b25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKaW5kZXggZjllNDk0MmUuLmVlYWY4ZDk2IDEwMDY0 NAotLS0gYS9jb25maWd1cmUuYWMKKysrIGIvY29uZmlndXJlLmFjCkBAIC0zMTMsOCArMzEzLDYg QEAgQUNfQ09ORklHX0ZJTEVTKFsKIAkJIG92ZXJsYXkvTWFrZWZpbGUKIAkJIF0pCiAKLUFDX0NP TkZJR19GSUxFUyhbdG9vbHMvaW50ZWxfYXViZHVtcF0sIFtjaG1vZCAreCB0b29scy9pbnRlbF9h dWJkdW1wXSkKLQogQUNfT1VUUFVUCiAKICMgUHJpbnQgYSBzdW1tYXJ5IG9mIHRoZSBjb21waWxh dGlvbgpkaWZmIC0tZ2l0IGEvbWFuL2ludGVsX2F1YmR1bXAucnN0IGIvbWFuL2ludGVsX2F1YmR1 bXAucnN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYjVkMjYzZS4uMDAwMDAwMDAK LS0tIGEvbWFuL2ludGVsX2F1YmR1bXAucnN0CisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBA QAotPT09PT09PT09PT09PQotaW50ZWxfYXViZHVtcAotPT09PT09PT09PT09PQotCi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotTGF1bmNoIGFu IGFwcGxpY2F0aW9uIGFuZCBjYXB0dXJlIHJlbmRlcmluZyB0byBhbiBBVUIKLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0uLiBpbmNsdWRlOjog ZGVmcy5yc3QKLTpBdXRob3I6IElHVCBEZXZlbG9wZXJzIDxpZ3QtZGV2QGxpc3RzLmZyZWVkZXNr dG9wLm9yZz4KLTpEYXRlOiAyMDE2LTAzLTAxCi06VmVyc2lvbjogfFBBQ0tBR0VfU1RSSU5HfAot OkNvcHlyaWdodDogMjAxNS0yMDE2IEludGVsIENvcnBvcmF0aW9uCi06TWFudWFsIHNlY3Rpb246 IHxNQU5VQUxfU0VDVElPTnwKLTpNYW51YWwgZ3JvdXA6IHxNQU5VQUxfR1JPVVB8Ci0KLVNZTk9Q U0lTCi09PT09PT09PQotCi0qKmludGVsX2F1YmR1bXAqKiBbKk9QVElPTlMqXSAtLSAqQ09NTUFO RCogWypBUkdVTUVOVFMqXQotCi1ERVNDUklQVElPTgotPT09PT09PT09PT0KLQotUnVuIENPTU1B TkQgd2l0aCBBUkdVTUVOVFMgYW5kIGR1bXAgYW4gQVVCIGZpbGUgdGhhdCBjYXB0dXJlcyBidWZm ZXIgY29udGVudHMKLWFuZCBleGVjdXRpb24gb2YgdGhlIGk5MTUgR0VNIGFwcGxpY2F0aW9uLgot Ci1PUFRJT05TCi09PT09PT09Ci0KLS12Ci0gICAgRW5hYmxlIHZlcmJvc2UgbW9kZS4KLQotLS1o ZWxwCi0gICAgT3V0cHV0IGEgdXNhZ2UgbWVzc2FnZSBhbmQgZXhpdC4KLQotLW8gRklMRSwgLS1v dXRwdXQ9RklMRQotICAgIFdyaXRlIHRoZSB0cmFjZSBvdXRwdXQgdG8gdGhlIGZpbGUgRklMRS4g RGVmYXVsdCBpcyBDT01NQU5ELmF1Yi4KLQotLS1kZXZpY2U9SUQKLSAgICBPdmVycmlkZSB0aGUg UENJIElEIG9mIHRoZSBkcm0gZGV2aWNlLiBUaGlzIGlzIHVzZWZ1bCBmb3IgZ2V0dGluZyBhbiBh dWIKLSAgICBkdW1wIGZvciBhIGRpZmZlcmVudCBnZW5lcmF0aW9uIG9mIEdQVS4gSW4gdGhpcyBt b2RlICoqaW50ZWxfYXViZHVtcCoqIHdpbGwKLSAgICBpbnRlcmNlcHQgYnV0IG5vdCBmb3J3YXJk IHRoZSBleGVjYnVmZmVyMiBpb2N0bCwgYXMgdGhhdCB3b3VsZCB0eXBpY2FsbHkKLSAgICBjYXVz ZSBhIEdQVSBoYW5nLgotCi1FWEFNUExFUwotPT09PT09PT0KLQotaW50ZWxfYXViZHVtcCAtdiAt LW91dHB1dD1zdHVmZi5hdWIgLS0gZ2x4Z2VhcnMgLWdlb21ldHJ5IDUwMHg1MDAKLSAgICBMYXVu Y2hlcyBnbHhnZWFycyB3aXRoIGl0cyAtZ2VvbWV0cnkgb3B0aW9uIGFuZCBlbmFibGVzIGF1YiBk dW1waW5nIHdpdGgKLSAgICB0aGUgLXYgYW5kIC0tb3V0cHV0PXN0dWZmLmF1YiBvcHRpb25zLgot Ci1SRVBPUlRJTkcgQlVHUwotPT09PT09PT09PT09PT0KLQotUmVwb3J0IGJ1Z3MgdG8gaHR0cHM6 Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy4KZGlmZiAtLWdpdCBhL21hbi9tZXNvbi5idWlsZCBiL21h bi9tZXNvbi5idWlsZAppbmRleCAyMTg3ZThjNS4uMDAyNjRhMjEgMTAwNjQ0Ci0tLSBhL21hbi9t ZXNvbi5idWlsZAorKysgYi9tYW4vbWVzb24uYnVpbGQKQEAgLTEsNyArMSw2IEBACiBidWlsZF9t YW4gPSBnZXRfb3B0aW9uKCdtYW4nKQogCiBtYW5wYWdlcyA9IFsKLQknaW50ZWxfYXViZHVtcCcs CiAJJ2ludGVsX2F1ZGlvX2R1bXAnLAogCSdpbnRlbF9iaW9zX2R1bXBlcicsCiAJJ2ludGVsX2Vy cm9yX2RlY29kZScsCmRpZmYgLS1naXQgYS90b29scy8uZ2l0aWdub3JlIGIvdG9vbHMvLmdpdGln bm9yZQppbmRleCAyMTBkYWFjNS4uODZmMjgwOTYgMTAwNjQ0Ci0tLSBhL3Rvb2xzLy5naXRpZ25v cmUKKysrIGIvdG9vbHMvLmdpdGlnbm9yZQpAQCAtMyw3ICszLDYgQEAgY25sX2NvbXB1dGVfd3Jw bGwKIGRwY2RfcmVnCiBoc3dfY29tcHV0ZV93cnBsbAogaWd0X3N0YXRzCi1pbnRlbF9hdWJkdW1w CiBpbnRlbF9hdWRpb19kdW1wCiBpbnRlbF9iYWNrbGlnaHQKIGludGVsX2Jpb3NfZHVtcGVyCmRp ZmYgLS1naXQgYS90b29scy9NYWtlZmlsZS5hbSBiL3Rvb2xzL01ha2VmaWxlLmFtCmluZGV4IGYw OWUwMmIyLi4yMDIyN2VhZSAxMDA2NDQKLS0tIGEvdG9vbHMvTWFrZWZpbGUuYW0KKysrIGIvdG9v bHMvTWFrZWZpbGUuYW0KQEAgLTI0LDE1ICsyNCw0IEBAIEFNX0NGTEFHUyA9ICQoREVCVUdfQ0ZM QUdTKSAkKERSTV9DRkxBR1MpICQoUENJQUNDRVNTX0NGTEFHUykgJChDV0FSTkZMQUdTKSBcCiBM REFERCA9ICQodG9wX2J1aWxkZGlyKS9saWIvbGliaW50ZWxfdG9vbHMubGEKIEFNX0xERkxBR1Mg PSAtV2wsLS1hcy1uZWVkZWQKIAotIyBhdWJkdW1wZXIKLQotbW9kdWxlX0xUTElCUkFSSUVTID0g aW50ZWxfYXViZHVtcC5sYQotbW9kdWxlZGlyID0gJChsaWJkaXIpCi1pbnRlbF9hdWJkdW1wX2xh X0xERkxBR1MgPSAtbW9kdWxlIC1hdm9pZC12ZXJzaW9uIC1uby11bmRlZmluZWQKLWludGVsX2F1 YmR1bXBfbGFfU09VUkNFUyA9IGF1YmR1bXAuYwotaW50ZWxfYXViZHVtcF9sYV9MSUJBREQgPSAk KHRvcF9idWlsZGRpcikvbGliL2xpYmludGVsX3Rvb2xzLmxhIC1sZGwKLQogaW50ZWxfZ3B1X3Rv cF9MREFERCA9ICQodG9wX2J1aWxkZGlyKS9saWIvbGliaWd0X3BlcmYubGEKLQotYmluX1NDUklQ VFMgPSBpbnRlbF9hdWJkdW1wCi1DTEVBTkZJTEVTID0gJChiaW5fU0NSSVBUUykKZGlmZiAtLWdp dCBhL3Rvb2xzL2F1YmR1bXAuYyBiL3Rvb2xzL2F1YmR1bXAuYwpkZWxldGVkIGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDBlMTk3MTIuLjAwMDAwMDAwCi0tLSBhL3Rvb2xzL2F1YmR1bXAuYworKysg L2Rldi9udWxsCkBAIC0xLDEzMTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCDCqSAyMDE1IElu dGVsIENvcnBvcmF0aW9uCi0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJl ZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKLSAqIGNvcHkgb2YgdGhpcyBz b2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJl IiksCi0gKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNs dWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCi0gKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9k aWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKLSAqIGFuZC9vciBz ZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9t IHRoZQotICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBm b2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBh bmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Ci0gKiBwYXJhZ3Jh cGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlv bnMgb2YgdGhlCi0gKiBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQg IkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1Q TElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJD SEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9O SU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKLSAqIFRIRSBBVVRIT1JTIE9SIENPUFlS SUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCi0g KiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9U SEVSV0lTRSwgQVJJU0lORwotICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBU SEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUwotICogSU4gVEhFIFNPRlRX QVJFLgotICovCi0KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2lu Y2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHN0ZGludC5oPgotI2luY2x1ZGUgPHN0ZGJvb2wu aD4KLSNpbmNsdWRlIDxzaWduYWwuaD4KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDxm Y250bC5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zeXNtYWNyb3Mu aD4KLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgotI2luY2x1 ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8c3lzL21tYW4uaD4K LSNpbmNsdWRlIDxkbGZjbi5oPgotI2luY2x1ZGUgPGk5MTVfZHJtLmg+Ci0KLSNpbmNsdWRlICJp bnRlbF9hdWIuaCIKLSNpbmNsdWRlICJpbnRlbF9jaGlwc2V0LmgiCi0KLSNpZm5kZWYgQVJSQVlf U0laRQotI2RlZmluZSBBUlJBWV9TSVpFKHgpIChzaXplb2YoeCkvc2l6ZW9mKCh4KVswXSkpCi0j ZW5kaWYKLQotI2lmbmRlZiBBTElHTgotI2RlZmluZSBBTElHTih4LCB5KSAoKCh4KSArICh5KS0x KSAmIH4oKHkpLTEpKQotI2VuZGlmCi0KLSNkZWZpbmUgbWluKGEsIGIpICh7CQkJXAotCXR5cGVv ZihhKSBfYSA9IChhKTsJCVwKLQl0eXBlb2YoYikgX2IgPSAoYik7CQlcCi0JX2EgPCBfYiA/IF9h IDogX2I7CQlcCi19KQotCi0jZGVmaW5lIEhXU19QR0FfUkNTVU5JVAkJMHgwMjA4MAotI2RlZmlu ZSBIV1NfUEdBX1ZDU1VOSVQwCTB4MTIwODAKLSNkZWZpbmUgSFdTX1BHQV9CQ1NVTklUCQkweDIy MDgwCi0KLSNkZWZpbmUgR0ZYX01PREVfUkNTVU5JVAkweDAyMjljCi0jZGVmaW5lIEdGWF9NT0RF X1ZDU1VOSVQwCTB4MTIyOWMKLSNkZWZpbmUgR0ZYX01PREVfQkNTVU5JVAkweDIyMjljCi0KLSNk ZWZpbmUgRVhFQ0xJU1RfU1VCTUlUUE9SVF9SQ1NVTklUCTB4MDIyMzAKLSNkZWZpbmUgRVhFQ0xJ U1RfU1VCTUlUUE9SVF9WQ1NVTklUMAkweDEyMjMwCi0jZGVmaW5lIEVYRUNMSVNUX1NVQk1JVFBP UlRfQkNTVU5JVAkweDIyMjMwCi0KLSNkZWZpbmUgRVhFQ0xJU1RfU1RBVFVTX1JDU1VOSVQJCTB4 MDIyMzQKLSNkZWZpbmUgRVhFQ0xJU1RfU1RBVFVTX1ZDU1VOSVQwCTB4MTIyMzQKLSNkZWZpbmUg RVhFQ0xJU1RfU1RBVFVTX0JDU1VOSVQJCTB4MjIyMzQKLQotI2RlZmluZSBFWEVDTElTVF9TUV9D T05URU5UUzBfUkNTVU5JVAkweDAyNTEwCi0jZGVmaW5lIEVYRUNMSVNUX1NRX0NPTlRFTlRTMF9W Q1NVTklUMAkweDEyNTEwCi0jZGVmaW5lIEVYRUNMSVNUX1NRX0NPTlRFTlRTMF9CQ1NVTklUCTB4 MjI1MTAKLQotI2RlZmluZSBFWEVDTElTVF9DT05UUk9MX1JDU1VOSVQJMHgwMjU1MAotI2RlZmlu ZSBFWEVDTElTVF9DT05UUk9MX1ZDU1VOSVQwCTB4MTI1NTAKLSNkZWZpbmUgRVhFQ0xJU1RfQ09O VFJPTF9CQ1NVTklUCTB4MjI1NTAKLQotI2RlZmluZSBNRU1PUllfTUFQX1NJWkUgKDY0IC8qIE1p QiAqLyAqIDEwMjQgKiAxMDI0KQotCi0jZGVmaW5lIFBURV9TSVpFIDQKLSNkZWZpbmUgR0VOOF9Q VEVfU0laRSA4Ci0KLSNkZWZpbmUgTlVNX1BUX0VOVFJJRVMgKEFMSUdOKE1FTU9SWV9NQVBfU0la RSwgNDA5NikgLyA0MDk2KQotI2RlZmluZSBQVF9TSVpFIEFMSUdOKE5VTV9QVF9FTlRSSUVTICog R0VOOF9QVEVfU0laRSwgNDA5NikKLQotI2RlZmluZSBSSU5HX1NJWkUJCQkoMSAqIDQwOTYpCi0j ZGVmaW5lIFBQSFdTUF9TSVpFCQkJKDEgKiA0MDk2KQotI2RlZmluZSBHRU4xMF9MUl9DT05URVhU X1JFTkRFUl9TSVpFCSgxOSAqIDQwOTYpCi0jZGVmaW5lIEdFTjhfTFJfQ09OVEVYVF9PVEhFUl9T SVpFCSgyICogNDA5NikKLQotI2RlZmluZSBTVEFUSUNfR0dUVF9NQVBfU1RBUlQgMAotCi0jZGVm aW5lIFJFTkRFUl9SSU5HX0FERFIgU1RBVElDX0dHVFRfTUFQX1NUQVJUCi0jZGVmaW5lIFJFTkRF Ul9DT05URVhUX0FERFIgKFJFTkRFUl9SSU5HX0FERFIgKyBSSU5HX1NJWkUpCi0KLSNkZWZpbmUg QkxJVFRFUl9SSU5HX0FERFIgKFJFTkRFUl9DT05URVhUX0FERFIgKyBQUEhXU1BfU0laRSArIEdF TjEwX0xSX0NPTlRFWFRfUkVOREVSX1NJWkUpCi0jZGVmaW5lIEJMSVRURVJfQ09OVEVYVF9BRERS IChCTElUVEVSX1JJTkdfQUREUiArIFJJTkdfU0laRSkKLQotI2RlZmluZSBWSURFT19SSU5HX0FE RFIgKEJMSVRURVJfQ09OVEVYVF9BRERSICsgUFBIV1NQX1NJWkUgKyBHRU44X0xSX0NPTlRFWFRf T1RIRVJfU0laRSkKLSNkZWZpbmUgVklERU9fQ09OVEVYVF9BRERSIChWSURFT19SSU5HX0FERFIg KyBSSU5HX1NJWkUpCi0KLSNkZWZpbmUgU1RBVElDX0dHVFRfTUFQX0VORCAoVklERU9fQ09OVEVY VF9BRERSICsgUFBIV1NQX1NJWkUgKyBHRU44X0xSX0NPTlRFWFRfT1RIRVJfU0laRSkKLSNkZWZp bmUgU1RBVElDX0dHVFRfTUFQX1NJWkUgKFNUQVRJQ19HR1RUX01BUF9FTkQgLSBTVEFUSUNfR0dU VF9NQVBfU1RBUlQpCi0KLSNkZWZpbmUgQ09OVEVYVF9GTEFHUyAoMHgyMjkpCS8qIE5vcm1hbCBQ cmlvcml0eSB8IEwzLUxMQyBDb2hlcmVuY3kgfAotCUxlZ2FjeSBDb250ZXh0IHdpdGggbm8gNjQg Yml0IFZBIHN1cHBvcnQgfCBWYWxpZCAqLwotCi0jZGVmaW5lIFJFTkRFUl9DT05URVhUX0RFU0NS SVBUT1IgICgodWludDY0X3QpMSA8PCAzMiB8IFJFTkRFUl9DT05URVhUX0FERFIgIHwgQ09OVEVY VF9GTEFHUykKLSNkZWZpbmUgQkxJVFRFUl9DT05URVhUX0RFU0NSSVBUT1IgKCh1aW50NjRfdCky IDw8IDMyIHwgQkxJVFRFUl9DT05URVhUX0FERFIgfCBDT05URVhUX0ZMQUdTKQotI2RlZmluZSBW SURFT19DT05URVhUX0RFU0NSSVBUT1IgICAoKHVpbnQ2NF90KTMgPDwgMzIgfCBWSURFT19DT05U RVhUX0FERFIgICB8IENPTlRFWFRfRkxBR1MpCi0KLXN0YXRpYyBjb25zdCB1aW50MzJfdCByZW5k ZXJfY29udGV4dF9pbml0W0dFTjEwX0xSX0NPTlRFWFRfUkVOREVSX1NJWkUgLwotCQkJCQkgIHNp emVvZih1aW50MzJfdCldID0gewotCTAgLyogTUlfTk9PUCAqLywKLQkweDExMDAxMDFCIC8qIE1J X0xPQURfUkVHSVNURVJfSU1NICovLAotCTB4MjI0NCAvKiBDT05URVhUX0NPTlRST0wgKi8sCQkw eDkwMDA5IC8qIEluaGliaXQgU3luY2hyb25vdXMgQ29udGV4dCBTd2l0Y2ggfCBFbmdpbmUgQ29u dGV4dCBSZXN0b3JlIEluaGliaXQgKi8sCi0JMHgyMDM0IC8qIFJJTkdfSEVBRCAqLywJCQkwLAot CTB4MjAzMCAvKiBSSU5HX1RBSUwgKi8sCQkJMCwKLQkweDIwMzggLyogUklOR19CVUZGRVJfU1RB UlQgKi8sCQlSRU5ERVJfUklOR19BRERSLAotCTB4MjAzQyAvKiBSSU5HX0JVRkZFUl9DT05UUk9M ICovLAkoUklOR19TSVpFIC0gNDA5NikgfCAxIC8qIEJ1ZmZlciBMZW5ndGggfCBSaW5nIEJ1ZmZl ciBFbmFibGUgKi8sCi0JMHgyMTY4IC8qIEJCX0hFQURfVSAqLywJCQkwLAotCTB4MjE0MCAvKiBC Ql9IRUFEX0wgKi8sCQkJMCwKLQkweDIxMTAgLyogQkJfU1RBVEUgKi8sCQkJMCwKLQkweDIxMUMg LyogU0VDT05EX0JCX0hFQURfVSAqLywJCTAsCi0JMHgyMTE0IC8qIFNFQ09ORF9CQl9IRUFEX0wg Ki8sCQkwLAotCTB4MjExOCAvKiBTRUNPTkRfQkJfU1RBVEUgKi8sCQkwLAotCTB4MjFDMCAvKiBC Ql9QRVJfQ1RYX1BUUiAqLywJCTAsCi0JMHgyMUM0IC8qIFJDU19JTkRJUkVDVF9DVFggKi8sCQkw LAotCTB4MjFDOCAvKiBSQ1NfSU5ESVJFQ1RfQ1RYX09GRlNFVCAqLywJMCwKLQkvKiBNSV9OT09Q ICovCi0JMCwgMCwKLQotCTAgLyogTUlfTk9PUCAqLywKLQkweDExMDAxMDExIC8qIE1JX0xPQURf UkVHSVNURVJfSU1NICovLAotCTB4MjNBOCAvKiBDVFhfVElNRVNUQU1QICovLAkwLAotCTB4MjI4 QyAvKiBQRFAzX1VEVyAqLywJCTAsCi0JMHgyMjg4IC8qIFBEUDNfTERXICovLAkJMCwKLQkweDIy ODQgLyogUERQMl9VRFcgKi8sCQkwLAotCTB4MjI4MCAvKiBQRFAyX0xEVyAqLywJCTAsCi0JMHgy MjdDIC8qIFBEUDFfVURXICovLAkJMCwKLQkweDIyNzggLyogUERQMV9MRFcgKi8sCQkwLAotCTB4 MjI3NCAvKiBQRFAwX1VEVyAqLywJCTAsCi0JMHgyMjcwIC8qIFBEUDBfTERXICovLAkJMCwKLQkv KiBNSV9OT09QICovCi0JMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKLQotCTAg LyogTUlfTk9PUCAqLywKLQkweDExMDAwMDAxIC8qIE1JX0xPQURfUkVHSVNURVJfSU1NICovLAot CTB4MjBDOCAvKiBSX1BXUl9DTEtfU1RBVEUgKi8sIDB4N0ZGRkZGRkYsCi0JMHgwNTAwMDAwMSAv KiBNSV9CQVRDSF9CVUZGRVJfRU5EICovCi19OwotCi1zdGF0aWMgY29uc3QgdWludDMyX3QgYmxp dHRlcl9jb250ZXh0X2luaXRbR0VOOF9MUl9DT05URVhUX09USEVSX1NJWkUgLwotCQkJCQkgICBz aXplb2YodWludDMyX3QpXSA9IHsKLQkwIC8qIE1JX05PT1AgKi8sCi0JMHgxMTAwMTAxNSAvKiBN SV9MT0FEX1JFR0lTVEVSX0lNTSAqLywKLQkweDIyMjQ0IC8qIENPTlRFWFRfQ09OVFJPTCAqLywJ CTB4OTAwMDkgLyogSW5oaWJpdCBTeW5jaHJvbm91cyBDb250ZXh0IFN3aXRjaCB8IEVuZ2luZSBD b250ZXh0IFJlc3RvcmUgSW5oaWJpdCAqLywKLQkweDIyMDM0IC8qIFJJTkdfSEVBRCAqLywJCTAs Ci0JMHgyMjAzMCAvKiBSSU5HX1RBSUwgKi8sCQkwLAotCTB4MjIwMzggLyogUklOR19CVUZGRVJf U1RBUlQgKi8sCUJMSVRURVJfUklOR19BRERSLAotCTB4MjIwM0MgLyogUklOR19CVUZGRVJfQ09O VFJPTCAqLywJKFJJTkdfU0laRSAtIDQwOTYpIHwgMSAvKiBCdWZmZXIgTGVuZ3RoIHwgUmluZyBC dWZmZXIgRW5hYmxlICovLAotCTB4MjIxNjggLyogQkJfSEVBRF9VICovLAkJMCwKLQkweDIyMTQw IC8qIEJCX0hFQURfTCAqLywJCTAsCi0JMHgyMjExMCAvKiBCQl9TVEFURSAqLywJCQkwLAotCTB4 MjIxMUMgLyogU0VDT05EX0JCX0hFQURfVSAqLywJCTAsCi0JMHgyMjExNCAvKiBTRUNPTkRfQkJf SEVBRF9MICovLAkJMCwKLQkweDIyMTE4IC8qIFNFQ09ORF9CQl9TVEFURSAqLywJCTAsCi0JLyog TUlfTk9PUCAqLwotCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCi0KLQkwIC8qIE1JX05PT1AgKi8s Ci0JMHgxMTAwMTAxMSwKLQkweDIyM0E4IC8qIENUWF9USU1FU1RBTVAgKi8sCTAsCi0JMHgyMjI4 QyAvKiBQRFAzX1VEVyAqLywJCTAsCi0JMHgyMjI4OCAvKiBQRFAzX0xEVyAqLywJCTAsCi0JMHgy MjI4NCAvKiBQRFAyX1VEVyAqLywJCTAsCi0JMHgyMjI4MCAvKiBQRFAyX0xEVyAqLywJCTAsCi0J MHgyMjI3QyAvKiBQRFAxX1VEVyAqLywJCTAsCi0JMHgyMjI3OCAvKiBQRFAxX0xEVyAqLywJCTAs Ci0JMHgyMjI3NCAvKiBQRFAwX1VEVyAqLywJCTAsCi0JMHgyMjI3MCAvKiBQRFAwX0xEVyAqLywJ CTAsCi0JLyogTUlfTk9PUCAqLwotCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs Ci0KLQkweDA1MDAwMDAxIC8qIE1JX0JBVENIX0JVRkZFUl9FTkQgKi8KLX07Ci0KLXN0YXRpYyBj b25zdCB1aW50MzJfdCB2aWRlb19jb250ZXh0X2luaXRbR0VOOF9MUl9DT05URVhUX09USEVSX1NJ WkUgLwotCQkJCQkgc2l6ZW9mKHVpbnQzMl90KV0gPSB7Ci0JMCAvKiBNSV9OT09QICovLAotCTB4 MTEwMDEwMTUgLyogTUlfTE9BRF9SRUdJU1RFUl9JTU0gKi8sCi0JMHgxQzI0NCAvKiBDT05URVhU X0NPTlRST0wgKi8sCQkweDkwMDA5IC8qIEluaGliaXQgU3luY2hyb25vdXMgQ29udGV4dCBTd2l0 Y2ggfCBFbmdpbmUgQ29udGV4dCBSZXN0b3JlIEluaGliaXQgKi8sCi0JMHgxQzAzNCAvKiBSSU5H X0hFQUQgKi8sCQkwLAotCTB4MUMwMzAgLyogUklOR19UQUlMICovLAkJMCwKLQkweDFDMDM4IC8q IFJJTkdfQlVGRkVSX1NUQVJUICovLAlWSURFT19SSU5HX0FERFIsCi0JMHgxQzAzQyAvKiBSSU5H X0JVRkZFUl9DT05UUk9MICovLAkoUklOR19TSVpFIC0gNDA5NikgfCAxIC8qIEJ1ZmZlciBMZW5n dGggfCBSaW5nIEJ1ZmZlciBFbmFibGUgKi8sCi0JMHgxQzE2OCAvKiBCQl9IRUFEX1UgKi8sCQkw LAotCTB4MUMxNDAgLyogQkJfSEVBRF9MICovLAkJMCwKLQkweDFDMTEwIC8qIEJCX1NUQVRFICov LAkJCTAsCi0JMHgxQzExQyAvKiBTRUNPTkRfQkJfSEVBRF9VICovLAkJMCwKLQkweDFDMTE0IC8q IFNFQ09ORF9CQl9IRUFEX0wgKi8sCQkwLAotCTB4MUMxMTggLyogU0VDT05EX0JCX1NUQVRFICov LAkJMCwKLQkvKiBNSV9OT09QICovCi0JMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKLQotCTAgLyog TUlfTk9PUCAqLywKLQkweDExMDAxMDExLAotCTB4MUMzQTggLyogQ1RYX1RJTUVTVEFNUCAqLywJ MCwKLQkweDFDMjhDIC8qIFBEUDNfVURXICovLAkJMCwKLQkweDFDMjg4IC8qIFBEUDNfTERXICov LAkJMCwKLQkweDFDMjg0IC8qIFBEUDJfVURXICovLAkJMCwKLQkweDFDMjgwIC8qIFBEUDJfTERX ICovLAkJMCwKLQkweDFDMjdDIC8qIFBEUDFfVURXICovLAkJMCwKLQkweDFDMjc4IC8qIFBEUDFf TERXICovLAkJMCwKLQkweDFDMjc0IC8qIFBEUDBfVURXICovLAkJMCwKLQkweDFDMjcwIC8qIFBE UDBfTERXICovLAkJMCwKLQkvKiBNSV9OT09QICovCi0JMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg MCwgMCwgMCwgMCwKLQotCTB4MDUwMDAwMDEgLyogTUlfQkFUQ0hfQlVGRkVSX0VORCAqLwotfTsK LQotc3RhdGljIGludCBjbG9zZV9pbml0X2hlbHBlcihpbnQgZmQpOwotc3RhdGljIGludCBpb2N0 bF9pbml0X2hlbHBlcihpbnQgZmQsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdCwgLi4uKTsKLQotc3Rh dGljIGludCAoKmxpYmNfY2xvc2UpKGludCBmZCkgPSBjbG9zZV9pbml0X2hlbHBlcjsKLXN0YXRp YyBpbnQgKCpsaWJjX2lvY3RsKShpbnQgZmQsIHVuc2lnbmVkIGxvbmcgcmVxdWVzdCwgLi4uKSA9 IGlvY3RsX2luaXRfaGVscGVyOwotCi1zdGF0aWMgaW50IGRybV9mZCA9IC0xOwotc3RhdGljIGNo YXIgKmZpbGVuYW1lID0gTlVMTDsKLXN0YXRpYyBGSUxFICpmaWxlc1syXSA9IHsgTlVMTCwgTlVM TCB9Owotc3RhdGljIGludCBnZW4gPSAwOwotc3RhdGljIGludCB2ZXJib3NlID0gMDsKLXN0YXRp YyBib29sIGRldmljZV9vdmVycmlkZTsKLXN0YXRpYyB1aW50MzJfdCBkZXZpY2U7Ci1zdGF0aWMg aW50IGFkZHJfYml0cyA9IDA7Ci0KLSNkZWZpbmUgTUFYX0JPX0NPVU5UIDY0ICogMTAyNAotCi1z dHJ1Y3QgYm8gewotCXVpbnQzMl90IHNpemU7Ci0JdWludDY0X3Qgb2Zmc2V0OwotCXZvaWQgKm1h cDsKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYm8gKmJvczsKLQotI2RlZmluZSBEUk1fTUFKT1IgMjI2 Ci0KLSNpZm5kZWYgRFJNX0k5MTVfR0VNX1VTRVJQVFIKLQotI2RlZmluZSBEUk1fSTkxNV9HRU1f VVNFUlBUUgkJMHgzMwotI2RlZmluZSBEUk1fSU9DVExfSTkxNV9HRU1fVVNFUlBUUglEUk1fSU9X UiAoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X0dFTV9VU0VSUFRSLCBzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX3VzZXJwdHIpCi0KLXN0cnVjdCBkcm1faTkxNV9nZW1fdXNlcnB0ciB7Ci0JX191NjQg dXNlcl9wdHI7Ci0JX191NjQgdXNlcl9zaXplOwotCV9fdTMyIGZsYWdzOwotI2RlZmluZSBJOTE1 X1VTRVJQVFJfUkVBRF9PTkxZIDB4MQotI2RlZmluZSBJOTE1X1VTRVJQVFJfVU5TWU5DSFJPTkla RUQgMHg4MDAwMDAwMAotCS8qKgotCSAqIFJldHVybmVkIGhhbmRsZSBmb3IgdGhlIG9iamVjdC4K LQkgKgotCSAqIE9iamVjdCBoYW5kbGVzIGFyZSBub256ZXJvLgotCSAqLwotCV9fdTMyIGhhbmRs ZTsKLX07Ci0KLSNlbmRpZgotCi0vKiBXZSBzZXQgYml0IDAgaW4gdGhlIG1hcCBwb2ludGVyIGZv ciB1c2VycHRyIEJPcyBzbyB3ZSBrbm93IG5vdCB0bwotICogbXVubWFwIHRoZW0gb24gRFJNX0lP Q1RMX0dFTV9DTE9TRS4KLSAqLwotI2RlZmluZSBVU0VSUFRSX0ZMQUcgMQotI2RlZmluZSBJU19V U0VSUFRSKHApICgodWludHB0cl90KSAocCkgJiBVU0VSUFRSX0ZMQUcpCi0jZGVmaW5lIEdFVF9Q VFIocCkgKCAodm9pZCAqKSAoKHVpbnRwdHJfdCkgcCAmIH4odWludHB0cl90KSAxKSApCi0KLSNp Zm5kZWYgSTkxNV9FWEVDX0JBVENIX0ZJUlNUCi0jZGVmaW5lIEk5MTVfRVhFQ19CQVRDSF9GSVJT VCAoMSA8PCAxOCkKLSNlbmRpZgotCi1zdGF0aWMgdm9pZCBfX2F0dHJpYnV0ZV9fICgoZm9ybWF0 KF9fcHJpbnRmX18sIDIsIDMpKSkKLWZhaWxfaWYoaW50IGNvbmQsIGNvbnN0IGNoYXIgKmZvcm1h dCwgLi4uKQotewotCXZhX2xpc3QgYXJnczsKLQotCWlmICghY29uZCkKLQkJcmV0dXJuOwotCi0J dmFfc3RhcnQoYXJncywgZm9ybWF0KTsKLQl2ZnByaW50ZihzdGRlcnIsIGZvcm1hdCwgYXJncyk7 Ci0JdmFfZW5kKGFyZ3MpOwotCi0JcmFpc2UoU0lHVFJBUCk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qg Ym8gKgotZ2V0X2JvKHVpbnQzMl90IGhhbmRsZSkKLXsKLQlzdHJ1Y3QgYm8gKmJvOwotCi0JZmFp bF9pZihoYW5kbGUgPj0gTUFYX0JPX0NPVU5ULCAiYm8gaGFuZGxlIHRvbyBsYXJnZVxuIik7Ci0J Ym8gPSAmYm9zW2hhbmRsZV07Ci0KLQlyZXR1cm4gYm87Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdWlu dDMyX3QKLWFsaWduX3UzMih1aW50MzJfdCB2LCB1aW50MzJfdCBhKQotewotCXJldHVybiAodiAr IGEgLSAxKSAmIH4oYSAtIDEpOwotfQotCi1zdGF0aWMgaW5saW5lIHVpbnQ2NF90Ci1hbGlnbl91 NjQodWludDY0X3QgdiwgdWludDY0X3QgYSkKLXsKLQlyZXR1cm4gKHYgKyBhIC0gMSkgJiB+KGEg LSAxKTsKLX0KLQotc3RhdGljIHZvaWQKLWR3b3JkX291dCh1aW50MzJfdCBkYXRhKQotewotCWZv ciAoaW50IGkgPSAwOyBpIDwgQVJSQVlfU0laRSAoZmlsZXMpOyBpKyspIHsKLQkJaWYgKGZpbGVz W2ldID09IE5VTEwpCi0JCQljb250aW51ZTsKLQotCQlmYWlsX2lmKGZ3cml0ZSgmZGF0YSwgMSwg NCwgZmlsZXNbaV0pID09IDAsCi0JCQkiV3JpdGluZyB0byBvdXRwdXQgZmFpbGVkXG4iKTsKLQl9 Ci19Ci0KLXN0YXRpYyB2b2lkCi1kYXRhX291dChjb25zdCB2b2lkICpkYXRhLCBzaXplX3Qgc2l6 ZSkKLXsKLQlpZiAoc2l6ZSA9PSAwKQotCQlyZXR1cm47Ci0KLQlmb3IgKGludCBpID0gMDsgaSA8 IEFSUkFZX1NJWkUgKGZpbGVzKTsgaSsrKSB7Ci0JCWlmIChmaWxlc1tpXSA9PSBOVUxMKQotCQkJ Y29udGludWU7Ci0KLQkJZmFpbF9pZihmd3JpdGUoZGF0YSwgMSwgc2l6ZSwgZmlsZXNbaV0pID09 IDAsCi0JCQkiV3JpdGluZyB0byBvdXRwdXQgZmFpbGVkXG4iKTsKLQl9Ci19Ci0KLXN0YXRpYyB1 aW50MzJfdAotZ3R0X3NpemUodm9pZCkKLXsKLQlyZXR1cm4gTlVNX1BUX0VOVFJJRVMgKiAoYWRk cl9iaXRzID4gMzIgPyBHRU44X1BURV9TSVpFIDogUFRFX1NJWkUpOwotfQotCi1zdGF0aWMgdm9p ZAotbWVtX3RyYWNlX21lbW9yeV93cml0ZV9oZWFkZXJfb3V0KHVpbnQ2NF90IGFkZHIsIHVpbnQz Ml90IGxlbiwKLQkJCQkgIHVpbnQzMl90IGFkZHJfc3BhY2UpCi17Ci0JdWludDMyX3QgZHdvcmRz ID0gQUxJR04obGVuLCBzaXplb2YodWludDMyX3QpKSAvIHNpemVvZih1aW50MzJfdCk7Ci0KLQlk d29yZF9vdXQoQ01EX01FTV9UUkFDRV9NRU1PUllfV1JJVEUgfCAoNSArIGR3b3JkcyAtIDEpKTsK LQlkd29yZF9vdXQoYWRkciAmIDB4RkZGRkZGRkYpOwkvKiBhZGRyIGxvICovCi0JZHdvcmRfb3V0 KGFkZHIgPj4gMzIpOwkvKiBhZGRyIGhpICovCi0JZHdvcmRfb3V0KGFkZHJfc3BhY2UpOwkvKiBn dHQgKi8KLQlkd29yZF9vdXQobGVuKTsKLX0KLQotc3RhdGljIHZvaWQKLXJlZ2lzdGVyX3dyaXRl X291dCh1aW50MzJfdCBhZGRyLCB1aW50MzJfdCB2YWx1ZSkKLXsKLQl1aW50MzJfdCBkd29yZHMg PSAxOwotCi0JZHdvcmRfb3V0KENNRF9NRU1fVFJBQ0VfUkVHSVNURVJfV1JJVEUgfCAoNSArIGR3 b3JkcyAtIDEpKTsKLQlkd29yZF9vdXQoYWRkcik7Ci0JZHdvcmRfb3V0KEFVQl9NRU1fVFJBQ0Vf UkVHSVNURVJfU0laRV9EV09SRCB8Ci0JCSAgQVVCX01FTV9UUkFDRV9SRUdJU1RFUl9TUEFDRV9N TUlPKTsKLQlkd29yZF9vdXQoMHhGRkZGRkZGRik7CS8qIG1hc2sgbG8gKi8KLQlkd29yZF9vdXQo MHgwMDAwMDAwMCk7CS8qIG1hc2sgaGkgKi8KLQlkd29yZF9vdXQodmFsdWUpOwotfQotCi1zdGF0 aWMgdm9pZAotZ2VuOF9lbWl0X2dndHRfcHRlX2Zvcl9yYW5nZSh1aW50NjRfdCBzdGFydCwgdWlu dDY0X3QgZW5kKQotewotCXVpbnQ2NF90IGVudHJ5X2FkZHI7Ci0JdWludDY0X3QgcGFnZV9udW07 Ci0JdWludDY0X3QgZW5kX2FsaWduZWQgPSBhbGlnbl91NjQoZW5kLCA0MDk2KTsKLQotCWlmIChz dGFydCA+PSBlbmQgfHwgZW5kID4gKDF1bGwgPDwgMzIpKQotCQlyZXR1cm47Ci0KLQllbnRyeV9h ZGRyID0gc3RhcnQgJiB+KDQwOTYgLSAxKTsKLQlkbyB7Ci0JCXVpbnQ2NF90IGxhc3RfcGFnZV9l bnRyeSwgbnVtX2VudHJpZXM7Ci0KLQkJcGFnZV9udW0gPSBlbnRyeV9hZGRyID4+IDIxOwotCQls YXN0X3BhZ2VfZW50cnkgPSBtaW4oKHBhZ2VfbnVtICsgMSkgPDwgMjEsIGVuZF9hbGlnbmVkKTsK LQkJbnVtX2VudHJpZXMgPSAobGFzdF9wYWdlX2VudHJ5IC0gZW50cnlfYWRkcikgPj4gMTI7Ci0J CW1lbV90cmFjZV9tZW1vcnlfd3JpdGVfaGVhZGVyX291dCgKLQkJCWVudHJ5X2FkZHIgPj4gOSwg bnVtX2VudHJpZXMgKiBHRU44X1BURV9TSVpFLAotCQkJQVVCX01FTV9UUkFDRV9NRU1PUllfQURE UkVTU19TUEFDRV9HR1RUX0VOVFJZKTsKLQkJd2hpbGUgKG51bV9lbnRyaWVzLS0gPiAwKSB7Ci0J CQlkd29yZF9vdXQoKGVudHJ5X2FkZHIgJiB+KDQwOTYgLSAxKSkgfAotCQkJICAgICAgICAgIDMg LyogcmVhZC93cml0ZSB8IHByZXNlbnQgKi8pOwotCQkJZHdvcmRfb3V0KGVudHJ5X2FkZHIgPj4g MzIpOwotCQkJZW50cnlfYWRkciArPSA0MDk2OwotCQl9Ci0JfSB3aGlsZSAoZW50cnlfYWRkciA8 IGVuZCk7Ci19Ci0KLS8qKgotICogU2V0cyBiaXRzIGBzdGFydGAgdGhyb3VnaCBgZW5kYCAtIDEg aW4gdGhlIGJpdG1hcCBhcnJheS4KLSAqLwotc3RhdGljIHZvaWQKLXNldF9iaXRtYXBfcmFuZ2Uo dWludDMyX3QgKmJpdG1hcCwgdWludDMyX3Qgc3RhcnQsIHVpbnQzMl90IGVuZCkKLXsKLQl1aW50 MzJfdCBwb3MgPSBzdGFydDsKLQl3aGlsZSAocG9zIDwgZW5kKSB7Ci0JCWNvbnN0IHVpbnQzMl90 IGJpdCA9IDEgPDwgKHBvcyAmIDB4MWYpOwotCQlpZiAoYml0ID09IDEgJiYgKGVuZCAtIHBvcykg PiAzMikgewotCQkJYml0bWFwW3BvcyA+PiA1XSA9IDB4ZmZmZmZmZmY7Ci0JCQlwb3MgKz0gMzI7 Ci0JCX0gZWxzZSB7Ci0JCQliaXRtYXBbcG9zID4+IDVdIHw9IGJpdDsKLQkJCXBvcysrOwotCQl9 Ci0JfQotfQotCi0vKioKLSAqIEZpbmRzIHRoZSBuZXh0IGBzZXRgIChvciBjbGVhcikgYml0IGlu IHRoZSBiaXRtYXAgYXJyYXkuCi0gKgotICogVGhlIHNlYXJjaCBzdGFydHMgYXQgYCpzdGFydGAg YW5kIG9ubHkgY2hlY2tzIHVudGlsIGBlbmRgIC0gMS4KLSAqCi0gKiBJZiBmb3VuZCwgcmV0dXJu cyB0cnVlLCBhbmQgdGhlIGZvdW5kIGJpdCBpbmRleCBpbiBgKnN0YXJ0YC4KLSAqLwotc3RhdGlj IGJvb2wKLWZpbmRfYml0bWFwX2JpdCh1aW50MzJfdCAqYml0bWFwLCBib29sIHNldCwgdWludDMy X3QgKnN0YXJ0LCB1aW50MzJfdCBlbmQpCi17Ci0JdWludDMyX3QgcG9zID0gKnN0YXJ0OwotCWNv bnN0IHVpbnQzMl90IG5lZ19kdyA9IHNldCA/IDAgOiAtMTsKLQl3aGlsZSAocG9zIDwgZW5kKSB7 Ci0JCWNvbnN0IHVpbnQzMl90IGR3ID0gYml0bWFwW3BvcyA+PiA1XTsKLQkJY29uc3QgdWludDMy X3QgYml0ID0gMSA8PCAocG9zICYgMHgxZik7Ci0JCWlmICghIShkdyAmIGJpdCkgPT0gc2V0KSB7 Ci0JCQkqc3RhcnQgPSBwb3M7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfSBlbHNlIGlmIChiaXQgPT0g MSAmJiBkdyA9PSBuZWdfZHcpCi0JCQlwb3MgKz0gMzI7Ci0JCWVsc2UKLQkJCXBvcysrOwotCX0K LQlyZXR1cm4gZmFsc2U7Ci19Ci0KLS8qKgotICogRmluZHMgYSByYW5nZSBvZiBjbGVhciBiaXRz IHdpdGhpbiB0aGUgYml0bWFwIGFycmF5LgotICoKLSAqIFRoZSBzZWFyY2ggc3RhcnRzIGF0IGAq c3RhcnRgIGFuZCBvbmx5IGNoZWNrcyB1bnRpbCBgKmVuZGAgLSAxLgotICoKLSAqIElmIGZvdW5k LCByZXR1cm5zIHRydWUsIGFuZCBgKnN0YXJ0YCBhbmQgYCplbmRgIGFyZSBzZXQgZm9yIHRoZQot ICogcmFuZ2Ugb2YgY2xlYXIgYml0cy4KLSAqLwotc3RhdGljIGJvb2wKLWZpbmRfYml0bWFwX2Ns ZWFyX2JpdF9yYW5nZSh1aW50MzJfdCAqYml0bWFwLCB1aW50MzJfdCAqc3RhcnQsIHVpbnQzMl90 ICplbmQpCi17Ci0JaWYgKGZpbmRfYml0bWFwX2JpdChiaXRtYXAsIGZhbHNlLCBzdGFydCwgKmVu ZCkpIHsKLQkJdWludDMyX3QgZm91bmRfZW5kID0gKnN0YXJ0OwotCQlpZiAoZmluZF9iaXRtYXBf Yml0KGJpdG1hcCwgdHJ1ZSwgJmZvdW5kX2VuZCwgKmVuZCkpCi0JCQkqZW5kID0gZm91bmRfZW5k OwotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0JcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgdm9pZAot Z2VuOF9tYXBfZ2d0dF9yYW5nZSh1aW50NjRfdCBzdGFydCwgdWludDY0X3QgZW5kKQotewotCXVp bnQzMl90IHBvczEsIHBvczIsIGVuZF9wb3M7Ci0Jc3RhdGljIHVpbnQzMl90ICpiaXRtYXAgPSBO VUxMOwotCWlmIChiaXRtYXAgPT0gTlVMTCkgewotCQkvKiA0R2lCICgzMi1iaXRzKSBvZiA0S2lC IHBhZ2VzICgxMi1iaXRzKSBpbiBkd29yZHMgKDUtYml0cykgKi8KLQkJYml0bWFwID0gY2FsbG9j KDEgPDwgKDMyIC0gMTIgLSA1KSwgc2l6ZW9mKCpiaXRtYXApKTsKLQkJaWYgKGJpdG1hcCA9PSBO VUxMKQotCQkJcmV0dXJuOwotCX0KLQotCXBvczEgPSBzdGFydCA+PiAxMjsKLQllbmRfcG9zID0g KGVuZCArIDQwOTYgLSAxKSA+PiAxMjsKLQl3aGlsZSAocG9zMSA8IGVuZF9wb3MpIHsKLQkJcG9z MiA9IGVuZF9wb3M7Ci0JCWlmICghZmluZF9iaXRtYXBfY2xlYXJfYml0X3JhbmdlKGJpdG1hcCwg JnBvczEsICZwb3MyKSkKLQkJCWJyZWFrOwotCi0JCWlmICh2ZXJib3NlKQotCQkJcHJpbnRmKCJN QVBQSU5HIDB4JTA4IlBSSXg2NCItMHglMDgiUFJJeDY0IlxuIiwKLQkJCSAgICAgICAodWludDY0 X3QpcG9zMSA8PCAxMiwgKHVpbnQ2NF90KXBvczIgPDwgMTIpOwotCQlnZW44X2VtaXRfZ2d0dF9w dGVfZm9yX3JhbmdlKCh1aW50NjRfdClwb3MxIDw8IDEyLAotCQkgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICh1aW50NjRfdClwb3MyIDw8IDEyKTsKLQkJc2V0X2JpdG1hcF9yYW5nZShiaXRt YXAsICh1aW50NjRfdClwb3MxLCAodWludDY0X3QpcG9zMik7Ci0JCXBvczEgPSBwb3MyOwotCX0K LX0KLQotc3RhdGljIHZvaWQKLWdlbjhfbWFwX2Jhc2Vfc2l6ZSh1aW50NjRfdCBiYXNlLCB1aW50 NjRfdCBzaXplKQotewotCWdlbjhfbWFwX2dndHRfcmFuZ2UoYmFzZSwgYmFzZSArIHNpemUpOwot fQotCi1zdGF0aWMgdm9pZAotZ2VuMTBfd3JpdGVfaGVhZGVyKHZvaWQpCi17Ci0JY2hhciBhcHBf bmFtZVs4ICogNF07Ci0JaW50IGFwcF9uYW1lX2xlbiwgZHdvcmRzOwotCi0JYXBwX25hbWVfbGVu ID0KLQkgICAgc25wcmludGYoYXBwX25hbWUsIHNpemVvZihhcHBfbmFtZSksICJQQ0ktSUQ9MHgl WCAlcyIsIGRldmljZSwKLQkJICAgICBwcm9ncmFtX2ludm9jYXRpb25fc2hvcnRfbmFtZSk7Ci0J YXBwX25hbWVfbGVuID0gQUxJR04oYXBwX25hbWVfbGVuLCBzaXplb2YodWludDMyX3QpKTsKLQot CWR3b3JkcyA9IDUgKyBhcHBfbmFtZV9sZW4gLyBzaXplb2YodWludDMyX3QpOwotCWR3b3JkX291 dChDTURfTUVNX1RSQUNFX1ZFUlNJT04gfCAoZHdvcmRzIC0gMSkpOwotCWR3b3JkX291dChBVUJf TUVNX1RSQUNFX1ZFUlNJT05fRklMRV9WRVJTSU9OKTsKLQlkd29yZF9vdXQoQVVCX01FTV9UUkFD RV9WRVJTSU9OX0RFVklDRV9DTkwgfAotCQkgIEFVQl9NRU1fVFJBQ0VfVkVSU0lPTl9NRVRIT0Rf UEhZKTsKLQlkd29yZF9vdXQoMCk7CQkvKiB2ZXJzaW9uICovCi0JZHdvcmRfb3V0KDApOwkJLyog dmVyc2lvbiAqLwotCWRhdGFfb3V0KGFwcF9uYW1lLCBhcHBfbmFtZV9sZW4pOwotCi0JLyogUkVO REVSX1JJTkcgKi8KLQlnZW44X21hcF9iYXNlX3NpemUoUkVOREVSX1JJTkdfQUREUiwgUklOR19T SVpFKTsKLQltZW1fdHJhY2VfbWVtb3J5X3dyaXRlX2hlYWRlcl9vdXQoUkVOREVSX1JJTkdfQURE UiwgUklOR19TSVpFLAotCQkJCQkgIEFVQl9NRU1fVFJBQ0VfTUVNT1JZX0FERFJFU1NfU1BBQ0Vf TE9DQUwpOwotCWZvciAodWludDMyX3QgaSA9IDA7IGkgPCBSSU5HX1NJWkU7IGkgKz0gc2l6ZW9m KHVpbnQzMl90KSkKLQkJZHdvcmRfb3V0KDApOwotCi0JLyogUkVOREVSX1BQSFdTUCAqLwotCWdl bjhfbWFwX2Jhc2Vfc2l6ZShSRU5ERVJfQ09OVEVYVF9BRERSLAotCSAgICAgICAgICAgICAgICAg ICBQUEhXU1BfU0laRSArIHNpemVvZihyZW5kZXJfY29udGV4dF9pbml0KSk7Ci0JbWVtX3RyYWNl X21lbW9yeV93cml0ZV9oZWFkZXJfb3V0KFJFTkRFUl9DT05URVhUX0FERFIsCi0JCQkJCSAgUFBI V1NQX1NJWkUgKwotCQkJCQkgIHNpemVvZihyZW5kZXJfY29udGV4dF9pbml0KSwKLQkJCQkJICBB VUJfTUVNX1RSQUNFX01FTU9SWV9BRERSRVNTX1NQQUNFX0xPQ0FMKTsKLQlmb3IgKHVpbnQzMl90 IGkgPSAwOyBpIDwgUFBIV1NQX1NJWkU7IGkgKz0gc2l6ZW9mKHVpbnQzMl90KSkKLQkJZHdvcmRf b3V0KDApOwotCi0JLyogUkVOREVSX0NPTlRFWFQgKi8KLQlkYXRhX291dChyZW5kZXJfY29udGV4 dF9pbml0LCBzaXplb2YocmVuZGVyX2NvbnRleHRfaW5pdCkpOwotCi0JLyogQkxJVFRFUl9SSU5H ICovCi0JZ2VuOF9tYXBfYmFzZV9zaXplKEJMSVRURVJfUklOR19BRERSLCBSSU5HX1NJWkUpOwot CW1lbV90cmFjZV9tZW1vcnlfd3JpdGVfaGVhZGVyX291dChCTElUVEVSX1JJTkdfQUREUiwgUklO R19TSVpFLAotCQkJCQkgIEFVQl9NRU1fVFJBQ0VfTUVNT1JZX0FERFJFU1NfU1BBQ0VfTE9DQUwp OwotCWZvciAodWludDMyX3QgaSA9IDA7IGkgPCBSSU5HX1NJWkU7IGkgKz0gc2l6ZW9mKHVpbnQz Ml90KSkKLQkJZHdvcmRfb3V0KDApOwotCi0JLyogQkxJVFRFUl9QUEhXU1AgKi8KLQlnZW44X21h cF9iYXNlX3NpemUoQkxJVFRFUl9DT05URVhUX0FERFIsCi0JICAgICAgICAgICAgICAgICAgIFBQ SFdTUF9TSVpFICsgc2l6ZW9mKGJsaXR0ZXJfY29udGV4dF9pbml0KSk7Ci0JbWVtX3RyYWNlX21l bW9yeV93cml0ZV9oZWFkZXJfb3V0KEJMSVRURVJfQ09OVEVYVF9BRERSLAotCQkJCQkgIFBQSFdT UF9TSVpFICsKLQkJCQkJICBzaXplb2YoYmxpdHRlcl9jb250ZXh0X2luaXQpLAotCQkJCQkgIEFV Ql9NRU1fVFJBQ0VfTUVNT1JZX0FERFJFU1NfU1BBQ0VfTE9DQUwpOwotCWZvciAodWludDMyX3Qg aSA9IDA7IGkgPCBQUEhXU1BfU0laRTsgaSArPSBzaXplb2YodWludDMyX3QpKQotCQlkd29yZF9v dXQoMCk7Ci0KLQkvKiBCTElUVEVSX0NPTlRFWFQgKi8KLQlkYXRhX291dChibGl0dGVyX2NvbnRl eHRfaW5pdCwgc2l6ZW9mKGJsaXR0ZXJfY29udGV4dF9pbml0KSk7Ci0KLQkvKiBWSURFT19SSU5H ICovCi0JZ2VuOF9tYXBfYmFzZV9zaXplKFZJREVPX1JJTkdfQUREUiwgUklOR19TSVpFKTsKLQlt ZW1fdHJhY2VfbWVtb3J5X3dyaXRlX2hlYWRlcl9vdXQoVklERU9fUklOR19BRERSLCBSSU5HX1NJ WkUsCi0JCQkJCSAgQVVCX01FTV9UUkFDRV9NRU1PUllfQUREUkVTU19TUEFDRV9MT0NBTCk7Ci0J Zm9yICh1aW50MzJfdCBpID0gMDsgaSA8IFJJTkdfU0laRTsgaSArPSBzaXplb2YodWludDMyX3Qp KQotCQlkd29yZF9vdXQoMCk7Ci0KLQkvKiBWSURFT19QUEhXU1AgKi8KLQlnZW44X21hcF9iYXNl X3NpemUoVklERU9fQ09OVEVYVF9BRERSLAotCSAgICAgICAgICAgICAgICAgICBQUEhXU1BfU0la RSArIHNpemVvZih2aWRlb19jb250ZXh0X2luaXQpKTsKLQltZW1fdHJhY2VfbWVtb3J5X3dyaXRl X2hlYWRlcl9vdXQoVklERU9fQ09OVEVYVF9BRERSLAotCQkJCQkgIFBQSFdTUF9TSVpFICsKLQkJ CQkJICBzaXplb2YodmlkZW9fY29udGV4dF9pbml0KSwKLQkJCQkJICBBVUJfTUVNX1RSQUNFX01F TU9SWV9BRERSRVNTX1NQQUNFX0xPQ0FMKTsKLQlmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgUFBI V1NQX1NJWkU7IGkgKz0gc2l6ZW9mKHVpbnQzMl90KSkKLQkJZHdvcmRfb3V0KDApOwotCi0JLyog VklERU9fQ09OVEVYVCAqLwotCWRhdGFfb3V0KHZpZGVvX2NvbnRleHRfaW5pdCwgc2l6ZW9mKHZp ZGVvX2NvbnRleHRfaW5pdCkpOwotCi0JcmVnaXN0ZXJfd3JpdGVfb3V0KEhXU19QR0FfUkNTVU5J VCwgUkVOREVSX0NPTlRFWFRfQUREUik7Ci0JcmVnaXN0ZXJfd3JpdGVfb3V0KEhXU19QR0FfVkNT VU5JVDAsIFZJREVPX0NPTlRFWFRfQUREUik7Ci0JcmVnaXN0ZXJfd3JpdGVfb3V0KEhXU19QR0Ff QkNTVU5JVCwgQkxJVFRFUl9DT05URVhUX0FERFIpOwotCi0JcmVnaXN0ZXJfd3JpdGVfb3V0KEdG WF9NT0RFX1JDU1VOSVQsIDB4ODAwMDgwMDAgLyogZXhlY2xpc3QgZW5hYmxlICovKTsKLQlyZWdp c3Rlcl93cml0ZV9vdXQoR0ZYX01PREVfVkNTVU5JVDAsIDB4ODAwMDgwMDAgLyogZXhlY2xpc3Qg ZW5hYmxlICovKTsKLQlyZWdpc3Rlcl93cml0ZV9vdXQoR0ZYX01PREVfQkNTVU5JVCwgMHg4MDAw ODAwMCAvKiBleGVjbGlzdCBlbmFibGUgKi8pOwotfQotCi1zdGF0aWMgdm9pZCB3cml0ZV9oZWFk ZXIodm9pZCkKLXsKLQljaGFyIGFwcF9uYW1lWzggKiA0XTsKLQljaGFyIGNvbW1lbnRbMTZdOwot CWludCBjb21tZW50X2xlbiwgY29tbWVudF9kd29yZHMsIGR3b3JkczsKLQl1aW50MzJfdCBlbnRy eSA9IDB4MjAwMDAzOwotCi0JY29tbWVudF9sZW4gPSBzbnByaW50Zihjb21tZW50LCBzaXplb2Yo Y29tbWVudCksICJQQ0ktSUQ9MHgleCIsIGRldmljZSk7Ci0JY29tbWVudF9kd29yZHMgPSAoKGNv bW1lbnRfbGVuICsgMykgLyA0KTsKLQotCS8qIFN0YXJ0IHdpdGggYSAocmVxdWlyZWQpIHZlcnNp b24gcGFja2V0LiAqLwotCWR3b3JkcyA9IDEzICsgY29tbWVudF9kd29yZHM7Ci0JZHdvcmRfb3V0 KENNRF9BVUJfSEVBREVSIHwgKGR3b3JkcyAtIDIpKTsKLQlkd29yZF9vdXQoKDQgPDwgQVVCX0hF QURFUl9NQUpPUl9TSElGVCkgfAotCQkgICgwIDw8IEFVQl9IRUFERVJfTUlOT1JfU0hJRlQpKTsK LQotCS8qIE5leHQgY29tZXMgYSAzMi1ieXRlIGFwcGxpY2F0aW9uIG5hbWUuICovCi0Jc3RybmNw eShhcHBfbmFtZSwgcHJvZ3JhbV9pbnZvY2F0aW9uX3Nob3J0X25hbWUsIHNpemVvZihhcHBfbmFt ZSkpOwotCWFwcF9uYW1lW3NpemVvZihhcHBfbmFtZSkgLSAxXSA9IDA7Ci0JZGF0YV9vdXQoYXBw X25hbWUsIHNpemVvZihhcHBfbmFtZSkpOwotCi0JZHdvcmRfb3V0KDApOyAvKiB0aW1lc3RhbXAg Ki8KLQlkd29yZF9vdXQoMCk7IC8qIHRpbWVzdGFtcCAqLwotCWR3b3JkX291dChjb21tZW50X2xl bik7Ci0JZGF0YV9vdXQoY29tbWVudCwgY29tbWVudF9kd29yZHMgKiA0KTsKLQotCS8qIFNldCB1 cCB0aGUgR1RULiBUaGUgbWF4IHdlIGNhbiBoYW5kbGUgaXMgNjRNICovCi0JZHdvcmRfb3V0KENN RF9BVUJfVFJBQ0VfSEVBREVSX0JMT0NLIHwgKChhZGRyX2JpdHMgPiAzMiA/IDYgOiA1KSAtIDIp KTsKLQlkd29yZF9vdXQoQVVCX1RSQUNFX01FTVRZUEVfR1RUX0VOVFJZIHwKLQkJICBBVUJfVFJB Q0VfVFlQRV9OT1RZUEUgfCBBVUJfVFJBQ0VfT1BfREFUQV9XUklURSk7Ci0JZHdvcmRfb3V0KDAp OyAvKiBzdWJ0eXBlICovCi0JZHdvcmRfb3V0KDApOyAvKiBvZmZzZXQgKi8KLQlkd29yZF9vdXQo Z3R0X3NpemUoKSk7IC8qIHNpemUgKi8KLQlpZiAoYWRkcl9iaXRzID4gMzIpCi0JCWR3b3JkX291 dCgwKTsKLQlmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgTlVNX1BUX0VOVFJJRVM7IGkrKykgewot CQlkd29yZF9vdXQoZW50cnkgKyAweDEwMDAgKiBpKTsKLQkJaWYgKGFkZHJfYml0cyA+IDMyKQot CQkJZHdvcmRfb3V0KDApOwotCX0KLX0KLQotLyoqCi0gKiBCcmVhayB1cCBsYXJnZSBvYmplY3Rz IGludG8gbXVsdGlwbGUgd3JpdGVzLiAgT3RoZXJ3aXNlIGEgMTI4a2IgVkJPCi0gKiB3b3VsZCBv dmVyZmxvdyB0aGUgMTYgYml0cyBvZiBzaXplIGZpZWxkIGluIHRoZSBwYWNrZXQgaGVhZGVyIGFu ZAotICogZXZlcnl0aGluZyBnb2VzIGJhZGx5IGFmdGVyIHRoYXQuCi0gKi8KLXN0YXRpYyB2b2lk Ci1hdWJfd3JpdGVfdHJhY2VfYmxvY2sodWludDMyX3QgdHlwZSwgdm9pZCAqdmlydHVhbCwgdWlu dDMyX3Qgc2l6ZSwgdWludDY0X3QgZ3R0X29mZnNldCkKLXsKLQl1aW50MzJfdCBibG9ja19zaXpl OwotCXVpbnQzMl90IHN1YnR5cGUgPSAwOwotCXN0YXRpYyBjb25zdCBjaGFyIG51bGxfYmxvY2tb OCAqIDQwOTZdOwotCi0JZm9yICh1aW50MzJfdCBvZmZzZXQgPSAwOyBvZmZzZXQgPCBzaXplOyBv ZmZzZXQgKz0gYmxvY2tfc2l6ZSkgewotCQlibG9ja19zaXplID0gc2l6ZSAtIG9mZnNldDsKLQot CQlpZiAoYmxvY2tfc2l6ZSA+IDggKiA0MDk2KQotCQkJYmxvY2tfc2l6ZSA9IDggKiA0MDk2Owot Ci0JCWlmIChnZW4gPj0gMTApIHsKLQkJCW1lbV90cmFjZV9tZW1vcnlfd3JpdGVfaGVhZGVyX291 dChndHRfb2Zmc2V0ICsgb2Zmc2V0LAotCQkJCQkJCSAgYmxvY2tfc2l6ZSwKLQkJCQkJCQkgIEFV Ql9NRU1fVFJBQ0VfTUVNT1JZX0FERFJFU1NfU1BBQ0VfTE9DQUwpOwotCQl9IGVsc2UgewotCQkJ ZHdvcmRfb3V0KENNRF9BVUJfVFJBQ0VfSEVBREVSX0JMT0NLIHwKLQkJCQkgICgoYWRkcl9iaXRz ID4gMzIgPyA2IDogNSkgLSAyKSk7Ci0JCQlkd29yZF9vdXQoQVVCX1RSQUNFX01FTVRZUEVfR1RU IHwKLQkJCQkgIHR5cGUgfCBBVUJfVFJBQ0VfT1BfREFUQV9XUklURSk7Ci0JCQlkd29yZF9vdXQo c3VidHlwZSk7Ci0JCQlkd29yZF9vdXQoZ3R0X29mZnNldCArIG9mZnNldCk7Ci0JCQlkd29yZF9v dXQoYWxpZ25fdTMyKGJsb2NrX3NpemUsIDQpKTsKLQkJCWlmIChhZGRyX2JpdHMgPiAzMikKLQkJ CQlkd29yZF9vdXQoKGd0dF9vZmZzZXQgKyBvZmZzZXQpID4+IDMyKTsKLQkJfQotCi0JCWlmICh2 aXJ0dWFsKQotCQkJZGF0YV9vdXQoKChjaGFyICopIEdFVF9QVFIodmlydHVhbCkpICsgb2Zmc2V0 LCBibG9ja19zaXplKTsKLQkJZWxzZQotCQkJZGF0YV9vdXQobnVsbF9ibG9jaywgYmxvY2tfc2l6 ZSk7Ci0KLQkJLyogUGFkIHRvIGEgbXVsdGlwbGUgb2YgNCBieXRlcy4gKi8KLQkJZGF0YV9vdXQo bnVsbF9ibG9jaywgLWJsb2NrX3NpemUgJiAzKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkCi13cml0 ZV9yZWxvYyh2b2lkICpwLCB1aW50NjRfdCB2KQotewotCWlmIChhZGRyX2JpdHMgPiAzMikgewot CQkvKiBGcm9tIHRoZSBCcm9hZHdlbGwgUFJNIFZvbC4gMmEsCi0JCSAqIE1JX0xPQURfUkVHSVNU RVJfTUVNOjpNZW1vcnlBZGRyZXNzOgotCQkgKgotCQkgKgkiVGhpcyBmaWVsZCBzcGVjaWZpZXMg dGhlIGFkZHJlc3Mgb2YgdGhlIG1lbW9yeQotCQkgKglsb2NhdGlvbiB3aGVyZSB0aGUgcmVnaXN0 ZXIgdmFsdWUgc3BlY2lmaWVkIGluIHRoZQotCQkgKglEV29yZCBhYm92ZSB3aWxsIHJlYWQgZnJv bS4gIFRoZSBhZGRyZXNzIHNwZWNpZmllcwotCQkgKgl0aGUgRFdvcmQgbG9jYXRpb24gb2YgdGhl IGRhdGEuIFJhbmdlID0KLQkJICoJR3JhcGhpY3NWaXJ0dWFsQWRkcmVzc1s2MzoyXSBmb3IgYSBE V29yZCByZWdpc3RlcgotCQkgKglHcmFwaGljc0FkZHJlc3MgWzYzOjQ4XSBhcmUgaWdub3JlZCBi eSB0aGUgSFcgYW5kCi0JCSAqCWFzc3VtZWQgdG8gYmUgaW4gY29ycmVjdCBjYW5vbmljYWwgZm9y bSBbNjM6NDhdID09Ci0JCSAqCVs0N10uIgotCQkgKgotCQkgKiBJbiBwcmFjdGljZSwgdGhpcyB3 aWxsIGFsd2F5cyBtZWFuIHRoZSB0b3AgYml0cyBhcmUgemVybwotCQkgKiBiZWNhdXNlIG9mIHRo ZSBHVFQgc2l6ZSBsaW1pdGF0aW9uIG9mIHRoZSBhdWJkdW1wIHRvb2wuCi0JCSAqLwotCQljb25z dCBpbnQgc2hpZnQgPSA2MyAtIDQ3OwotCQkqKHVpbnQ2NF90ICopcCA9ICgoKGludDY0X3Qpdikg PDwgc2hpZnQpID4+IHNoaWZ0OwotCX0gZWxzZSB7Ci0JCSoodWludDMyX3QgKilwID0gdjsKLQl9 Ci19Ci0KLXN0YXRpYyB2b2lkCi1hdWJfZHVtcF9leGVjbGlzdCh1aW50NjRfdCBiYXRjaF9vZmZz ZXQsIGludCByaW5nX2ZsYWcpCi17Ci0JdWludDMyX3QgcmluZ19hZGRyOwotCXVpbnQ2NF90IGRl c2NyaXB0b3I7Ci0JdWludDMyX3QgZWxzcF9yZWc7Ci0JdWludDMyX3QgZWxzcV9yZWc7Ci0JdWlu dDMyX3Qgc3RhdHVzX3JlZzsKLQl1aW50MzJfdCBjb250cm9sX3JlZzsKLQotCXN3aXRjaCAocmlu Z19mbGFnKSB7Ci0JY2FzZSBJOTE1X0VYRUNfREVGQVVMVDoKLQljYXNlIEk5MTVfRVhFQ19SRU5E RVI6Ci0JCXJpbmdfYWRkciA9IFJFTkRFUl9SSU5HX0FERFI7Ci0JCWRlc2NyaXB0b3IgPSBSRU5E RVJfQ09OVEVYVF9ERVNDUklQVE9SOwotCQllbHNwX3JlZyA9IEVYRUNMSVNUX1NVQk1JVFBPUlRf UkNTVU5JVDsKLQkJZWxzcV9yZWcgPSBFWEVDTElTVF9TUV9DT05URU5UUzBfUkNTVU5JVDsKLQkJ c3RhdHVzX3JlZyA9IEVYRUNMSVNUX1NUQVRVU19SQ1NVTklUOwotCQljb250cm9sX3JlZyA9IEVY RUNMSVNUX0NPTlRST0xfUkNTVU5JVDsKLQkJYnJlYWs7Ci0JY2FzZSBJOTE1X0VYRUNfQlNEOgot CQlyaW5nX2FkZHIgPSBWSURFT19SSU5HX0FERFI7Ci0JCWRlc2NyaXB0b3IgPSBWSURFT19DT05U RVhUX0RFU0NSSVBUT1I7Ci0JCWVsc3BfcmVnID0gRVhFQ0xJU1RfU1VCTUlUUE9SVF9WQ1NVTklU MDsKLQkJZWxzcV9yZWcgPSBFWEVDTElTVF9TUV9DT05URU5UUzBfVkNTVU5JVDA7Ci0JCXN0YXR1 c19yZWcgPSBFWEVDTElTVF9TVEFUVVNfVkNTVU5JVDA7Ci0JCWNvbnRyb2xfcmVnID0gRVhFQ0xJ U1RfQ09OVFJPTF9WQ1NVTklUMDsKLQkJYnJlYWs7Ci0JY2FzZSBJOTE1X0VYRUNfQkxUOgotCQly aW5nX2FkZHIgPSBCTElUVEVSX1JJTkdfQUREUjsKLQkJZGVzY3JpcHRvciA9IEJMSVRURVJfQ09O VEVYVF9ERVNDUklQVE9SOwotCQllbHNwX3JlZyA9IEVYRUNMSVNUX1NVQk1JVFBPUlRfQkNTVU5J VDsKLQkJZWxzcV9yZWcgPSBFWEVDTElTVF9TUV9DT05URU5UUzBfQkNTVU5JVDsKLQkJc3RhdHVz X3JlZyA9IEVYRUNMSVNUX1NUQVRVU19CQ1NVTklUOwotCQljb250cm9sX3JlZyA9IEVYRUNMSVNU X0NPTlRST0xfQkNTVU5JVDsKLQkJYnJlYWs7Ci0JfQotCi0JbWVtX3RyYWNlX21lbW9yeV93cml0 ZV9oZWFkZXJfb3V0KHJpbmdfYWRkciwgMTYsCi0JCQkJCSAgQVVCX01FTV9UUkFDRV9NRU1PUllf QUREUkVTU19TUEFDRV9MT0NBTCk7Ci0JZHdvcmRfb3V0KEFVQl9NSV9CQVRDSF9CVUZGRVJfU1RB UlQgfCAoMyAtIDIpKTsKLQlkd29yZF9vdXQoYmF0Y2hfb2Zmc2V0ICYgMHhGRkZGRkZGRik7Ci0J ZHdvcmRfb3V0KGJhdGNoX29mZnNldCA+PiAzMik7Ci0JZHdvcmRfb3V0KDAgLyogTUlfTk9PUCAq Lyk7Ci0KLQltZW1fdHJhY2VfbWVtb3J5X3dyaXRlX2hlYWRlcl9vdXQocmluZ19hZGRyICsgODE5 MiArIDIwLCA0LAotCQkJCQkgIEFVQl9NRU1fVFJBQ0VfTUVNT1JZX0FERFJFU1NfU1BBQ0VfTE9D QUwpOwotCWR3b3JkX291dCgwKTsgLyogUklOR19CVUZGRVJfSEVBRCAqLwotCW1lbV90cmFjZV9t ZW1vcnlfd3JpdGVfaGVhZGVyX291dChyaW5nX2FkZHIgKyA4MTkyICsgMjgsIDQsCi0JCQkJCSAg QVVCX01FTV9UUkFDRV9NRU1PUllfQUREUkVTU19TUEFDRV9MT0NBTCk7Ci0JZHdvcmRfb3V0KDE2 KTsgLyogUklOR19CVUZGRVJfVEFJTCAqLwotCi0JaWYgKGdlbiA+PSAxMSkgewotCQlyZWdpc3Rl cl93cml0ZV9vdXQoZWxzcV9yZWcsIGRlc2NyaXB0b3IgJiAweEZGRkZGRkZGKTsKLQkJcmVnaXN0 ZXJfd3JpdGVfb3V0KGVsc3FfcmVnICsgc2l6ZW9mKHVpbnQzMl90KSwgZGVzY3JpcHRvciA+PiAz Mik7Ci0JCXJlZ2lzdGVyX3dyaXRlX291dChjb250cm9sX3JlZywgMSk7Ci0JfSBlbHNlIHsKLQkJ cmVnaXN0ZXJfd3JpdGVfb3V0KGVsc3BfcmVnLCAwKTsKLQkJcmVnaXN0ZXJfd3JpdGVfb3V0KGVs c3BfcmVnLCAwKTsKLQkJcmVnaXN0ZXJfd3JpdGVfb3V0KGVsc3BfcmVnLCBkZXNjcmlwdG9yID4+ IDMyKTsKLQkJcmVnaXN0ZXJfd3JpdGVfb3V0KGVsc3BfcmVnLCBkZXNjcmlwdG9yICYgMHhGRkZG RkZGRik7Ci0JfQotCi0JZHdvcmRfb3V0KENNRF9NRU1fVFJBQ0VfUkVHSVNURVJfUE9MTCB8ICg1 ICsgMSAtIDEpKTsKLQlkd29yZF9vdXQoc3RhdHVzX3JlZyk7Ci0JZHdvcmRfb3V0KEFVQl9NRU1f VFJBQ0VfUkVHSVNURVJfU0laRV9EV09SRCB8Ci0JCSAgQVVCX01FTV9UUkFDRV9SRUdJU1RFUl9T UEFDRV9NTUlPKTsKLQlpZiAoZ2VuID49IDExKSB7Ci0JCWR3b3JkX291dCgweDAwMDAwMDAxKTsJ LyogbWFzayBsbyAqLwotCQlkd29yZF9vdXQoMHgwMDAwMDAwMCk7CS8qIG1hc2sgaGkgKi8KLQkJ ZHdvcmRfb3V0KDB4MDAwMDAwMDEpOwotCX0gZWxzZSB7Ci0JCWR3b3JkX291dCgweDAwMDAwMDEw KTsJLyogbWFzayBsbyAqLwotCQlkd29yZF9vdXQoMHgwMDAwMDAwMCk7CS8qIG1hc2sgaGkgKi8K LQkJZHdvcmRfb3V0KDB4MDAwMDAwMDApOwotCX0KLX0KLQotc3RhdGljIHZvaWQKLWF1Yl9kdW1w X3JpbmdidWZmZXIodWludDY0X3QgYmF0Y2hfb2Zmc2V0LCB1aW50NjRfdCBvZmZzZXQsIGludCBy aW5nX2ZsYWcpCi17Ci0JdWludDMyX3QgcmluZ2J1ZmZlcls0MDk2XTsKLQl1bnNpZ25lZCBhdWJf bWlfYmJzX2xlbjsKLQlpbnQgcmluZyA9IEFVQl9UUkFDRV9UWVBFX1JJTkdfUFJCMDsgLyogVGhl IGRlZmF1bHQgcmluZyAqLwotCWludCByaW5nX2NvdW50ID0gMDsKLQotCWlmIChyaW5nX2ZsYWcg PT0gSTkxNV9FWEVDX0JTRCkKLQkJcmluZyA9IEFVQl9UUkFDRV9UWVBFX1JJTkdfUFJCMTsKLQll bHNlIGlmIChyaW5nX2ZsYWcgPT0gSTkxNV9FWEVDX0JMVCkKLQkJcmluZyA9IEFVQl9UUkFDRV9U WVBFX1JJTkdfUFJCMjsKLQotCS8qIE1ha2UgYSByaW5nIGJ1ZmZlciB0byBleGVjdXRlIG91ciBi YXRjaGJ1ZmZlci4gKi8KLQltZW1zZXQocmluZ2J1ZmZlciwgMCwgc2l6ZW9mKHJpbmdidWZmZXIp KTsKLQotCWF1Yl9taV9iYnNfbGVuID0gYWRkcl9iaXRzID4gMzIgPyAzIDogMjsKLQlyaW5nYnVm ZmVyW3JpbmdfY291bnRdID0gQVVCX01JX0JBVENIX0JVRkZFUl9TVEFSVCB8IChhdWJfbWlfYmJz X2xlbiAtIDIpOwotCXdyaXRlX3JlbG9jKCZyaW5nYnVmZmVyW3JpbmdfY291bnQgKyAxXSwgYmF0 Y2hfb2Zmc2V0KTsKLQlyaW5nX2NvdW50ICs9IGF1Yl9taV9iYnNfbGVuOwotCi0JLyogV3JpdGUg b3V0IHRoZSByaW5nLiAgVGhpcyBhcHBlYXJzIHRvIHRyaWdnZXIgZXhlY3V0aW9uIG9mCi0JICog dGhlIHJpbmcgaW4gdGhlIHNpbXVsYXRvci4KLQkgKi8KLQlkd29yZF9vdXQoQ01EX0FVQl9UUkFD RV9IRUFERVJfQkxPQ0sgfAotCQkgICgoYWRkcl9iaXRzID4gMzIgPyA2IDogNSkgLSAyKSk7Ci0J ZHdvcmRfb3V0KEFVQl9UUkFDRV9NRU1UWVBFX0dUVCB8IHJpbmcgfCBBVUJfVFJBQ0VfT1BfQ09N TUFORF9XUklURSk7Ci0JZHdvcmRfb3V0KDApOyAvKiBnZW5lcmFsL3N1cmZhY2Ugc3VidHlwZSAq LwotCWR3b3JkX291dChvZmZzZXQpOwotCWR3b3JkX291dChyaW5nX2NvdW50ICogNCk7Ci0JaWYg KGFkZHJfYml0cyA+IDMyKQotCQlkd29yZF9vdXQob2Zmc2V0ID4+IDMyKTsKLQotCWRhdGFfb3V0 KHJpbmdidWZmZXIsIHJpbmdfY291bnQgKiA0KTsKLX0KLQotc3RhdGljIHZvaWQgKgotcmVsb2Nh dGVfYm8oc3RydWN0IGJvICpibywgY29uc3Qgc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVy MiAqZXhlY2J1ZmZlcjIsCi0JICAgIGNvbnN0IHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmpl Y3QyICpvYmopCi17Ci0JY29uc3Qgc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgKmV4 ZWNfb2JqZWN0cyA9Ci0JCShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiAqKSAodWlu dHB0cl90KSBleGVjYnVmZmVyMi0+YnVmZmVyc19wdHI7Ci0JY29uc3Qgc3RydWN0IGRybV9pOTE1 X2dlbV9yZWxvY2F0aW9uX2VudHJ5ICpyZWxvY3MgPQotCQkoY29uc3Qgc3RydWN0IGRybV9pOTE1 X2dlbV9yZWxvY2F0aW9uX2VudHJ5ICopICh1aW50cHRyX3QpIG9iai0+cmVsb2NzX3B0cjsKLQl2 b2lkICpyZWxvY2F0ZWQ7Ci0JaW50IGhhbmRsZTsKLQotCXJlbG9jYXRlZCA9IG1hbGxvYyhiby0+ c2l6ZSk7Ci0JZmFpbF9pZihyZWxvY2F0ZWQgPT0gTlVMTCwgImludGVsX2F1YmR1bXA6IG91dCBv ZiBtZW1vcnlcbiIpOwotCW1lbWNweShyZWxvY2F0ZWQsIEdFVF9QVFIoYm8tPm1hcCksIGJvLT5z aXplKTsKLQlmb3IgKHNpemVfdCBpID0gMDsgaSA8IG9iai0+cmVsb2NhdGlvbl9jb3VudDsgaSsr KSB7Ci0JCWZhaWxfaWYocmVsb2NzW2ldLm9mZnNldCA+PSBiby0+c2l6ZSwgImludGVsX2F1YmR1 bXA6IHJlbG9jIG91dHNpZGUgYm9cbiIpOwotCi0JCWlmIChleGVjYnVmZmVyMi0+ZmxhZ3MgJiBJ OTE1X0VYRUNfSEFORExFX0xVVCkKLQkJCWhhbmRsZSA9IGV4ZWNfb2JqZWN0c1tyZWxvY3NbaV0u dGFyZ2V0X2hhbmRsZV0uaGFuZGxlOwotCQllbHNlCi0JCQloYW5kbGUgPSByZWxvY3NbaV0udGFy Z2V0X2hhbmRsZTsKLQotCQl3cml0ZV9yZWxvYygoKGNoYXIgKilyZWxvY2F0ZWQpICsgcmVsb2Nz W2ldLm9mZnNldCwKLQkJCSAgICBnZXRfYm8oaGFuZGxlKS0+b2Zmc2V0ICsgcmVsb2NzW2ldLmRl bHRhKTsKLQl9Ci0KLQlyZXR1cm4gcmVsb2NhdGVkOwotfQotCi1zdGF0aWMgaW50Ci1nZW1faW9j dGwoaW50IGZkLCB1bnNpZ25lZCBsb25nIHJlcXVlc3QsIHZvaWQgKmFyZ3ApCi17Ci0JaW50IHJl dDsKLQotCWRvIHsKLQkJcmV0ID0gbGliY19pb2N0bChmZCwgcmVxdWVzdCwgYXJncCk7Ci0JfSB3 aGlsZSAocmV0ID09IC0xICYmIChlcnJubyA9PSBFSU5UUiB8fCBlcnJubyA9PSBFQUdBSU4pKTsK LQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkICoKLWdlbV9tbWFwKGludCBmZCwgdWlu dDMyX3QgaGFuZGxlLCB1aW50NjRfdCBvZmZzZXQsIHVpbnQ2NF90IHNpemUpCi17Ci0Jc3RydWN0 IGRybV9pOTE1X2dlbV9tbWFwIG1tYXAgPSB7Ci0JCS5oYW5kbGUgPSBoYW5kbGUsCi0JCS5vZmZz ZXQgPSBvZmZzZXQsCi0JCS5zaXplID0gc2l6ZQotCX07Ci0KLQlpZiAoZ2VtX2lvY3RsKGZkLCBE Uk1fSU9DVExfSTkxNV9HRU1fTU1BUCwgJm1tYXApID09IC0xKQotCQlyZXR1cm4gTUFQX0ZBSUxF RDsKLQotCXJldHVybiAodm9pZCAqKSh1aW50cHRyX3QpIG1tYXAuYWRkcl9wdHI7Ci19Ci0KLXN0 YXRpYyBpbnQKLWdlbV9nZXRfcGFyYW0oaW50IGZkLCB1aW50MzJfdCBwYXJhbSkKLXsKLQlpbnQg dmFsdWU7Ci0JZHJtX2k5MTVfZ2V0cGFyYW1fdCBncCA9IHsKLQkJLnBhcmFtID0gcGFyYW0sCi0J CS52YWx1ZSA9ICZ2YWx1ZQotCX07Ci0KLQlpZiAoZ2VtX2lvY3RsKGZkLCBEUk1fSU9DVExfSTkx NV9HRVRQQVJBTSwgJmdwKSA9PSAtMSkKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4gdmFsdWU7Ci19 Ci0KLXN0YXRpYyB2b2lkCi1kdW1wX2V4ZWNidWZmZXIyKGludCBmZCwgc3RydWN0IGRybV9pOTE1 X2dlbV9leGVjYnVmZmVyMiAqZXhlY2J1ZmZlcjIpCi17Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9l eGVjX29iamVjdDIgKmV4ZWNfb2JqZWN0cyA9Ci0JCShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNf b2JqZWN0MiAqKSAodWludHB0cl90KSBleGVjYnVmZmVyMi0+YnVmZmVyc19wdHI7Ci0JdWludDMy X3QgcmluZ19mbGFnID0gZXhlY2J1ZmZlcjItPmZsYWdzICYgSTkxNV9FWEVDX1JJTkdfTUFTSzsK LQl1aW50MzJfdCBvZmZzZXQ7Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgKm9i ajsKLQlzdHJ1Y3QgYm8gKmJvLCAqYmF0Y2hfYm87Ci0JaW50IGJhdGNoX2luZGV4OwotCXZvaWQg KmRhdGE7Ci0KLQkvKiBXZSBjYW4ndCBkbyB0aGlzIGF0IG9wZW4gdGltZSBhcyB3ZSdyZSBub3Qg eWV0IGF1dGhlbnRpY2F0ZWQuICovCi0JaWYgKGRldmljZSA9PSAwKSB7Ci0JCWRldmljZSA9IGdl bV9nZXRfcGFyYW0oZmQsIEk5MTVfUEFSQU1fQ0hJUFNFVF9JRCk7Ci0JCWZhaWxfaWYoZGV2aWNl ID09IDAgfHwgZ2VuID09IC0xLCAiZmFpbGVkIHRvIGlkZW50aWZ5IGNoaXBzZXRcbiIpOwotCX0K LQlpZiAoZ2VuID09IDApIHsKLQkJZ2VuID0gaW50ZWxfZ2VuKGRldmljZSk7Ci0KLQkJLyogSWYg d2UgZG9uJ3Qga25vdyB0aGUgZGV2aWNlIGdlbiwgdGhlbiBpdCBwcm9iYWJseSBpcyBhCi0JCSAq IG5ld2VyIGRldmljZS4gU2V0IGdlbiB0byBzb21lIGFyYml0cmFyaWx5IGhpZ2ggbnVtYmVyLgot CQkgKi8KLQkJaWYgKGdlbiA9PSAwKQotCQkJZ2VuID0gOTk5OTsKLQotCQlhZGRyX2JpdHMgPSBn ZW4gPj0gOCA/IDQ4IDogMzI7Ci0KLQkJaWYgKGdlbiA+PSAxMCkKLQkJCWdlbjEwX3dyaXRlX2hl YWRlcigpOwotCQllbHNlCi0JCQl3cml0ZV9oZWFkZXIoKTsKLQotCQlpZiAodmVyYm9zZSkKLQkJ CXByaW50ZigiW2ludGVsX2F1YmR1bXA6IHJ1bm5pbmcsICIKLQkJCSAgICAgICAib3V0cHV0IGZp bGUgJXMsIGNoaXBzZXQgaWQgMHglMDR4LCBnZW4gJWRdXG4iLAotCQkJICAgICAgIGZpbGVuYW1l LCBkZXZpY2UsIGdlbik7Ci0JfQotCi0JaWYgKGdlbiA+PSAxMCkKLQkJb2Zmc2V0ID0gU1RBVElD X0dHVFRfTUFQX0VORDsKLQllbHNlCi0JCW9mZnNldCA9IGd0dF9zaXplKCk7Ci0KLQlpZiAodmVy Ym9zZSkKLQkJcHJpbnRmKCJEdW1waW5nIGV4ZWNidWZmZXIyOlxuIik7Ci0KLQlmb3IgKHVpbnQz Ml90IGkgPSAwOyBpIDwgZXhlY2J1ZmZlcjItPmJ1ZmZlcl9jb3VudDsgaSsrKSB7Ci0JCW9iaiA9 ICZleGVjX29iamVjdHNbaV07Ci0JCWJvID0gZ2V0X2JvKG9iai0+aGFuZGxlKTsKLQotCQkvKiBJ ZiBiby0+c2l6ZSA9PSAwLCB0aGlzIG1lYW5zIHRoZXkgcGFzc2VkIHVzIGFuIGludmFsaWQKLQkJ ICogYnVmZmVyLiAgVGhlIGtlcm5lbCB3aWxsIHJlamVjdCBpdCBhbmQgc28gc2hvdWxkIHdlLgot CQkgKi8KLQkJaWYgKGJvLT5zaXplID09IDApIHsKLQkJCWlmICh2ZXJib3NlKQotCQkJCXByaW50 ZigiQk8gIyVkIGlzIGludmFsaWQhXG4iLCBvYmotPmhhbmRsZSk7Ci0JCQlyZXR1cm47Ci0JCX0K LQotCQlpZiAob2JqLT5mbGFncyAmIEVYRUNfT0JKRUNUX1BJTk5FRCkgewotCQkJYm8tPm9mZnNl dCA9IG9iai0+b2Zmc2V0OwotCQkJaWYgKHZlcmJvc2UpCi0JCQkJcHJpbnRmKCJCTyAjJWQgKCVk QikgcGlubmVkIEAgMHglIlBSSXg2NCJcbiIsCi0JCQkJICAgICAgIG9iai0+aGFuZGxlLCBiby0+ c2l6ZSwgYm8tPm9mZnNldCk7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAob2JqLT5hbGlnbm1lbnQgIT0g MCkKLQkJCQlvZmZzZXQgPSBhbGlnbl91MzIob2Zmc2V0LCBvYmotPmFsaWdubWVudCk7Ci0JCQli by0+b2Zmc2V0ID0gb2Zmc2V0OwotCQkJaWYgKHZlcmJvc2UpCi0JCQkJcHJpbnRmKCJCTyAjJWQg KCVkQikgQCAweCUiUFJJeDY0IlxuIiwgb2JqLT5oYW5kbGUsCi0JCQkJICAgICAgIGJvLT5zaXpl LCBiby0+b2Zmc2V0KTsKLQkJCW9mZnNldCA9IGFsaWduX3UzMihvZmZzZXQgKyBiby0+c2l6ZSAr IDQwOTUsIDQwOTYpOwotCQl9Ci0KLQkJaWYgKGJvLT5tYXAgPT0gTlVMTCAmJiBiby0+c2l6ZSA+ IDApCi0JCQliby0+bWFwID0gZ2VtX21tYXAoZmQsIG9iai0+aGFuZGxlLCAwLCBiby0+c2l6ZSk7 Ci0JCWZhaWxfaWYoYm8tPm1hcCA9PSBNQVBfRkFJTEVELCAiaW50ZWxfYXViZHVtcDogYm8gbW1h cCBmYWlsZWRcbiIpOwotCi0JCWlmIChnZW4gPj0gMTApCi0JCQlnZW44X21hcF9nZ3R0X3Jhbmdl KGJvLT5vZmZzZXQsIGJvLT5vZmZzZXQgKyBiby0+c2l6ZSk7Ci0JfQotCi0JYmF0Y2hfaW5kZXgg PSAoZXhlY2J1ZmZlcjItPmZsYWdzICYgSTkxNV9FWEVDX0JBVENIX0ZJUlNUKSA/IDAgOgotCQkJ ICBleGVjYnVmZmVyMi0+YnVmZmVyX2NvdW50IC0gMTsKLQliYXRjaF9ibyA9IGdldF9ibyhleGVj X29iamVjdHNbYmF0Y2hfaW5kZXhdLmhhbmRsZSk7Ci0JZm9yICh1aW50MzJfdCBpID0gMDsgaSA8 IGV4ZWNidWZmZXIyLT5idWZmZXJfY291bnQ7IGkrKykgewotCQlvYmogPSAmZXhlY19vYmplY3Rz W2ldOwotCQlibyA9IGdldF9ibyhvYmotPmhhbmRsZSk7Ci0KLQkJaWYgKG9iai0+cmVsb2NhdGlv bl9jb3VudCA+IDApCi0JCQlkYXRhID0gcmVsb2NhdGVfYm8oYm8sIGV4ZWNidWZmZXIyLCBvYmop OwotCQllbHNlCi0JCQlkYXRhID0gYm8tPm1hcDsKLQotCQlpZiAoYm8gPT0gYmF0Y2hfYm8pIHsK LQkJCWF1Yl93cml0ZV90cmFjZV9ibG9jayhBVUJfVFJBQ0VfVFlQRV9CQVRDSCwKLQkJCQkJICAg ICAgZGF0YSwgYm8tPnNpemUsIGJvLT5vZmZzZXQpOwotCQl9IGVsc2UgewotCQkJYXViX3dyaXRl X3RyYWNlX2Jsb2NrKEFVQl9UUkFDRV9UWVBFX05PVFlQRSwKLQkJCQkJICAgICAgZGF0YSwgYm8t PnNpemUsIGJvLT5vZmZzZXQpOwotCQl9Ci0JCWlmIChkYXRhICE9IGJvLT5tYXApCi0JCQlmcmVl KGRhdGEpOwotCX0KLQotCWlmIChnZW4gPj0gMTApIHsKLQkJYXViX2R1bXBfZXhlY2xpc3QoYmF0 Y2hfYm8tPm9mZnNldCArCi0JCQkJICBleGVjYnVmZmVyMi0+YmF0Y2hfc3RhcnRfb2Zmc2V0LCBy aW5nX2ZsYWcpOwotCX0gZWxzZSB7Ci0JCS8qIER1bXAgcmluZyBidWZmZXIgKi8KLQkJYXViX2R1 bXBfcmluZ2J1ZmZlcihiYXRjaF9iby0+b2Zmc2V0ICsKLQkJCQkgICAgZXhlY2J1ZmZlcjItPmJh dGNoX3N0YXJ0X29mZnNldCwgb2Zmc2V0LAotCQkJCSAgICByaW5nX2ZsYWcpOwotCX0KLQotCWZv ciAoaW50IGkgPSAwOyBpIDwgQVJSQVlfU0laRShmaWxlcyk7IGkrKykgewotCQlpZiAoZmlsZXNb aV0gIT0gTlVMTCkKLQkJCWZmbHVzaChmaWxlc1tpXSk7Ci0JfQotCi0JaWYgKGRldmljZV9vdmVy cmlkZSAmJgotCSAgICAoZXhlY2J1ZmZlcjItPmZsYWdzICYgSTkxNV9FWEVDX0ZFTkNFX0FSUkFZ KSAhPSAwKSB7Ci0JCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19mZW5jZSAqZmVuY2VzID0KLQkJ CSh2b2lkKikodWludHB0cl90KWV4ZWNidWZmZXIyLT5jbGlwcmVjdHNfcHRyOwotCQlmb3IgKHVp bnQzMl90IGkgPSAwOyBpIDwgZXhlY2J1ZmZlcjItPm51bV9jbGlwcmVjdHM7IGkrKykgewotCQkJ aWYgKChmZW5jZXNbaV0uZmxhZ3MgJiBJOTE1X0VYRUNfRkVOQ0VfU0lHTkFMKSAhPSAwKSB7Ci0J CQkJc3RydWN0IGRybV9zeW5jb2JqX2FycmF5IGFyZyA9IHsKLQkJCQkJLmhhbmRsZXMgPSAodWlu dHB0cl90KSZmZW5jZXNbaV0uaGFuZGxlLAotCQkJCQkuY291bnRfaGFuZGxlcyA9IDEsCi0JCQkJ CS5wYWQgPSAwLAotCQkJCX07Ci0JCQkJbGliY19pb2N0bChmZCwgRFJNX0lPQ1RMX1NZTkNPQkpf U0lHTkFMLCAmYXJnKTsKLQkJCX0KLQkJfQotCX0KLX0KLQotc3RhdGljIHZvaWQKLWFkZF9uZXdf Ym8oaW50IGhhbmRsZSwgdWludDY0X3Qgc2l6ZSwgdm9pZCAqbWFwKQotewotCXN0cnVjdCBibyAq Ym8gPSAmYm9zW2hhbmRsZV07Ci0KLQlmYWlsX2lmKGhhbmRsZSA+PSBNQVhfQk9fQ09VTlQsICJp bnRlbF9hdWJkdW1wOiBibyBoYW5kbGUgb3V0IG9mIHJhbmdlXG4iKTsKLQlmYWlsX2lmKHNpemUg PT0gMCwgImludGVsX2F1YmR1bXA6IGJvIHNpemUgaXMgaW52YWxpZFxuIik7Ci0KLQliby0+c2l6 ZSA9IHNpemU7Ci0JYm8tPm1hcCA9IG1hcDsKLX0KLQotc3RhdGljIHZvaWQKLXJlbW92ZV9ibyhp bnQgaGFuZGxlKQotewotCXN0cnVjdCBibyAqYm8gPSBnZXRfYm8oaGFuZGxlKTsKLQotCWlmIChi by0+bWFwICYmICFJU19VU0VSUFRSKGJvLT5tYXApKQotCQltdW5tYXAoYm8tPm1hcCwgYm8tPnNp emUpOwotCWJvLT5zaXplID0gMDsKLQliby0+bWFwID0gTlVMTDsKLX0KLQotaW50Ci1jbG9zZShp bnQgZmQpCi17Ci0JaWYgKGZkID09IGRybV9mZCkKLQkJZHJtX2ZkID0gLTE7Ci0KLQlyZXR1cm4g bGliY19jbG9zZShmZCk7Ci19Ci0KLXN0YXRpYyBGSUxFICoKLWxhdW5jaF9jb21tYW5kKGNoYXIg KmNvbW1hbmQpCi17Ci0JaW50IGkgPSAwLCBmZHNbMl07Ci0JY2hhciAqKmFyZ3MgPSBjYWxsb2Mo c3RybGVuKGNvbW1hbmQpLCBzaXplb2YoY2hhciAqKSk7Ci0JY2hhciAqaXRlciA9IGNvbW1hbmQ7 Ci0KLQlhcmdzW2krK10gPSBpdGVyID0gY29tbWFuZDsKLQotCXdoaWxlICgoaXRlciA9IHN0cnN0 cihpdGVyLCAiLCIpKSAhPSBOVUxMKSB7Ci0JCSppdGVyID0gJ1wwJzsKLQkJaXRlciArPSAxOwot CQlhcmdzW2krK10gPSBpdGVyOwotCX0KLQotCWlmIChwaXBlKGZkcykgPT0gLTEpCi0JCXJldHVy biBOVUxMOwotCi0Jc3dpdGNoIChmb3JrKCkpIHsKLQljYXNlIDA6Ci0JCWR1cDIoZmRzWzBdLCAw KTsKLQkJZmFpbF9pZihleGVjdnAoYXJnc1swXSwgYXJncykgPT0gLTEsCi0JCQkiaW50ZWxfYXVi ZHVtcDogZmFpbGVkIHRvIGxhdW5jaCBjaGlsZCBjb21tYW5kXG4iKTsKLQkJcmV0dXJuIE5VTEw7 Ci0KLQlkZWZhdWx0OgotCQlmcmVlKGFyZ3MpOwotCQlyZXR1cm4gZmRvcGVuKGZkc1sxXSwgInci KTsKLQotCWNhc2UgLTE6Ci0JCXJldHVybiBOVUxMOwotCX0KLX0KLQotc3RhdGljIHZvaWQKLW1h eWJlX2luaXQodm9pZCkKLXsKLQlzdGF0aWMgYm9vbCBpbml0aWFsaXplZCA9IGZhbHNlOwotCUZJ TEUgKmNvbmZpZzsKLQljaGFyICprZXksICp2YWx1ZTsKLQotCWlmIChpbml0aWFsaXplZCkKLQkJ cmV0dXJuOwotCi0JaW5pdGlhbGl6ZWQgPSB0cnVlOwotCi0JY29uZmlnID0gZmRvcGVuKDMsICJy Iik7Ci0Jd2hpbGUgKGZzY2FuZihjb25maWcsICIlbVtePV09JW1bXlxuXVxuIiwgJmtleSwgJnZh bHVlKSAhPSBFT0YpIHsKLQkJaWYgKCFzdHJjbXAoa2V5LCAidmVyYm9zZSIpKSB7Ci0JCQl2ZXJi b3NlID0gMTsKLQkJfSBlbHNlIGlmICghc3RyY21wKGtleSwgImRldmljZSIpKSB7Ci0JCQlmYWls X2lmKHNzY2FuZih2YWx1ZSwgIiVpIiwgJmRldmljZSkgIT0gMSwKLQkJCQkiaW50ZWxfYXViZHVt cDogZmFpbGVkIHRvIHBhcnNlIGRldmljZSBpZCAnJXMnIiwKLQkJCQl2YWx1ZSk7Ci0JCQlkZXZp Y2Vfb3ZlcnJpZGUgPSB0cnVlOwotCQl9IGVsc2UgaWYgKCFzdHJjbXAoa2V5LCAiZmlsZSIpKSB7 Ci0JCQlmaWxlbmFtZSA9IHN0cmR1cCh2YWx1ZSk7Ci0JCQlmaWxlc1swXSA9IGZvcGVuKGZpbGVu YW1lLCAidysiKTsKLQkJCWZhaWxfaWYoZmlsZXNbMF0gPT0gTlVMTCwKLQkJCQkiaW50ZWxfYXVi ZHVtcDogZmFpbGVkIHRvIG9wZW4gZmlsZSAnJXMnXG4iLAotCQkJCWZpbGVuYW1lKTsKLQkJfSBl bHNlIGlmICghc3RyY21wKGtleSwgICJjb21tYW5kIikpIHsKLQkJCWZpbGVzWzFdID0gbGF1bmNo X2NvbW1hbmQodmFsdWUpOwotCQkJZmFpbF9pZihmaWxlc1sxXSA9PSBOVUxMLAotCQkJCSJpbnRl bF9hdWJkdW1wOiBmYWlsZWQgdG8gbGF1bmNoIGNvbW1hbmQgJyVzJ1xuIiwKLQkJCQl2YWx1ZSk7 Ci0JCX0gZWxzZSB7Ci0JCQlmcHJpbnRmKHN0ZGVyciwgImludGVsX2F1YmR1bXA6IHVua25vd24g b3B0aW9uICclcydcbiIsIGtleSk7Ci0JCX0KLQotCQlmcmVlKGtleSk7Ci0JCWZyZWUodmFsdWUp OwotCX0KLQlmY2xvc2UoY29uZmlnKTsKLQotCWJvcyA9IGNhbGxvYyhNQVhfQk9fQ09VTlQsIHNp emVvZihib3NbMF0pKTsKLQlmYWlsX2lmKGJvcyA9PSBOVUxMLCAiaW50ZWxfYXViZHVtcDogb3V0 IG9mIG1lbW9yeVxuIik7Ci19Ci0KLSNkZWZpbmUgTE9DQUxfSU9DVExfSTkxNV9HRU1fRVhFQ0JV RkZFUjJfV1IgXAotICAgIERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9HRU1f RVhFQ0JVRkZFUjIsIHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIpCi0KLWludAotaW9j dGwoaW50IGZkLCB1bnNpZ25lZCBsb25nIHJlcXVlc3QsIC4uLikKLXsKLQl2YV9saXN0IGFyZ3M7 Ci0Jdm9pZCAqYXJncDsKLQlpbnQgcmV0OwotCXN0cnVjdCBzdGF0IGJ1ZjsKLQotCXZhX3N0YXJ0 KGFyZ3MsIHJlcXVlc3QpOwotCWFyZ3AgPSB2YV9hcmcoYXJncywgdm9pZCAqKTsKLQl2YV9lbmQo YXJncyk7Ci0KLQlpZiAoX0lPQ19UWVBFKHJlcXVlc3QpID09IERSTV9JT0NUTF9CQVNFICYmCi0J ICAgIGRybV9mZCAhPSBmZCAmJiBmc3RhdChmZCwgJmJ1ZikgPT0gMCAmJgotCSAgICAoYnVmLnN0 X21vZGUgJiBTX0lGTVQpID09IFNfSUZDSFIgJiYgbWFqb3IoYnVmLnN0X3JkZXYpID09IERSTV9N QUpPUikgewotCQlkcm1fZmQgPSBmZDsKLQkJaWYgKHZlcmJvc2UpCi0JCQlwcmludGYoIltpbnRl bF9hdWJkdW1wOiBpbnRlcmNlcHQgZHJtIGlvY3RsIG9uIGZkICVkXVxuIiwgZmQpOwotCX0KLQot CWlmIChmZCA9PSBkcm1fZmQpIHsKLQkJbWF5YmVfaW5pdCgpOwotCi0JCXN3aXRjaCAocmVxdWVz dCkgewotCQljYXNlIERSTV9JT0NUTF9JOTE1X0dFVFBBUkFNOiB7Ci0JCQlzdHJ1Y3QgZHJtX2k5 MTVfZ2V0cGFyYW0gKmdldHBhcmFtID0gYXJncDsKLQotCQkJaWYgKGRldmljZV9vdmVycmlkZSAm JiBnZXRwYXJhbS0+cGFyYW0gPT0gSTkxNV9QQVJBTV9DSElQU0VUX0lEKSB7Ci0JCQkJKmdldHBh cmFtLT52YWx1ZSA9IGRldmljZTsKLQkJCQlyZXR1cm4gMDsKLQkJCX0KLQotCQkJcmV0ID0gbGli Y19pb2N0bChmZCwgcmVxdWVzdCwgYXJncCk7Ci0KLQkJCS8qIElmIHRoZSBhcHBsaWNhdGlvbiBs b29rcyB1cCBjaGlwc2V0X2lkCi0JCQkgKiAodGhleSB0eXBpY2FsbHkgZG8pLCB3ZSdsbCBwaWdn eS1iYWNrIG9uCi0JCQkgKiB0aGVpciBpb2N0bCBhbmQgc3RvcmUgdGhlIGlkIGZvciBsYXRlcgot CQkJICogdXNlLiAqLwotCQkJaWYgKGdldHBhcmFtLT5wYXJhbSA9PSBJOTE1X1BBUkFNX0NISVBT RVRfSUQpCi0JCQkJZGV2aWNlID0gKmdldHBhcmFtLT52YWx1ZTsKLQotCQkJcmV0dXJuIHJldDsK LQkJfQotCi0JCWNhc2UgRFJNX0lPQ1RMX0k5MTVfR0VNX0VYRUNCVUZGRVI6IHsKLQkJCXN0YXRp YyBib29sIG9uY2U7Ci0JCQlpZiAoIW9uY2UpIHsKLQkJCQlmcHJpbnRmKHN0ZGVyciwgImludGVs X2F1YmR1bXA6ICIKLQkJCQkJImFwcGxpY2F0aW9uIHVzZXMgRFJNX0lPQ1RMX0k5MTVfR0VNX0VY RUNCVUZGRVIsIG5vdCBoYW5kbGVkXG4iKTsKLQkJCQlvbmNlID0gdHJ1ZTsKLQkJCX0KLQkJCXJl dHVybiBsaWJjX2lvY3RsKGZkLCByZXF1ZXN0LCBhcmdwKTsKLQkJfQotCi0JCWNhc2UgRFJNX0lP Q1RMX0k5MTVfR0VNX0VYRUNCVUZGRVIyOgotCQljYXNlIExPQ0FMX0lPQ1RMX0k5MTVfR0VNX0VY RUNCVUZGRVIyX1dSOiB7Ci0JCQlkdW1wX2V4ZWNidWZmZXIyKGZkLCBhcmdwKTsKLQkJCWlmIChk ZXZpY2Vfb3ZlcnJpZGUpCi0JCQkJcmV0dXJuIDA7Ci0KLQkJCXJldHVybiBsaWJjX2lvY3RsKGZk LCByZXF1ZXN0LCBhcmdwKTsKLQkJfQotCi0JCWNhc2UgRFJNX0lPQ1RMX0k5MTVfR0VNX0NSRUFU RTogewotCQkJc3RydWN0IGRybV9pOTE1X2dlbV9jcmVhdGUgKmNyZWF0ZSA9IGFyZ3A7Ci0KLQkJ CXJldCA9IGxpYmNfaW9jdGwoZmQsIHJlcXVlc3QsIGFyZ3ApOwotCQkJaWYgKHJldCA9PSAwKQot CQkJCWFkZF9uZXdfYm8oY3JlYXRlLT5oYW5kbGUsIGNyZWF0ZS0+c2l6ZSwgTlVMTCk7Ci0KLQkJ CXJldHVybiByZXQ7Ci0JCX0KLQotCQljYXNlIERSTV9JT0NUTF9JOTE1X0dFTV9VU0VSUFRSOiB7 Ci0JCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3VzZXJwdHIgKnVzZXJwdHIgPSBhcmdwOwotCi0JCQly ZXQgPSBsaWJjX2lvY3RsKGZkLCByZXF1ZXN0LCBhcmdwKTsKLQkJCWlmIChyZXQgPT0gMCkKLQkJ CQlhZGRfbmV3X2JvKHVzZXJwdHItPmhhbmRsZSwgdXNlcnB0ci0+dXNlcl9zaXplLAotCQkJCQkg ICAodm9pZCAqKSAodWludHB0cl90KSAodXNlcnB0ci0+dXNlcl9wdHIgfCBVU0VSUFRSX0ZMQUcp KTsKLQkJCXJldHVybiByZXQ7Ci0JCX0KLQotCQljYXNlIERSTV9JT0NUTF9HRU1fQ0xPU0U6IHsK LQkJCXN0cnVjdCBkcm1fZ2VtX2Nsb3NlICpjbG9zZSA9IGFyZ3A7Ci0KLQkJCXJlbW92ZV9ibyhj bG9zZS0+aGFuZGxlKTsKLQotCQkJcmV0dXJuIGxpYmNfaW9jdGwoZmQsIHJlcXVlc3QsIGFyZ3Ap OwotCQl9Ci0KLQkJY2FzZSBEUk1fSU9DVExfR0VNX09QRU46IHsKLQkJCXN0cnVjdCBkcm1fZ2Vt X29wZW4gKm9wZW4gPSBhcmdwOwotCi0JCQlyZXQgPSBsaWJjX2lvY3RsKGZkLCByZXF1ZXN0LCBh cmdwKTsKLQkJCWlmIChyZXQgPT0gMCkKLQkJCQlhZGRfbmV3X2JvKG9wZW4tPmhhbmRsZSwgb3Bl bi0+c2l6ZSwgTlVMTCk7Ci0KLQkJCXJldHVybiByZXQ7Ci0JCX0KLQotCQljYXNlIERSTV9JT0NU TF9QUklNRV9GRF9UT19IQU5ETEU6IHsKLQkJCXN0cnVjdCBkcm1fcHJpbWVfaGFuZGxlICpwcmlt ZSA9IGFyZ3A7Ci0KLQkJCXJldCA9IGxpYmNfaW9jdGwoZmQsIHJlcXVlc3QsIGFyZ3ApOwotCQkJ aWYgKHJldCA9PSAwKSB7Ci0JCQkJb2ZmX3Qgc2l6ZTsKLQotCQkJCXNpemUgPSBsc2Vlayhwcmlt ZS0+ZmQsIDAsIFNFRUtfRU5EKTsKLQkJCQlmYWlsX2lmKHNpemUgPT0gLTEsICJpbnRlbF9hdWJk dW1wOiBmYWlsZWQgdG8gZ2V0IHByaW1lIGJvIHNpemVcbiIpOwotCQkJCWFkZF9uZXdfYm8ocHJp bWUtPmhhbmRsZSwgc2l6ZSwgTlVMTCk7Ci0JCQl9Ci0KLQkJCXJldHVybiByZXQ7Ci0JCX0KLQot CQlkZWZhdWx0OgotCQkJcmV0dXJuIGxpYmNfaW9jdGwoZmQsIHJlcXVlc3QsIGFyZ3ApOwotCQl9 Ci0JfSBlbHNlIHsKLQkJcmV0dXJuIGxpYmNfaW9jdGwoZmQsIHJlcXVlc3QsIGFyZ3ApOwotCX0K LX0KLQotc3RhdGljIHZvaWQKLWluaXQodm9pZCkKLXsKLQlsaWJjX2Nsb3NlID0gZGxzeW0oUlRM RF9ORVhULCAiY2xvc2UiKTsKLQlsaWJjX2lvY3RsID0gZGxzeW0oUlRMRF9ORVhULCAiaW9jdGwi KTsKLQlmYWlsX2lmKGxpYmNfY2xvc2UgPT0gTlVMTCB8fCBsaWJjX2lvY3RsID09IE5VTEwsCi0J CSJpbnRlbF9hdWJkdW1wOiBmYWlsZWQgdG8gZ2V0IGxpYmMgaW9jdGwgb3IgY2xvc2VcbiIpOwot fQotCi1zdGF0aWMgaW50Ci1jbG9zZV9pbml0X2hlbHBlcihpbnQgZmQpCi17Ci0JaW5pdCgpOwot CXJldHVybiBsaWJjX2Nsb3NlKGZkKTsKLX0KLQotc3RhdGljIGludAotaW9jdGxfaW5pdF9oZWxw ZXIoaW50IGZkLCB1bnNpZ25lZCBsb25nIHJlcXVlc3QsIC4uLikKLXsKLQl2YV9saXN0IGFyZ3M7 Ci0Jdm9pZCAqYXJncDsKLQotCXZhX3N0YXJ0KGFyZ3MsIHJlcXVlc3QpOwotCWFyZ3AgPSB2YV9h cmcoYXJncywgdm9pZCAqKTsKLQl2YV9lbmQoYXJncyk7Ci0KLQlpbml0KCk7Ci0JcmV0dXJuIGxp YmNfaW9jdGwoZmQsIHJlcXVlc3QsIGFyZ3ApOwotfQotCi1zdGF0aWMgdm9pZCBfX2F0dHJpYnV0 ZV9fICgoZGVzdHJ1Y3RvcikpCi1maW5pKHZvaWQpCi17Ci0JZnJlZShmaWxlbmFtZSk7Ci0JZm9y IChpbnQgaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGZpbGVzKTsgaSsrKSB7Ci0JCWlmIChmaWxlc1tp XSAhPSBOVUxMKQotCQkJZmNsb3NlKGZpbGVzW2ldKTsKLQl9Ci0JZnJlZShib3MpOwotfQpkaWZm IC0tZ2l0IGEvdG9vbHMvaW50ZWxfYXViZHVtcC5pbiBiL3Rvb2xzL2ludGVsX2F1YmR1bXAuaW4K ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDk3N2ZlOTUxLi4wMDAwMDAwMAotLS0gYS90 b29scy9pbnRlbF9hdWJkdW1wLmluCisrKyAvZGV2L251bGwKQEAgLTEsMTExICswLDAgQEAKLSMh L2Jpbi9iYXNoCi0jIC0qLSBtb2RlOiBzaCAtKi0KLQotZnVuY3Rpb24gc2hvd19oZWxwKCkgewot ICAgIGNhdCA8PEVPRgotVXNhZ2U6IGludGVsX2F1YmR1bXAgW09QVElPTl0uLi4gWy0tXSBDT01N QU5EIEFSR1VNRU5UUwotCi1SdW4gQ09NTUFORCB3aXRoIEFSR1VNRU5UUyBhbmQgZHVtcCBhbiBB VUIgZmlsZSB0aGF0IGNhcHR1cmVzIGJ1ZmZlcgotY29udGVudHMgYW5kIGV4ZWN1dGlvbiBvZiB0 aGUgR0VNIGFwcGxpY2F0aW9uLgotCi0gIC1vLCAtLW91dHB1dD1GSUxFICBOYW1lIG9mIEFVQiBm aWxlLiBEZWZhdWx0cyB0byBDT01NQU5ELmF1YgotCi0gIC1jLCAtLWNvbW1hbmQ9Q01EICBFeGVj dXRlIENNRCBhbmQgd3JpdGUgdGhlIEFVQiBmaWxlJ3MgY29udGVudCB0byBpdHMKLSAgICAgICAg ICAgICAgICAgICAgIHN0YW5kYXJkIGlucHV0Ci0KLSAgICAgIC0tZGV2aWNlPUlEICAgIE92ZXJy aWRlIFBDSSBJRCBvZiB0aGUgcmVwb3J0ZWQgZGV2aWNlCi0KLSAgLXYgICAgICAgICAgICAgICAg IEVuYWJsZSB2ZXJib3NlIG91dHB1dAotCi0gICAgICAtLWhlbHAgICAgICAgICBEaXNwbGF5IHRo aXMgaGVscCBtZXNzYWdlIGFuZCBleGl0Ci0KLUVPRgotCi0gICAgZXhpdCAwCi19Ci0KLWFyZ3M9 IiIKLWNvbW1hbmQ9IiIKLWZpbGU9IiIKLQotZnVuY3Rpb24gYWRkX2FyZygpIHsKLSAgICBhcmc9 JDEKLSAgICBhcmdzPSIkYXJncyRhcmdcbiIKLX0KLQotZnVuY3Rpb24gYnVpbGRfY29tbWFuZCAo KSB7Ci0gICAgICBjb21tYW5kPSIiCi0gICAgICBmb3IgaSBpbiAkMTsgZG8KLQkgIGlmIFsgLXog JGNvbW1hbmQgXTsgdGhlbgotCSAgICAgIGNvbW1hbmQ9JGkKLQkgIGVsc2UKLQkgICAgICBjb21t YW5kPSIkY29tbWFuZCwkaSIKLQkgIGZpOwotICAgICAgZG9uZQotfQotCi13aGlsZSB0cnVlOyBk bwotICAgICAgY2FzZSAiJDEiIGluCi0JICAtbykKLQkgICAgICBmaWxlPSQyCi0JICAgICAgYWRk X2FyZyAiZmlsZT0ke2ZpbGU6LSQoYmFzZW5hbWUgJHtmaWxlfSkuYXVifSIKLQkgICAgICBzaGlm dCAyCi0JICAgICAgOzsKLQkgIC12KQotCSAgICAgIGFkZF9hcmcgInZlcmJvc2U9MSIKLQkgICAg ICBzaGlmdCAxCi0JICAgICAgOzsKLQkgIC1vKikKLQkgICAgICBmaWxlPSR7MSMjLW99Ci0JICAg ICAgYWRkX2FyZyAiZmlsZT0ke2ZpbGU6LSQoYmFzZW5hbWUgJHtmaWxlfSkuYXVifSIKLQkgICAg ICBzaGlmdAotCSAgICAgIDs7Ci0JICAtLW91dHB1dD0qKQotCSAgICAgIGZpbGU9JHsxIyMtLW91 dHB1dD19Ci0JICAgICAgYWRkX2FyZyAiZmlsZT0ke2ZpbGU6LSQoYmFzZW5hbWUgJHtmaWxlfSku YXVifSIKLQkgICAgICBzaGlmdAotCSAgICAgIDs7Ci0JICAtYykKLQkgICAgICBidWlsZF9jb21t YW5kICIkMiIKLQkgICAgICBhZGRfYXJnICJjb21tYW5kPSRjb21tYW5kIgotCSAgICAgIHNoaWZ0 IDIKLQkgICAgICA7OwotCSAgLS1jb21tYW5kPSopCi0JICAgICAgYnVpbGRfY29tbWFuZCAiJHsx IyMtLWNvbW1hbmQ9fSIKLQkgICAgICBhZGRfYXJnICJjb21tYW5kPSRjb21tYW5kIgotCSAgICAg IHNoaWZ0Ci0JICAgICAgOzsKLQkgIC0tZGV2aWNlPSopCi0JICAgICAgYWRkX2FyZyAiZGV2aWNl PSR7MSMjLS1kZXZpY2U9fSIKLQkgICAgICBzaGlmdAotCSAgICAgIDs7Ci0JICAtLWhlbHApCi0J ICAgICAgc2hvd19oZWxwCi0JICAgICAgOzsKLQkgIC0tKQotCSAgICAgIHNoaWZ0Ci0JICAgICAg YnJlYWsKLQkgICAgICA7OwotCSAgLSopCi0JICAgICAgZWNobyAiaW50ZWxfYXViZHVtcDogaW52 YWxpZCBvcHRpb246ICQxIgotCSAgICAgIGVjaG8KLQkgICAgICBzaG93X2hlbHAKLQkgICAgICA7 OwotCSAgKikKLQkgICAgICBicmVhawotCSAgICAgIDs7Ci0gICAgICBlc2FjCi1kb25lCi0KLVsg LXogJDEgXSAmJiBzaG93X2hlbHAKLQotWyAteiAkZmlsZSBdICYmIFsgLXogJGNvbW1hbmQgXSAm JiBhZGRfYXJnICJmaWxlPWludGVsLmF1YiIKLQotcHJlZml4PUBwcmVmaXhACi1leGVjX3ByZWZp eD1AZXhlY19wcmVmaXhACi1saWJkaXI9QGxpYmRpckAKLQotTERfUFJFTE9BRD0ke2xpYmRpcn0v aW50ZWxfYXViZHVtcC5zbyR7TERfUFBSRUxPQUQ6Kzoke0xEX1BSRUxPQUR9fSBcCi0JICBleGVj IC0tICIkQCIgMzw8RU9GCi1gZWNobyAtZSAkYXJnc2AKLUVPRgpkaWZmIC0tZ2l0IGEvdG9vbHMv bWVzb24uYnVpbGQgYi90b29scy9tZXNvbi5idWlsZAppbmRleCA3NDgyMmEzMy4uY2YzZjM3YjIg MTAwNjQ0Ci0tLSBhL3Rvb2xzL21lc29uLmJ1aWxkCisrKyBiL3Rvb2xzL21lc29uLmJ1aWxkCkBA IC05MCwxMiArOTAsNiBAQCBpbnN0YWxsX3N1YmRpcigncmVnaXN0ZXJzJywgaW5zdGFsbF9kaXIg OiBkYXRhZGlyLAogCQkgJ01ha2VmaWxlJywgJ01ha2VmaWxlLmluJywgJ01ha2VmaWxlLmFtJywK IAkgICAgICAgXSkKIAotc2hhcmVkX2xpYnJhcnkoJ2ludGVsX2F1YmR1bXAnLCAnYXViZHVtcC5j JywKLQkgICAgICAgZGVwZW5kZW5jaWVzIDogWyBsaWJfaWd0X2NoaXBzZXQsIGRsc3ltIF0sCi0J ICAgICAgIG5hbWVfcHJlZml4IDogJycsCi0JICAgICAgIGluc3RhbGwgOiB0cnVlLAotCSAgICAg ICBzb3ZlcnNpb24gOiAnMCcpCi0KIGV4ZWN1dGFibGUoJ2ludGVsX2dwdV90b3AnLCAnaW50ZWxf Z3B1X3RvcC5jJywKIAkgICBpbnN0YWxsIDogdHJ1ZSwKIAkgICBpbnN0YWxsX3JwYXRoIDogYmlu ZGlyX3JwYXRoZGlyLApAQCAtMTA2LDExICsxMDAsNCBAQCBleGVjdXRhYmxlKCdhbWRfaGRtaV9j b21wbGlhbmNlJywgJ2FtZF9oZG1pX2NvbXBsaWFuY2UuYycsCiAJICAgaW5zdGFsbF9ycGF0aCA6 IGJpbmRpcl9ycGF0aGRpciwKIAkgICBpbnN0YWxsIDogdHJ1ZSkKIAotY29uZl9kYXRhID0gY29u ZmlndXJhdGlvbl9kYXRhKCkKLWNvbmZfZGF0YS5zZXQoJ3ByZWZpeCcsIHByZWZpeCkKLWNvbmZf ZGF0YS5zZXQoJ2V4ZWNfcHJlZml4JywgJyR7cHJlZml4fScpCi1jb25mX2RhdGEuc2V0KCdsaWJk aXInLCBqb2luX3BhdGhzKCcke3ByZWZpeH0nLCBsaWJkaXIpKQotY29uZmlndXJlX2ZpbGUoaW5w dXQgOiAnaW50ZWxfYXViZHVtcC5pbicsIG91dHB1dCA6ICdpbnRlbF9hdWJkdW1wJywKLSAgICAg ICAgICAgICAgIGNvbmZpZ3VyYXRpb24gOiBjb25mX2RhdGEsIGluc3RhbGxfZGlyIDogYmluZGly KQotCiBzdWJkaXIoJ251bGxfc3RhdGVfZ2VuJykKLS0gCjIuMjQuMQoKX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KaWd0LWRldiBtYWlsaW5nIGxpc3QKaWd0 LWRldkBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcv bWFpbG1hbi9saXN0aW5mby9pZ3QtZGV2Cg==