From owner-freebsd-net@FreeBSD.ORG Tue Apr 5 01:47:32 2011 Return-Path: Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 132F3106566C for ; Tue, 5 Apr 2011 01:47:32 +0000 (UTC) (envelope-from if@freebsd.org) Received: from chile.gbit.at (ns1.xip.at [193.239.188.99]) by mx1.freebsd.org (Postfix) with ESMTP id 3DCC38FC12 for ; Tue, 5 Apr 2011 01:47:29 +0000 (UTC) Received: (qmail 3991 invoked from network); 5 Apr 2011 03:26:08 +0200 Received: from unknown (HELO filebunker.xip.at) (89.207.145.147) by chile.gbit.at with (DHE-RSA-AES256-SHA encrypted) SMTP; 5 Apr 2011 03:26:08 +0200 Date: Tue, 5 Apr 2011 03:26:07 +0200 (CEST) From: Ingo Flaschberger X-X-Sender: if@filebunker.xip.at To: freebsd-net@freebsd.org Message-ID: User-Agent: Alpine 2.00 (LRH 1167 2008-08-23) MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="168430090-939355638-1301965804=:2152" Content-ID: Subject: Routing enhancement - reduce routing table locking X-BeenThere: freebsd-net@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Networking and TCP/IP with FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 05 Apr 2011 01:47:32 -0000 This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. --168430090-939355638-1301965804=:2152 Content-Type: TEXT/PLAIN; FORMAT=flowed; CHARSET=US-ASCII Content-ID: Hi, I have written a patch to: *) reduce locking of routing table to achieve the same speed as with flowtables, which do not scale with many routes: use of a copy of the route use rm_lock(9) (idea of Andre Oppermann) *) implement some multipath changes to use a direct attached interface route and a real route, used some OpenBSD code *) icmp rate-limiting in forwarding (old code from FreeBSD page) The patch applies at FreeBSD 8.2 stable. Comments are welcome, especially if I can reuse "dst" (which seems to work): rtl.rt_gateway = (struct sockaddr *)dst; but 'm not shure if I should take same caution with bcopy regarding sa_len: rtlookup_fib(struct sockaddr *dst, u_int fibnum, struct rtlookup *rtl, Kind regards, Ingo Flaschberger Geschaeftsleitung ____________________________________ crossip communications gmbh A-1020 Wien, Sebastian Kneipp Gasse 1/3 Sitz der Gesellschaft: 1020 Wien, Oesterreich Firmenbuchgericht: Handelsgericht Wien, FN 269698 s, Umsatzsteueridentifikationsnummer (UID): ATU62080367 Haftungsausschluss / Disclaimer --168430090-939355638-1301965804=:2152 Content-Type: TEXT/PLAIN; CHARSET=US-ASCII; NAME=rmlock_8.2_20110405.diff Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: ATTACHMENT; FILENAME=rmlock_8.2_20110405.diff ZGlmZiAtdSAtciAuLi9zcmNfb3JnXzguMl8yMDExMDMyOS9jb250cmliL2lw ZmlsdGVyL3JhZGl4LmMgLi9jb250cmliL2lwZmlsdGVyL3JhZGl4LmMNCi0t LSAuLi9zcmNfb3JnXzguMl8yMDExMDMyOS9jb250cmliL2lwZmlsdGVyL3Jh ZGl4LmMJMjAwOS0wOC0wMyAwODoxMzowNi4wMDAwMDAwMDAgKzAwMDANCisr KyAuL2NvbnRyaWIvaXBmaWx0ZXIvcmFkaXguYwkyMDExLTA0LTAzIDE2OjA4 OjI4LjAwMDAwMDAwMCArMDAwMA0KQEAgLTc1OSw5ICs3NTksMTAgQEANCiB9 DQogDQogc3RydWN0IHJhZGl4X25vZGUgKg0KLXJuX2RlbGV0ZSh2X2FyZywg bmV0bWFza19hcmcsIGhlYWQpDQorcm5fZGVsZXRlKHZfYXJnLCBuZXRtYXNr X2FyZywgaGVhZCwgcm4pDQogCXZvaWQgKnZfYXJnLCAqbmV0bWFza19hcmc7 DQogCXN0cnVjdCByYWRpeF9ub2RlX2hlYWQgKmhlYWQ7DQorCXN0cnVjdCBy YWRpeF9ub2RlICpybjsNCiB7DQogCXN0cnVjdCByYWRpeF9ub2RlICp0LCAq cCwgKngsICp0dDsNCiAJc3RydWN0IHJhZGl4X21hc2sgKm0sICpzYXZlZF9t LCAqKm1wOw0KQEAgLTEwNjksNyArMTA3MCw3IEBADQogCXN0cnVjdCByYWRp eF9ub2RlX2hlYWQgKnJuaCA9IHA7DQogCXN0cnVjdCByYWRpeF9ub2RlICpk Ow0KIA0KLQlkID0gcm5oLT5ybmhfZGVsYWRkcihuLT5ybl9rZXksIE5VTEws IHJuaCk7DQorCWQgPSBybmgtPnJuaF9kZWxhZGRyKG4tPnJuX2tleSwgTlVM TCwgcm5oLCBOVUxMKTsNCiAJaWYgKGQgIT0gTlVMTCkgew0KIAkJRnJlZVMo ZCwgbWF4X2tleWxlbiArIDIgKiBzaXplb2YgKCpkKSk7DQogCX0NCmRpZmYg LXUgLXIgLi4vc3JjX29yZ184LjJfMjAxMTAzMjkvY29udHJpYi9pcGZpbHRl ci9yYWRpeF9pcGYuaCAuL2NvbnRyaWIvaXBmaWx0ZXIvcmFkaXhfaXBmLmgN Ci0tLSAuLi9zcmNfb3JnXzguMl8yMDExMDMyOS9jb250cmliL2lwZmlsdGVy L3JhZGl4X2lwZi5oCTIwMDktMDgtMDMgMDg6MTM6MDYuMDAwMDAwMDAwICsw MDAwDQorKysgLi9jb250cmliL2lwZmlsdGVyL3JhZGl4X2lwZi5oCTIwMTEt MDQtMDMgMTY6MDg6MjguMDAwMDAwMDAwICswMDAwDQpAQCAtMTMwLDcgKzEz MCw3IEBADQogCQlfX1AoKHZvaWQgKnYsIHZvaWQgKm1hc2ssDQogCQkgICAg IHN0cnVjdCByYWRpeF9ub2RlX2hlYWQgKmhlYWQsIHN0cnVjdCByYWRpeF9u b2RlIG5vZGVzW10pKTsNCiAJc3RydWN0CXJhZGl4X25vZGUgKigqcm5oX2Rl bGFkZHIpCS8qIHJlbW92ZSBiYXNlZCBvbiBzb2NrYWRkciAqLw0KLQkJX19Q KCh2b2lkICp2LCB2b2lkICptYXNrLCBzdHJ1Y3QgcmFkaXhfbm9kZV9oZWFk ICpoZWFkKSk7DQorCQlfX1AoKHZvaWQgKnYsIHZvaWQgKm1hc2ssIHN0cnVj dCByYWRpeF9ub2RlX2hlYWQgKmhlYWQsIHN0cnVjdCByYWRpeF9ub2RlICpy bikpOw0KIAlzdHJ1Y3QJcmFkaXhfbm9kZSAqKCpybmhfZGVscGt0KQkvKiBy ZW1vdmUgYmFzZWQgb24gcGFja2V0IGhkciAqLw0KIAkJX19QKCh2b2lkICp2 LCB2b2lkICptYXNrLCBzdHJ1Y3QgcmFkaXhfbm9kZV9oZWFkICpoZWFkKSk7 DQogCXN0cnVjdAlyYWRpeF9ub2RlICooKnJuaF9tYXRjaGFkZHIpCS8qIGxv Y2F0ZSBiYXNlZCBvbiBzb2NrYWRkciAqLw0KQEAgLTIwMiw3ICsyMDIsNyBA QA0KIAkgKnJuX2FkZG1hc2sgX19QKCh2b2lkICosIGludCwgaW50KSksDQog CSAqcm5fYWRkcm91dGUgX19QKCh2b2lkICosIHZvaWQgKiwgc3RydWN0IHJh ZGl4X25vZGVfaGVhZCAqLA0KIAkJCXN0cnVjdCByYWRpeF9ub2RlIFsyXSkp LA0KLQkgKnJuX2RlbGV0ZSBfX1AoKHZvaWQgKiwgdm9pZCAqLCBzdHJ1Y3Qg cmFkaXhfbm9kZV9oZWFkICopKSwNCisJICpybl9kZWxldGUgX19QKCh2b2lk ICosIHZvaWQgKiwgc3RydWN0IHJhZGl4X25vZGVfaGVhZCAqLCBzdHJ1Y3Qg cmFkaXhfbm9kZSAqKSksDQogCSAqcm5faW5zZXJ0IF9fUCgodm9pZCAqLCBz dHJ1Y3QgcmFkaXhfbm9kZV9oZWFkICosIGludCAqLA0KIAkJCXN0cnVjdCBy YWRpeF9ub2RlIFsyXSkpLA0KIAkgKnJuX2xvb2t1cCBfX1AoKHZvaWQgKiwg dm9pZCAqLCBzdHJ1Y3QgcmFkaXhfbm9kZV9oZWFkICopKSwNCmRpZmYgLXUg LXIgLi4vc3JjX29yZ184LjJfMjAxMTAzMjkvc2Jpbi9yb3V0ZWQvcmFkaXgu YyAuL3NiaW4vcm91dGVkL3JhZGl4LmMNCi0tLSAuLi9zcmNfb3JnXzguMl8y MDExMDMyOS9zYmluL3JvdXRlZC9yYWRpeC5jCTIwMDktMDgtMDMgMDg6MTM6 MDYuMDAwMDAwMDAwICswMDAwDQorKysgLi9zYmluL3JvdXRlZC9yYWRpeC5j CTIwMTEtMDQtMDMgMTY6MDg6MDcuMDAwMDAwMDAwICswMDAwDQpAQCAtNjYy LDcgKzY2Miw4IEBADQogc3RhdGljIHN0cnVjdCByYWRpeF9ub2RlICoNCiBy bl9kZWxldGUodm9pZCAqdl9hcmcsDQogCSAgdm9pZCAqbmV0bWFza19hcmcs DQotCSAgc3RydWN0IHJhZGl4X25vZGVfaGVhZCAqaGVhZCkNCisJICBzdHJ1 Y3QgcmFkaXhfbm9kZV9oZWFkICpoZWFkLA0KKwkgIHN0cnVjdCByYWRpeF9u b2RlICpybikNCiB7DQogCXN0cnVjdCByYWRpeF9ub2RlICp0LCAqcCwgKngs ICp0dDsNCiAJc3RydWN0IHJhZGl4X21hc2sgKm0sICpzYXZlZF9tLCAqKm1w Ow0KQEAgLTY3MCw2ICs2NzEsOCBAQA0KIAljYWRkcl90IHYsIG5ldG1hc2s7 DQogCWludCBiLCBoZWFkX29mZiwgdmxlbjsNCiANCisJcm4gPSBOVUxMOyAv KiBYWFggbWFrZSBjb21waWxlciBoYXBweSAqLw0KKw0KIAl2ID0gdl9hcmc7 DQogCW5ldG1hc2sgPSBuZXRtYXNrX2FyZzsNCiAJeCA9IGhlYWQtPnJuaF90 cmVldG9wOw0KZGlmZiAtdSAtciAuLi9zcmNfb3JnXzguMl8yMDExMDMyOS9z YmluL3JvdXRlZC9yYWRpeC5oIC4vc2Jpbi9yb3V0ZWQvcmFkaXguaA0KLS0t IC4uL3NyY19vcmdfOC4yXzIwMTEwMzI5L3NiaW4vcm91dGVkL3JhZGl4LmgJ MjAwOS0wOC0wMyAwODoxMzowNi4wMDAwMDAwMDAgKzAwMDANCisrKyAuL3Ni aW4vcm91dGVkL3JhZGl4LmgJMjAxMS0wNC0wMyAxNjowODowNy4wMDAwMDAw MDAgKzAwMDANCkBAIC0xMTUsNyArMTE1LDcgQEANCiAJCSh2b2lkICp2LCB2 b2lkICptYXNrLA0KIAkJICAgICBzdHJ1Y3QgcmFkaXhfbm9kZV9oZWFkICpo ZWFkLCBzdHJ1Y3QgcmFkaXhfbm9kZSBub2Rlc1tdKTsNCiAJc3RydWN0CXJh ZGl4X25vZGUgKigqcm5oX2RlbGFkZHIpCS8qIHJlbW92ZSBiYXNlZCBvbiBz b2NrYWRkciAqLw0KLQkJKHZvaWQgKnYsIHZvaWQgKm1hc2ssIHN0cnVjdCBy YWRpeF9ub2RlX2hlYWQgKmhlYWQpOw0KKwkJKHZvaWQgKnYsIHZvaWQgKm1h c2ssIHN0cnVjdCByYWRpeF9ub2RlX2hlYWQgKmhlYWQsIHN0cnVjdCByYWRp eF9ub2RlICpybik7DQogCXN0cnVjdAlyYWRpeF9ub2RlICooKnJuaF9kZWxw a3QpCS8qIHJlbW92ZSBiYXNlZCBvbiBwYWNrZXQgaGRyICovDQogCQkodm9p ZCAqdiwgdm9pZCAqbWFzaywgc3RydWN0IHJhZGl4X25vZGVfaGVhZCAqaGVh ZCk7DQogCXN0cnVjdAlyYWRpeF9ub2RlICooKnJuaF9tYXRjaGFkZHIpCS8q IGxvY2F0ZSBiYXNlZCBvbiBzb2NrYWRkciAqLw0KZGlmZiAtdSAtciAuLi9z cmNfb3JnXzguMl8yMDExMDMyOS9zYmluL3JvdXRlZC90YWJsZS5jIC4vc2Jp bi9yb3V0ZWQvdGFibGUuYw0KLS0tIC4uL3NyY19vcmdfOC4yXzIwMTEwMzI5 L3NiaW4vcm91dGVkL3RhYmxlLmMJMjAwOS0wOC0wMyAwODoxMzowNi4wMDAw MDAwMDAgKzAwMDANCisrKyAuL3NiaW4vcm91dGVkL3RhYmxlLmMJMjAxMS0w NC0wMyAxNjowODowNy4wMDAwMDAwMDAgKzAwMDANCkBAIC0xODY1LDcgKzE4 NjUsNyBAQA0KIAltYXNrX3NvY2suc2luX2FkZHIuc19hZGRyID0gaHRvbmwo cnQtPnJ0X21hc2spOw0KIAltYXNrdHJpbSgmbWFza19zb2NrKTsNCiAJaWYg KHJ0ICE9IChzdHJ1Y3QgcnRfZW50cnkgKilyaGVhZC0+cm5oX2RlbGFkZHIo JmRzdF9zb2NrLCAmbWFza19zb2NrLA0KLQkJCQkJCQlyaGVhZCkpIHsNCisJ CQkJCQkJcmhlYWQsIE5VTEwpKSB7DQogCQltc2dsb2coInJuaF9kZWxhZGRy KCkgZmFpbGVkIik7DQogCX0gZWxzZSB7DQogCQlmcmVlKHJ0KTsNCmRpZmYg LXUgLXIgLi4vc3JjX29yZ184LjJfMjAxMTAzMjkvc3lzL2NvbnRyaWIvaXBm aWx0ZXIvbmV0aW5ldC9pcF9wb29sLmMgLi9zeXMvY29udHJpYi9pcGZpbHRl ci9uZXRpbmV0L2lwX3Bvb2wuYw0KLS0tIC4uL3NyY19vcmdfOC4yXzIwMTEw MzI5L3N5cy9jb250cmliL2lwZmlsdGVyL25ldGluZXQvaXBfcG9vbC5jCTIw MDctMTAtMTggMjE6NDI6MzguMDAwMDAwMDAwICswMDAwDQorKysgLi9zeXMv Y29udHJpYi9pcGZpbHRlci9uZXRpbmV0L2lwX3Bvb2wuYwkyMDExLTA0LTAz IDE2OjA3OjQ2LjAwMDAwMDAwMCArMDAwMA0KQEAgLTY3LDYgKzY3LDcgQEAN CiAjaW5jbHVkZSAibmV0aW5ldC9pcF9jb21wYXQuaCINCiAjaW5jbHVkZSAi bmV0aW5ldC9pcF9maWwuaCINCiAjaW5jbHVkZSAibmV0aW5ldC9pcF9wb29s LmgiDQorI2luY2x1ZGUgPHN5cy9ybWxvY2suaD4NCiANCiAjaWYgZGVmaW5l ZChJUEZJTFRFUl9MT09LVVApICYmIGRlZmluZWQoX0tFUk5FTCkgJiYgXA0K ICAgICAgICgoQlNEID49IDE5ODkxMSkgJiYgIWRlZmluZWQoX19vc2ZfXykg JiYgXA0KQEAgLTYyMCw3ICs2MjEsNyBAQA0KIA0KIAlSQURJWF9OT0RFX0hF QURfTE9DSyhpcG8tPmlwb19oZWFkKTsNCiAJaXBvLT5pcG9faGVhZC0+cm5o X2RlbGFkZHIoJmlwZS0+aXBuX2FkZHIsICZpcGUtPmlwbl9tYXNrLA0KLQkJ CQkgICBpcG8tPmlwb19oZWFkKTsNCisJCQkJICAgaXBvLT5pcG9faGVhZCwg TlVMTCk7DQogCVJBRElYX05PREVfSEVBRF9VTkxPQ0soaXBvLT5pcG9faGVh ZCk7DQogDQogCWlwX3Bvb2xfbm9kZV9kZXJlZihpcGUpOw0KQEAgLTc1MSw3 ICs3NTIsNyBAQA0KIAlSQURJWF9OT0RFX0hFQURfTE9DSyhpcG8tPmlwb19o ZWFkKTsNCiAJd2hpbGUgKChuID0gaXBvLT5pcG9fbGlzdCkgIT0gTlVMTCkg ew0KIAkJaXBvLT5pcG9faGVhZC0+cm5oX2RlbGFkZHIoJm4tPmlwbl9hZGRy LCAmbi0+aXBuX21hc2ssDQotCQkJCQkgICBpcG8tPmlwb19oZWFkKTsNCisJ CQkJCSAgIGlwby0+aXBvX2hlYWQsIE5VTEwpOw0KIA0KIAkJKm4tPmlwbl9w bmV4dCA9IG4tPmlwbl9uZXh0Ow0KIAkJaWYgKG4tPmlwbl9uZXh0KQ0KQEAg LTk2Myw3ICs5NjQsNyBAQA0KIAlzdHJ1Y3QgcmFkaXhfbm9kZV9oZWFkICpy bmggPSBwOw0KIAlzdHJ1Y3QgcmFkaXhfbm9kZSAqZDsNCiANCi0JZCA9IHJu aC0+cm5oX2RlbGFkZHIobi0+cm5fa2V5LCBOVUxMLCBybmgpOw0KKwlkID0g cm5oLT5ybmhfZGVsYWRkcihuLT5ybl9rZXksIE5VTEwsIHJuaCwgTlVMTCk7 DQogCWlmIChkICE9IE5VTEwpIHsNCiAJCUZyZWVTKGQsIG1heF9rZXlsZW4g KyAyICogc2l6ZW9mICgqZCkpOw0KIAl9DQpkaWZmIC11IC1yIC4uL3NyY19v cmdfOC4yXzIwMTEwMzI5L3N5cy9jb250cmliL3BmL25ldC9wZi5jIC4vc3lz L2NvbnRyaWIvcGYvbmV0L3BmLmMNCi0tLSAuLi9zcmNfb3JnXzguMl8yMDEx MDMyOS9zeXMvY29udHJpYi9wZi9uZXQvcGYuYwkyMDEwLTA5LTIwIDE3OjAz OjEwLjAwMDAwMDAwMCArMDAwMA0KKysrIC4vc3lzL2NvbnRyaWIvcGYvbmV0 L3BmLmMJMjAxMS0wNC0wMyAxNjowNzo0Ni4wMDAwMDAwMDAgKzAwMDANCkBA IC05OSw5ICs5OSw3IEBADQogI2luY2x1ZGUgPG5ldC9pZl90eXBlcy5oPg0K ICNpbmNsdWRlIDxuZXQvYnBmLmg+DQogI2luY2x1ZGUgPG5ldC9yb3V0ZS5o Pg0KLSNpZm5kZWYgX19GcmVlQlNEX18NCiAjaW5jbHVkZSA8bmV0L3JhZGl4 X21wYXRoLmg+DQotI2VuZGlmDQogDQogI2luY2x1ZGUgPG5ldGluZXQvaW4u aD4NCiAjaW5jbHVkZSA8bmV0aW5ldC9pbl92YXIuaD4NCkBAIC02MTY2LDkg KzYxNjQsOSBAQA0KIAkJCWlmIChraWYtPnBmaWtfaWZwID09IGlmcCkNCiAJ CQkJcmV0ID0gMTsNCiAjaWZkZWYgX19GcmVlQlNEX18gLyogTVVMVElQQVRI X1JPVVRJTkcgKi8NCi0JCQlybiA9IE5VTEw7DQotI2Vsc2UNCiAJCQlybiA9 IHJuX21wYXRoX25leHQocm4pOw0KKyNlbHNlDQorCQkJcm4gPSBybl9tcGF0 aF9uZXh0KHJuLCAwKTsNCiAjZW5kaWYNCiAJCX0gd2hpbGUgKGNoZWNrX21w YXRoID09IDEgJiYgcm4gIT0gTlVMTCAmJiByZXQgPT0gMCk7DQogCX0gZWxz ZQ0KZGlmZiAtdSAtciAuLi9zcmNfb3JnXzguMl8yMDExMDMyOS9zeXMvY29u dHJpYi9wZi9uZXQvcGZfdGFibGUuYyAuL3N5cy9jb250cmliL3BmL25ldC9w Zl90YWJsZS5jDQotLS0gLi4vc3JjX29yZ184LjJfMjAxMTAzMjkvc3lzL2Nv bnRyaWIvcGYvbmV0L3BmX3RhYmxlLmMJMjAwOS0wOC0wMyAwODoxMzowNi4w MDAwMDAwMDAgKzAwMDANCisrKyAuL3N5cy9jb250cmliL3BmL25ldC9wZl90 YWJsZS5jCTIwMTEtMDQtMDMgMTY6MDc6NDYuMDAwMDAwMDAwICswMDAwDQpA QCAtNDQsNyArNDQsNyBAQA0KICNpbmNsdWRlIDxzeXMvbWJ1Zi5oPg0KICNp bmNsdWRlIDxzeXMva2VybmVsLmg+DQogI2luY2x1ZGUgPHN5cy9sb2NrLmg+ DQotI2luY2x1ZGUgPHN5cy9yd2xvY2suaD4NCisjaW5jbHVkZSA8c3lzL3Jt bG9jay5oPg0KICNpZmRlZiBfX0ZyZWVCU0RfXw0KICNpbmNsdWRlIDxzeXMv bWFsbG9jLmg+DQogI2VuZGlmDQpAQCAtMTExNCwxNyArMTExNCw5IEBADQog I2VuZGlmDQogCWlmIChLRU5UUllfTkVUV09SSyhrZSkpIHsNCiAJCXBmcl9w cmVwYXJlX25ldHdvcmsoJm1hc2ssIGtlLT5wZnJrZV9hZiwga2UtPnBmcmtl X25ldCk7DQotI2lmZGVmIF9fRnJlZUJTRF9fDQotCQlybiA9IHJuX2RlbGV0 ZSgma2UtPnBmcmtlX3NhLCAmbWFzaywgaGVhZCk7DQotI2Vsc2UNCiAJCXJu ID0gcm5fZGVsZXRlKCZrZS0+cGZya2Vfc2EsICZtYXNrLCBoZWFkLCBOVUxM KTsNCi0jZW5kaWYNCiAJfSBlbHNlDQotI2lmZGVmIF9fRnJlZUJTRF9fDQot CQlybiA9IHJuX2RlbGV0ZSgma2UtPnBmcmtlX3NhLCBOVUxMLCBoZWFkKTsN Ci0jZWxzZQ0KIAkJcm4gPSBybl9kZWxldGUoJmtlLT5wZnJrZV9zYSwgTlVM TCwgaGVhZCwgTlVMTCk7DQotI2VuZGlmDQogCXNwbHgocyk7DQogDQogCWlm IChybiA9PSBOVUxMKSB7DQpkaWZmIC11IC1yIC4uL3NyY19vcmdfOC4yXzIw MTEwMzI5L3N5cy9rZXJuL3N1YnJfd2l0bmVzcy5jIC4vc3lzL2tlcm4vc3Vi cl93aXRuZXNzLmMNCi0tLSAuLi9zcmNfb3JnXzguMl8yMDExMDMyOS9zeXMv a2Vybi9zdWJyX3dpdG5lc3MuYwkyMDExLTAzLTI4IDE1OjI2OjQ4LjAwMDAw MDAwMCArMDAwMA0KKysrIC4vc3lzL2tlcm4vc3Vicl93aXRuZXNzLmMJMjAx MS0wNC0wMyAxNjowNzo1NC4wMDAwMDAwMDAgKzAwMDANCkBAIC01MDgsNyAr NTA4LDcgQEANCiAJICogUm91dGluZw0KIAkgKi8NCiAJeyAic29fcmN2Iiwg JmxvY2tfY2xhc3NfbXR4X3NsZWVwIH0sDQotCXsgInJhZGl4IG5vZGUgaGVh ZCIsICZsb2NrX2NsYXNzX3J3IH0sDQorCXsgInJhZGl4IG5vZGUgaGVhZCIs ICZsb2NrX2NsYXNzX3JtIH0sDQogCXsgInJ0ZW50cnkiLCAmbG9ja19jbGFz c19tdHhfc2xlZXAgfSwNCiAJeyAiaWZhZGRyIiwgJmxvY2tfY2xhc3NfbXR4 X3NsZWVwIH0sDQogCXsgTlVMTCwgTlVMTCB9LA0KZGlmZiAtdSAtciAuLi9z cmNfb3JnXzguMl8yMDExMDMyOS9zeXMva2Vybi92ZnNfZXhwb3J0LmMgLi9z eXMva2Vybi92ZnNfZXhwb3J0LmMNCi0tLSAuLi9zcmNfb3JnXzguMl8yMDEx MDMyOS9zeXMva2Vybi92ZnNfZXhwb3J0LmMJMjAwOS0xMC0wMSAxMzoxMTo0 NS4wMDAwMDAwMDAgKzAwMDANCisrKyAuL3N5cy9rZXJuL3Zmc19leHBvcnQu YwkyMDExLTA0LTAzIDE2OjA3OjU0LjAwMDAwMDAwMCArMDAwMA0KQEAgLTQz LDYgKzQzLDcgQEANCiAjaW5jbHVkZSA8c3lzL2phaWwuaD4NCiAjaW5jbHVk ZSA8c3lzL2tlcm5lbC5oPg0KICNpbmNsdWRlIDxzeXMvbG9jay5oPg0KKyNp bmNsdWRlIDxzeXMvcm1sb2NrLmg+DQogI2luY2x1ZGUgPHN5cy9tYWxsb2Mu aD4NCiAjaW5jbHVkZSA8c3lzL21idWYuaD4NCiAjaW5jbHVkZSA8c3lzL21v dW50Lmg+DQpAQCAtMjI4LDcgKzIyOSw3IEBADQogCXN0cnVjdCByYWRpeF9u b2RlX2hlYWQgKnJuaCA9IChzdHJ1Y3QgcmFkaXhfbm9kZV9oZWFkICopIHc7 DQogCXN0cnVjdCB1Y3JlZCAqY3JlZDsNCiANCi0JKCpybmgtPnJuaF9kZWxh ZGRyKSAocm4tPnJuX2tleSwgcm4tPnJuX21hc2ssIHJuaCk7DQorCSgqcm5o LT5ybmhfZGVsYWRkcikgKHJuLT5ybl9rZXksIHJuLT5ybl9tYXNrLCBybmgs IE5VTEwpOw0KIAljcmVkID0gKChzdHJ1Y3QgbmV0Y3JlZCAqKXJuKS0+bmV0 Y19hbm9uOw0KIAlpZiAoY3JlZCAhPSBOVUxMKQ0KIAkJY3JmcmVlKGNyZWQp Ow0KQEAgLTQyNyw2ICs0MjgsNyBAQA0KIAlyZWdpc3RlciBzdHJ1Y3QgbmV0 Y3JlZCAqbnA7DQogCXJlZ2lzdGVyIHN0cnVjdCByYWRpeF9ub2RlX2hlYWQg KnJuaDsNCiAJc3RydWN0IHNvY2thZGRyICpzYWRkcjsNCisJc3RydWN0IHJt X3ByaW90cmFja2VyIHRyYWNrZXI7DQogDQogCW5lcCA9IG1wLT5tbnRfZXhw b3J0Ow0KIAlpZiAobmVwID09IE5VTEwpDQpAQCAtNDQwLDEwICs0NDIsMTAg QEANCiAJCQlzYWRkciA9IG5hbTsNCiAJCQlybmggPSBuZXAtPm5lX3J0YWJs ZVtzYWRkci0+c2FfZmFtaWx5XTsNCiAJCQlpZiAocm5oICE9IE5VTEwpIHsN Ci0JCQkJUkFESVhfTk9ERV9IRUFEX1JMT0NLKHJuaCk7DQorCQkJCVJBRElY X05PREVfSEVBRF9STE9DSyhybmgsICZ0cmFja2VyKTsNCiAJCQkJbnAgPSAo c3RydWN0IG5ldGNyZWQgKikNCiAJCQkJICAgICgqcm5oLT5ybmhfbWF0Y2hh ZGRyKShzYWRkciwgcm5oKTsNCi0JCQkJUkFESVhfTk9ERV9IRUFEX1JVTkxP Q0socm5oKTsNCisJCQkJUkFESVhfTk9ERV9IRUFEX1JVTkxPQ0socm5oLCAm dHJhY2tlcik7DQogCQkJCWlmIChucCAmJiBucC0+bmV0Y19ybm9kZXMtPnJu X2ZsYWdzICYgUk5GX1JPT1QpDQogCQkJCQlucCA9IE5VTEw7DQogCQkJfQ0K ZGlmZiAtdSAtciAuLi9zcmNfb3JnXzguMl8yMDExMDMyOS9zeXMvbmV0L2lm LmMgLi9zeXMvbmV0L2lmLmMNCi0tLSAuLi9zcmNfb3JnXzguMl8yMDExMDMy OS9zeXMvbmV0L2lmLmMJMjAxMS0wMy0yOCAxNToyNjo1MS4wMDAwMDAwMDAg KzAwMDANCisrKyAuL3N5cy9uZXQvaWYuYwkyMDExLTA0LTAzIDE2OjA3OjU3 LjAwMDAwMDAwMCArMDAwMA0KQEAgLTQ5LDYgKzQ5LDcgQEANCiAjaW5jbHVk ZSA8c3lzL3Byb3Rvc3cuaD4NCiAjaW5jbHVkZSA8c3lzL2tlcm5lbC5oPg0K ICNpbmNsdWRlIDxzeXMvbG9jay5oPg0KKyNpbmNsdWRlIDxzeXMvcm1sb2Nr Lmg+DQogI2luY2x1ZGUgPHN5cy9yZWZjb3VudC5oPg0KICNpbmNsdWRlIDxz eXMvbW9kdWxlLmg+DQogI2luY2x1ZGUgPHN5cy9yd2xvY2suaD4NCmRpZmYg LXUgLXIgLi4vc3JjX29yZ184LjJfMjAxMTAzMjkvc3lzL25ldC9wZmlsLmMg Li9zeXMvbmV0L3BmaWwuYw0KLS0tIC4uL3NyY19vcmdfOC4yXzIwMTEwMzI5 L3N5cy9uZXQvcGZpbC5jCTIwMTAtMDItMDcgMDk6MDA6MjIuMDAwMDAwMDAw ICswMDAwDQorKysgLi9zeXMvbmV0L3BmaWwuYwkyMDExLTA0LTAzIDE2OjA3 OjU3LjAwMDAwMDAwMCArMDAwMA0KQEAgLTM5LDcgKzM5LDYgQEANCiAjaW5j bHVkZSA8c3lzL3NvY2tldHZhci5oPg0KICNpbmNsdWRlIDxzeXMvc3lzdG0u aD4NCiAjaW5jbHVkZSA8c3lzL2NvbmR2YXIuaD4NCi0jaW5jbHVkZSA8c3lz L2xvY2suaD4NCiAjaW5jbHVkZSA8c3lzL211dGV4Lmg+DQogI2luY2x1ZGUg PHN5cy9wcm9jLmg+DQogI2luY2x1ZGUgPHN5cy9xdWV1ZS5oPg0KZGlmZiAt dSAtciAuLi9zcmNfb3JnXzguMl8yMDExMDMyOS9zeXMvbmV0L3JhZGl4LmMg Li9zeXMvbmV0L3JhZGl4LmMNCi0tLSAuLi9zcmNfb3JnXzguMl8yMDExMDMy OS9zeXMvbmV0L3JhZGl4LmMJMjAxMC0wNC0wMiAwNTowMjo1MC4wMDAwMDAw MDAgKzAwMDANCisrKyAuL3N5cy9uZXQvcmFkaXguYwkyMDExLTA0LTAzIDE2 OjA3OjU3LjAwMDAwMDAwMCArMDAwMA0KQEAgLTQxLDYgKzQxLDcgQEANCiAj aW5jbHVkZSA8c3lzL3N5c3RtLmg+DQogI2luY2x1ZGUgPHN5cy9tYWxsb2Mu aD4NCiAjaW5jbHVkZSA8c3lzL3N5c2xvZy5oPg0KKyNpbmNsdWRlIDxzeXMv cm1sb2NrLmg+DQogI2luY2x1ZGUgPG5ldC9yYWRpeC5oPg0KICNpbmNsdWRl ICJvcHRfbXBhdGguaCINCiAjaWZkZWYgUkFESVhfTVBBVEgNCkBAIC02MTQs NyArNjE1LDcgQEANCiAJc3RydWN0IHJhZGl4X25vZGUgdHJlZW5vZGVzWzJd Ow0KIHsNCiAJY2FkZHJfdCB2ID0gKGNhZGRyX3Qpdl9hcmcsIG5ldG1hc2sg PSAoY2FkZHJfdCluX2FyZzsNCi0JcmVnaXN0ZXIgc3RydWN0IHJhZGl4X25v ZGUgKnQsICp4ID0gMCwgKnR0Ow0KKwlyZWdpc3RlciBzdHJ1Y3QgcmFkaXhf bm9kZSAqdCwgKnggPSAwLCAqeHggPSAwLCAqdHQ7DQogCXN0cnVjdCByYWRp eF9ub2RlICpzYXZlZF90dCwgKnRvcCA9IGhlYWQtPnJuaF90cmVldG9wOw0K IAlzaG9ydCBiID0gMCwgYl9sZWFmID0gMDsNCiAJaW50IGtleWR1cGxpY2F0 ZWQ7DQpAQCAtNzIzLDEyICs3MjQsMTkgQEANCiAJCXggPSB0LT5ybl9yaWdo dDsNCiAJLyogUHJvbW90ZSBnZW5lcmFsIHJvdXRlcyBmcm9tIGJlbG93ICov DQogCWlmICh4LT5ybl9iaXQgPCAwKSB7DQotCSAgICBmb3IgKG1wID0gJnQt PnJuX21rbGlzdDsgeDsgeCA9IHgtPnJuX2R1cGVka2V5KQ0KKyAgICAgICAg ICAgIGZvciAobXAgPSAmdC0+cm5fbWtsaXN0OyB4OyB4eCA9IHgsIHggPSB4 LT5ybl9kdXBlZGtleSkgew0KKyAgICAgICAgICAgICAgICBpZiAoeHggJiYg eHgtPnJuX21rbGlzdCAmJiB4eC0+cm5fbWFzayA9PSB4LT5ybl9tYXNrICYm DQorCQkJCXgtPnJuX21rbGlzdCA9PSAwKSB7DQorCQkJLyogbXVsdGlwYXRo IHJvdXRlLCBidW1wIHJlZmNvdW50IG9uIGZpcnN0IG1rbGlzdCAqLw0KKwkJ CXgtPnJuX21rbGlzdCA9IHh4LT5ybl9ta2xpc3Q7DQorCQkJeC0+cm5fbWts aXN0LT5ybV9yZWZzKys7DQorCQl9DQogCQlpZiAoeC0+cm5fbWFzayAmJiAo eC0+cm5fYml0ID49IGJfbGVhZikgJiYgeC0+cm5fbWtsaXN0ID09IDApIHsN CiAJCQkqbXAgPSBtID0gcm5fbmV3X3JhZGl4X21hc2soeCwgMCk7DQogCQkJ aWYgKG0pDQogCQkJCW1wID0gJm0tPnJtX21rbGlzdDsNCiAJCX0NCisJICAg IH0NCiAJfSBlbHNlIGlmICh4LT5ybl9ta2xpc3QpIHsNCiAJCS8qDQogCQkg KiBTa2lwIG92ZXIgbWFza3Mgd2hvc2UgaW5kZXggaXMgPiB0aGF0IG9mIG5l dyBub2RlDQpAQCAtNzYwLDExICs3NjgsMzAgQEANCiAJCQlicmVhazsNCiAJ CWlmIChtLT5ybV9mbGFncyAmIFJORl9OT1JNQUwpIHsNCiAJCQltbWFzayA9 IG0tPnJtX2xlYWYtPnJuX21hc2s7DQotCQkJaWYgKHR0LT5ybl9mbGFncyAm IFJORl9OT1JNQUwpIHsNCi0jaWYgIWRlZmluZWQoUkFESVhfTVBBVEgpDQot CQkJICAgIGxvZyhMT0dfRVJSLA0KLQkJCSAgICAgICAgIk5vbi11bmlxdWUg bm9ybWFsIHJvdXRlLCBtYXNrIG5vdCBlbnRlcmVkXG4iKTsNCisJCQlpZiAo a2V5ZHVwbGljYXRlZCkgew0KKwkJCQlpZiAobS0+cm1fbGVhZi0+cm5fcGFy ZW50ID09IHR0KQ0KKwkJCQkJLyogbmV3IHJvdXRlIGlzIGJldHR0ZXIgKi8N CisJCQkJCW0tPnJtX2xlYWYgPSB0dDsNCisjaWZkZWYgRElBR05PU1RJQw0K KwkJCQllbHNlIHsNCisJCQkJCWZvciAodCA9IG0tPnJtX2xlYWY7IHQ7DQor CQkJCQkJdCA9IHQtPnJuX2R1cGVka2V5KSB7DQorCQkJCQkJYnJlYWs7DQor CQkJCQl9DQorCQkJCQlpZiAodCA9PSBOVUxMKSB7DQorCQkJCQkJbG9nKExP R19FUlIsICJOb24tdW5pcXVlICINCisJCQkJCQkJIm5vcm1hbCByb3V0ZSBv biBkdXBlZGtleSwgIg0KKwkJCQkJCQkibWFzayBub3QgZW50ZXJlZFxuIik7 DQorCQkJCQkJcmV0dXJuIHR0Ow0KKwkJCQkJfQ0KKwkJCQl9DQogI2VuZGlm DQorCQkJCW0tPnJtX3JlZnMrKzsNCisJCQkJdHQtPnJuX21rbGlzdCA9IG07 DQorCQkJCXJldHVybiB0dDsNCisJCQl9IGVsc2UgaWYgKHR0LT5ybl9mbGFn cyAmIFJORl9OT1JNQUwpIHsNCisJCQkJbG9nKExPR19FUlIsICJOb24tdW5p cXVlIG5vcm1hbCByb3V0ZSwiDQorCQkJCQkiIG1hc2sgbm90IGVudGVyZWRc biIpOw0KIAkJCQlyZXR1cm4gdHQ7DQogCQkJfQ0KIAkJfSBlbHNlDQpAQCAt NzgzLDkgKzgxMCwxMCBAQA0KIH0NCiANCiBzdHJ1Y3QgcmFkaXhfbm9kZSAq DQotcm5fZGVsZXRlKHZfYXJnLCBuZXRtYXNrX2FyZywgaGVhZCkNCitybl9k ZWxldGUodl9hcmcsIG5ldG1hc2tfYXJnLCBoZWFkLCBybikNCiAJdm9pZCAq dl9hcmcsICpuZXRtYXNrX2FyZzsNCiAJc3RydWN0IHJhZGl4X25vZGVfaGVh ZCAqaGVhZDsNCisJc3RydWN0IHJhZGl4X25vZGUgKnJuOw0KIHsNCiAJcmVn aXN0ZXIgc3RydWN0IHJhZGl4X25vZGUgKnQsICpwLCAqeCwgKnR0Ow0KIAlz dHJ1Y3QgcmFkaXhfbWFzayAqbSwgKnNhdmVkX20sICoqbXA7DQpAQCAtODE1 LDEzICs4NDMsMzcgQEANCiAJCQlpZiAoKHR0ID0gdHQtPnJuX2R1cGVka2V5 KSA9PSAwKQ0KIAkJCQlyZXR1cm4gKDApOw0KIAl9DQorI2lmZGVmIFJBRElY X01QQVRIDQorCWlmIChybikgew0KKwkJd2hpbGUgKHR0ICE9IHJuKQ0KKwkJ CWlmICgodHQgPSB0dC0+cm5fZHVwZWRrZXkpID09IDApDQorCQkJCXJldHVy biAoMCk7DQorCX0NCisjZW5kaWYNCiAJaWYgKHR0LT5ybl9tYXNrID09IDAg fHwgKHNhdmVkX20gPSBtID0gdHQtPnJuX21rbGlzdCkgPT0gMCkNCiAJCWdv dG8gb24xOw0KIAlpZiAodHQtPnJuX2ZsYWdzICYgUk5GX05PUk1BTCkgew0K LQkJaWYgKG0tPnJtX2xlYWYgIT0gdHQgfHwgbS0+cm1fcmVmcyA+IDApIHsN CisJCWlmIChtLT5ybV9sZWFmICE9IHR0ICYmIG0tPnJtX3JlZnMgPT0gMCkg ew0KIAkJCWxvZyhMT0dfRVJSLCAicm5fZGVsZXRlOiBpbmNvbnNpc3RlbnQg YW5ub3RhdGlvblxuIik7DQogCQkJcmV0dXJuIDA7ICAvKiBkYW5nbGluZyBy ZWYgY291bGQgY2F1c2UgZGlzYXN0ZXIgKi8NCiAJCX0NCisJCWlmIChtLT5y bV9sZWFmICE9IHR0KSB7DQorCQkJaWYgKC0tbS0+cm1fcmVmcyA+PSAwKQ0K KwkJCQlnb3RvIG9uMTsNCisJCX0NCisJCS8qIHR0IGlzIGN1cnJlbnRseSB0 aGUgaGVhZCBvZiB0aGUgcG9zc2libGUgbXVsdGlwYXRoIGNoYWluICovDQor CQlpZiAobS0+cm1fcmVmcyA+IDApIHsNCisJCQlpZiAodHQtPnJuX2R1cGVk a2V5ID09IE5VTEwgfHwNCisJCQkJdHQtPnJuX2R1cGVka2V5LT5ybl9ta2xp c3QgIT0gbSkgew0KKwkJCQkJbG9nKExPR19FUlIsICJybl9kZWxldGU6IGlu Y29uc2lzdGVudCAiDQorCQkJCQkJImR1cGVka2V5IGxpc3RcbiIpOw0KKwkJ CQkJcmV0dXJuICgwKTsNCisJCQl9DQorCQkJbS0+cm1fbGVhZiA9IHR0LT5y bl9kdXBlZGtleTsNCisJCQktLW0tPnJtX3JlZnM7DQorCQkJZ290byBvbjE7 DQorCQl9DQorCQkvKiBlbHNlIHR0IGlzIGxhc3QgYW5kIG9ubHkgcm91dGUg Ki8NCiAJfSBlbHNlIHsNCiAJCWlmIChtLT5ybV9tYXNrICE9IHR0LT5ybl9t YXNrKSB7DQogCQkJbG9nKExPR19FUlIsICJybl9kZWxldGU6IGluY29uc2lz dGVudCBhbm5vdGF0aW9uXG4iKTsNCkBAIC04NzUsMTUgKzkyNywxMCBAQA0K IAkJCWVsc2UNCiAJCQkJdC0+cm5fcmlnaHQgPSB4Ow0KIAkJfSBlbHNlIHsN Ci0JCQkvKiBmaW5kIG5vZGUgaW4gZnJvbnQgb2YgdHQgb24gdGhlIGNoYWlu ICovDQotCQkJZm9yICh4ID0gcCA9IHNhdmVkX3R0OyBwICYmIHAtPnJuX2R1 cGVka2V5ICE9IHR0OykNCi0JCQkJcCA9IHAtPnJuX2R1cGVka2V5Ow0KLQkJ CWlmIChwKSB7DQotCQkJCXAtPnJuX2R1cGVka2V5ID0gdHQtPnJuX2R1cGVk a2V5Ow0KLQkJCQlpZiAodHQtPnJuX2R1cGVka2V5KQkJLyogcGFyZW50ICov DQotCQkJCQl0dC0+cm5fZHVwZWRrZXktPnJuX3BhcmVudCA9IHA7DQotCQkJ CQkJCQkvKiBwYXJlbnQgKi8NCi0JCQl9IGVsc2UgbG9nKExPR19FUlIsICJy bl9kZWxldGU6IGNvdWxkbid0IGZpbmQgdXNcbiIpOw0KKwkJCXggPSBzYXZl ZF90dDsNCisJCQl0LT5ybl9kdXBlZGtleSA9IHR0LT5ybl9kdXBlZGtleTsN CisJCQlpZiAodHQtPnJuX2R1cGVka2V5KQ0KKwkJCQl0dC0+cm5fZHVwZWRr ZXktPnJuX3BhcmVudCA9IHQ7DQogCQl9DQogCQl0ID0gdHQgKyAxOw0KIAkJ aWYgICh0LT5ybl9mbGFncyAmIFJORl9BQ1RJVkUpIHsNCkBAIC05MzEsOCAr OTc4LDE2IEBADQogCQkJCWlmIChtID09IHgtPnJuX21rbGlzdCkgew0KIAkJ CQkJc3RydWN0IHJhZGl4X21hc2sgKm1tID0gbS0+cm1fbWtsaXN0Ow0KIAkJ CQkJeC0+cm5fbWtsaXN0ID0gMDsNCi0JCQkJCWlmICgtLShtLT5ybV9yZWZz KSA8IDApDQorCQkJCQlpZiAoLS0obS0+cm1fcmVmcykgPCAwKSB7DQogCQkJ CQkJTUtGcmVlKG0pOw0KKwkJCQkJfSBlbHNlIGlmIChtLT5ybV9mbGFncyAm IFJORl9OT1JNQUwpIHsNCisJCQkJCQkvKg0KKwkJCQkJCSogZG9uJ3QgcHJv Z3Jlc3MgYmVjYXVzZSB0aGlzDQorCQkJCQkJKiBhIG11bHRpcGF0aCByb3V0 ZS4gTmV4dA0KKwkJCQkJCSogcm91dGUgd2lsbCB1c2UgdGhlIHNhbWUgbS4N CisJCQkJCQkqLw0KKwkJCQkJCW1tID0gbTsNCisJCQkJCX0NCiAJCQkJCW0g PSBtbTsNCiAJCQkJfQ0KIAkJCWlmIChtKQ0KZGlmZiAtdSAtciAuLi9zcmNf b3JnXzguMl8yMDExMDMyOS9zeXMvbmV0L3JhZGl4LmggLi9zeXMvbmV0L3Jh ZGl4LmgNCi0tLSAuLi9zcmNfb3JnXzguMl8yMDExMDMyOS9zeXMvbmV0L3Jh ZGl4LmgJMjAxMC0wMy0yMyAwOTo1ODo1OS4wMDAwMDAwMDAgKzAwMDANCisr KyAuL3N5cy9uZXQvcmFkaXguaAkyMDExLTA0LTAzIDE2OjA3OjU3LjAwMDAw MDAwMCArMDAwMA0KQEAgLTM2LDcgKzM2LDcgQEANCiAjaWZkZWYgX0tFUk5F TA0KICNpbmNsdWRlIDxzeXMvX2xvY2suaD4NCiAjaW5jbHVkZSA8c3lzL19t dXRleC5oPg0KLSNpbmNsdWRlIDxzeXMvX3J3bG9jay5oPg0KKyNpbmNsdWRl IDxzeXMvX3JtbG9jay5oPg0KICNlbmRpZg0KIA0KICNpZmRlZiBNQUxMT0Nf REVDTEFSRQ0KQEAgLTExNCw3ICsxMTQsNyBAQA0KIAkJKHZvaWQgKnYsIHZv aWQgKm1hc2ssDQogCQkgICAgIHN0cnVjdCByYWRpeF9ub2RlX2hlYWQgKmhl YWQsIHN0cnVjdCByYWRpeF9ub2RlIG5vZGVzW10pOw0KIAlzdHJ1Y3QJcmFk aXhfbm9kZSAqKCpybmhfZGVsYWRkcikJLyogcmVtb3ZlIGJhc2VkIG9uIHNv Y2thZGRyICovDQotCQkodm9pZCAqdiwgdm9pZCAqbWFzaywgc3RydWN0IHJh ZGl4X25vZGVfaGVhZCAqaGVhZCk7DQorCQkodm9pZCAqdiwgdm9pZCAqbWFz aywgc3RydWN0IHJhZGl4X25vZGVfaGVhZCAqaGVhZCwgc3RydWN0IHJhZGl4 X25vZGUgKnJuKTsNCiAJc3RydWN0CXJhZGl4X25vZGUgKigqcm5oX2RlbHBr dCkJLyogcmVtb3ZlIGJhc2VkIG9uIHBhY2tldCBoZHIgKi8NCiAJCSh2b2lk ICp2LCB2b2lkICptYXNrLCBzdHJ1Y3QgcmFkaXhfbm9kZV9oZWFkICpoZWFk KTsNCiAJc3RydWN0CXJhZGl4X25vZGUgKigqcm5oX21hdGNoYWRkcikJLyog bG9jYXRlIGJhc2VkIG9uIHNvY2thZGRyICovDQpAQCAtMTMzLDcgKzEzMyw3 IEBADQogCXN0cnVjdAlyYWRpeF9ub2RlIHJuaF9ub2Rlc1szXTsJLyogZW1w dHkgdHJlZSBmb3IgY29tbW9uIGNhc2UgKi8NCiAJaW50CXJuaF9tdWx0aXBh dGg7CQkJLyogbXVsdGlwYXRoIGNhcGFibGUgPyAqLw0KICNpZmRlZiBfS0VS TkVMDQotCXN0cnVjdAlyd2xvY2sgcm5oX2xvY2s7CQkvKiBsb2NrcyBlbnRp cmUgcmFkaXggdHJlZSAqLw0KKwlzdHJ1Y3QJcm1sb2NrIHJuaF9sb2NrOwkJ LyogbG9ja3MgZW50aXJlIHJhZGl4IHRyZWUgKi8NCiAjZW5kaWYNCiB9Ow0K IA0KQEAgLTE0NywxNyArMTQ3LDE1IEBADQogI2RlZmluZSBGcmVlKHApIGZy ZWUoKGNhZGRyX3QpcCwgTV9SVEFCTEUpOw0KIA0KICNkZWZpbmUJUkFESVhf Tk9ERV9IRUFEX0xPQ0tfSU5JVChybmgpCVwNCi0gICAgcndfaW5pdF9mbGFn cygmKHJuaCktPnJuaF9sb2NrLCAicmFkaXggbm9kZSBoZWFkIiwgMCkNCi0j ZGVmaW5lCVJBRElYX05PREVfSEVBRF9MT0NLKHJuaCkJcndfd2xvY2soJihy bmgpLT5ybmhfbG9jaykNCi0jZGVmaW5lCVJBRElYX05PREVfSEVBRF9VTkxP Q0socm5oKQlyd193dW5sb2NrKCYocm5oKS0+cm5oX2xvY2spDQotI2RlZmlu ZQlSQURJWF9OT0RFX0hFQURfUkxPQ0socm5oKQlyd19ybG9jaygmKHJuaCkt PnJuaF9sb2NrKQ0KLSNkZWZpbmUJUkFESVhfTk9ERV9IRUFEX1JVTkxPQ0so cm5oKQlyd19ydW5sb2NrKCYocm5oKS0+cm5oX2xvY2spDQotI2RlZmluZQlS QURJWF9OT0RFX0hFQURfTE9DS19UUllfVVBHUkFERShybmgpCXJ3X3RyeV91 cGdyYWRlKCYocm5oKS0+cm5oX2xvY2spDQotDQotDQotI2RlZmluZQlSQURJ WF9OT0RFX0hFQURfREVTVFJPWShybmgpCXJ3X2Rlc3Ryb3koJihybmgpLT5y bmhfbG9jaykNCi0jZGVmaW5lCVJBRElYX05PREVfSEVBRF9MT0NLX0FTU0VS VChybmgpIHJ3X2Fzc2VydCgmKHJuaCktPnJuaF9sb2NrLCBSQV9MT0NLRUQp DQotI2RlZmluZQlSQURJWF9OT0RFX0hFQURfV0xPQ0tfQVNTRVJUKHJuaCkg cndfYXNzZXJ0KCYocm5oKS0+cm5oX2xvY2ssIFJBX1dMT0NLRUQpDQorCXJt X2luaXRfZmxhZ3MoJihybmgpLT5ybmhfbG9jaywgInJhZGl4IG5vZGUgaGVh ZCIsIDApDQorI2RlZmluZSAgICAgICAgUkFESVhfTk9ERV9IRUFEX0xPQ0so cm5oKSAgICAgICBybV93bG9jaygmKHJuaCktPnJuaF9sb2NrKQ0KKyNkZWZp bmUgICAgICAgIFJBRElYX05PREVfSEVBRF9VTkxPQ0socm5oKSAgICAgcm1f d3VubG9jaygmKHJuaCktPnJuaF9sb2NrKQ0KKyNkZWZpbmUgICAgICAgIFJB RElYX05PREVfSEVBRF9STE9DSyhybmgsIHRyYWNrZXIpICAgICBybV9ybG9j aygmKHJuaCktPnJuaF9sb2NrLCAodHJhY2tlcikpDQorI2RlZmluZSAgICAg ICAgUkFESVhfTk9ERV9IRUFEX1JVTkxPQ0socm5oLCB0cmFja2VyKSAgIHJt X3J1bmxvY2soJihybmgpLT5ybmhfbG9jaywgKHRyYWNrZXIpKQ0KKw0KKyNk ZWZpbmUgICAgICAgIFJBRElYX05PREVfSEVBRF9ERVNUUk9ZKHJuaCkgICAg cm1fZGVzdHJveSgmKHJuaCktPnJuaF9sb2NrKQ0KKyNkZWZpbmUgICAgICAg IFJBRElYX05PREVfSEVBRF9MT0NLX0FTU0VSVChybmgpICAgICAgICBybV93 b3duZWQoJihybmgpLT5ybmhfbG9jaykNCisjZGVmaW5lICAgICAgICBSQURJ WF9OT0RFX0hFQURfV0xPQ0tfQVNTRVJUKHJuaCkgICAgICAgcm1fd293bmVk KCYocm5oKS0+cm5oX2xvY2spDQogI2VuZGlmIC8qIF9LRVJORUwgKi8NCiAN CiB2b2lkCSBybl9pbml0KGludCk7DQpAQCAtMTY4LDcgKzE2Niw3IEBADQog CSAqcm5fYWRkbWFzayh2b2lkICosIGludCwgaW50KSwNCiAJICpybl9hZGRy b3V0ZSAodm9pZCAqLCB2b2lkICosIHN0cnVjdCByYWRpeF9ub2RlX2hlYWQg KiwNCiAJCQlzdHJ1Y3QgcmFkaXhfbm9kZSBbMl0pLA0KLQkgKnJuX2RlbGV0 ZSh2b2lkICosIHZvaWQgKiwgc3RydWN0IHJhZGl4X25vZGVfaGVhZCAqKSwN CisJICpybl9kZWxldGUodm9pZCAqLCB2b2lkICosIHN0cnVjdCByYWRpeF9u b2RlX2hlYWQgKiwgc3RydWN0IHJhZGl4X25vZGUgKiksDQogCSAqcm5fbG9v a3VwICh2b2lkICp2X2FyZywgdm9pZCAqbV9hcmcsDQogCQkgICAgICAgIHN0 cnVjdCByYWRpeF9ub2RlX2hlYWQgKmhlYWQpLA0KIAkgKnJuX21hdGNoKHZv aWQgKiwgc3RydWN0IHJhZGl4X25vZGVfaGVhZCAqKTsNCmRpZmYgLXUgLXIg Li4vc3JjX29yZ184LjJfMjAxMTAzMjkvc3lzL25ldC9yYWRpeF9tcGF0aC5j IC4vc3lzL25ldC9yYWRpeF9tcGF0aC5jDQotLS0gLi4vc3JjX29yZ184LjJf MjAxMTAzMjkvc3lzL25ldC9yYWRpeF9tcGF0aC5jCTIwMTAtMDQtMDIgMDU6 MDI6NTAuMDAwMDAwMDAwICswMDAwDQorKysgLi9zeXMvbmV0L3JhZGl4X21w YXRoLmMJMjAxMS0wNC0wNCAxOTozMzoxNi4wMDAwMDAwMDAgKzAwMDANCkBA IC00NSw2ICs0NSw4IEBADQogI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4NCiAj aW5jbHVkZSA8c3lzL2RvbWFpbi5oPg0KICNpbmNsdWRlIDxzeXMvc3lzbG9n Lmg+DQorI2luY2x1ZGUgPHN5cy9sb2NrLmg+DQorI2luY2x1ZGUgPHN5cy9y bWxvY2suaD4NCiAjaW5jbHVkZSA8bmV0L3JhZGl4Lmg+DQogI2luY2x1ZGUg PG5ldC9yYWRpeF9tcGF0aC5oPg0KICNpbmNsdWRlIDxuZXQvcm91dGUuaD4N CkBAIC01NCw3ICs1Niw3IEBADQogLyoNCiAgKiBnaXZlIHNvbWUgaml0dGVy IHRvIGhhc2gsIHRvIGF2b2lkIHN5bmNocm9uaXphdGlvbiBiZXR3ZWVuIHJv dXRlcnMNCiAgKi8NCi1zdGF0aWMgdWludDMyX3QgaGFzaGppdHRlcjsNCit1 aW50MzJfdCBoYXNoaml0dGVyOw0KIA0KIGludA0KIHJuX21wYXRoX2NhcGFi bGUoc3RydWN0IHJhZGl4X25vZGVfaGVhZCAqcm5oKQ0KQEAgLTc3LDEwICs3 OSwxMSBAQA0KIAkJcmV0dXJuIE5VTEw7DQogfQ0KIA0KLXVpbnQzMl90DQor Ly91aW50MzJfdA0KK2ludDY0X3QNCiBybl9tcGF0aF9jb3VudChzdHJ1Y3Qg cmFkaXhfbm9kZSAqcm4pDQogew0KLQl1aW50MzJfdCBpID0gMDsNCisJaW50 NjRfdCBpID0gMDsNCiAJc3RydWN0IHJ0ZW50cnkgKnJ0Ow0KIAkNCiAJd2hp bGUgKHJuICE9IE5VTEwpIHsNCkBAIC0xMTIsNDYgKzExNSwxNCBAQA0KIAkJ ICogd2UgbmVlZCB0byBjb21wYXJlIHRoZSBpbnRlcmZhY2UgYWRkcmVzcyBi ZWNhdXNlDQogCQkgKiBydF9nYXRld2F5IGlzIGEgc3BlY2lhbCBzb2NrYWRk X2RsIHN0cnVjdHVyZQ0KIAkJICovDQotCQlpZiAocnQtPnJ0X2dhdGV3YXkt PnNhX2ZhbWlseSA9PSBBRl9MSU5LKSB7DQotCQkJaWYgKCFtZW1jbXAocnQt PnJ0X2lmYS0+aWZhX2FkZHIsIGdhdGUsIGdhdGUtPnNhX2xlbikpDQorCQlp ZiAocnQtPnJ0X2dhdGV3YXktPnNhX2xlbiA9PSBnYXRlLT5zYV9sZW4gJiYN CisJCQkhbWVtY21wKHJ0LT5ydF9nYXRld2F5LCBnYXRlLCBnYXRlLT5zYV9s ZW4pKQ0KIAkJCQlicmVhazsNCi0JCX0gZWxzZSB7DQotCQkJaWYgKHJ0LT5y dF9nYXRld2F5LT5zYV9sZW4gPT0gZ2F0ZS0+c2FfbGVuICYmDQotCQkJICAg ICFtZW1jbXAocnQtPnJ0X2dhdGV3YXksIGdhdGUsIGdhdGUtPnNhX2xlbikp DQotCQkJCWJyZWFrOw0KLQkJfQ0KIAl9IHdoaWxlICgocm4gPSBybl9tcGF0 aF9uZXh0KHJuKSkgIT0gTlVMTCk7DQogDQogCXJldHVybiAoc3RydWN0IHJ0 ZW50cnkgKilybjsNCiB9DQogDQotLyogDQotICogZ28gdGhyb3VnaCB0aGUg Y2hhaW4gYW5kIHVubGluayAicnQiIGZyb20gdGhlIGxpc3QNCi0gKiB0aGUg Y2FsbGVyIHdpbGwgZnJlZSAicnQiDQotICovDQotaW50DQotcnRfbXBhdGhf ZGVsZHVwKHN0cnVjdCBydGVudHJ5ICpoZWFkcnQsIHN0cnVjdCBydGVudHJ5 ICpydCkNCi17DQotICAgICAgICBzdHJ1Y3QgcmFkaXhfbm9kZSAqdCwgKnR0 Ow0KLQ0KLSAgICAgICAgaWYgKCFoZWFkcnQgfHwgIXJ0KQ0KLSAgICAgICAg ICAgIHJldHVybiAoMCk7DQotICAgICAgICB0ID0gKHN0cnVjdCByYWRpeF9u b2RlICopaGVhZHJ0Ow0KLSAgICAgICAgdHQgPSBybl9tcGF0aF9uZXh0KHQp Ow0KLSAgICAgICAgd2hpbGUgKHR0KSB7DQotICAgICAgICAgICAgaWYgKHR0 ID09IChzdHJ1Y3QgcmFkaXhfbm9kZSAqKXJ0KSB7DQotICAgICAgICAgICAg ICAgIHQtPnJuX2R1cGVka2V5ID0gdHQtPnJuX2R1cGVka2V5Ow0KLSAgICAg ICAgICAgICAgICB0dC0+cm5fZHVwZWRrZXkgPSBOVUxMOw0KLSAgICAJICAg ICAgICB0dC0+cm5fZmxhZ3MgJj0gflJORl9BQ1RJVkU7DQotCSAgICAgICAg dHRbMV0ucm5fZmxhZ3MgJj0gflJORl9BQ1RJVkU7DQotICAgICAgICAgICAg ICAgIHJldHVybiAoMSk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAg IHQgPSB0dDsNCi0gICAgICAgICAgICB0dCA9IHJuX21wYXRoX25leHQoKHN0 cnVjdCByYWRpeF9ub2RlICopdCk7DQotICAgICAgICB9DQotICAgICAgICBy ZXR1cm4gKDApOw0KLX0NCi0NCiAvKg0KICAqIGNoZWNrIGlmIHdlIGhhdmUg dGhlIHNhbWUga2V5L21hc2svZ2F0ZXdheSBvbiB0aGUgdGFibGUgYWxyZWFk eS4NCiAgKi8NCkBAIC0yNjIsOSArMjMzLDEwIEBADQogcnRhbGxvY19tcGF0 aF9maWIoc3RydWN0IHJvdXRlICpybywgdWludDMyX3QgaGFzaCwgdV9pbnQg ZmlibnVtKQ0KIHsNCiAJc3RydWN0IHJhZGl4X25vZGUgKnJuMCwgKnJuOw0K LQl1X2ludDMyX3QgbjsNCisJdV9pbnQzMl90IG4gPSAwOw0KIAlzdHJ1Y3Qg cnRlbnRyeSAqcnQ7DQogCWludDY0X3Qgd2VpZ2h0Ow0KKwlpbnQ2NF90IGxv d2VzdF93ZWlnaHQ7DQogDQogCS8qDQogCSAqIFhYWCB3ZSBkb24ndCBhdHRl bXB0IHRvIGxvb2t1cCBjYWNoZWQgcm91dGUgYWdhaW47IHdoYXQgc2hvdWxk DQpAQCAtMjg1LDIwICsyNTcsMzIgQEANCiANCiAJLyogYmV5b25kIGhlcmUs IHdlIHVzZSBybiBhcyB0aGUgbWFzdGVyIGNvcHkgKi8NCiAJcm4wID0gcm4g PSAoc3RydWN0IHJhZGl4X25vZGUgKilyby0+cm9fcnQ7DQotCW4gPSBybl9t cGF0aF9jb3VudChybjApOw0KKw0KKwkvKiBmaW5kIGxvd2VzdCB3ZWlnaHQg cm91dGUgKi8NCisJZm9yICggcnQgPSAoc3RydWN0IHJ0ZW50cnkgKilybiwg d2VpZ2h0ID0gcnQtPnJ0X3JteC5ybXhfd2VpZ2h0OyBybiAhPSBOVUxMOyBy biA9IHJuX21wYXRoX25leHQoIHJuKSkgew0KKwkJcnQgPSAoc3RydWN0IHJ0 ZW50cnkgKilybjsNCisJCWlmKHJ0LT5ydF9mbGFncyAmIFJURl9VUCkgew0K KwkJCWlmICh3ZWlnaHQgPiBydC0+cnRfcm14LnJteF93ZWlnaHQpIHsNCisJ CQkJd2VpZ2h0ID0gcnQtPnJ0X3JteC5ybXhfd2VpZ2h0Ow0KKwkJCQluID0g MTsNCisJCQl9IGVsc2UgaWYgKHdlaWdodCA9PSBydC0+cnRfcm14LnJteF93 ZWlnaHQpDQorCQkJCW4rKzsNCisJCX0NCisJfQ0KKwlsb3dlc3Rfd2VpZ2h0 ID0gd2VpZ2h0Ow0KIA0KIAkvKiBndyBzZWxlY3Rpb24gYnkgTW9kdWxvLU4g SGFzaCAoUkZDMjk5MSkgWFhYIG5lZWQgaW1wcm92ZW1lbnQ/ICovDQogCWhh c2ggKz0gaGFzaGppdHRlcjsNCiAJaGFzaCAlPSBuOw0KLQlmb3IgKHdlaWdo dCA9IGFicygoaW50MzJfdCloYXNoKSwgcnQgPSByby0+cm9fcnQ7DQotCSAg ICAgd2VpZ2h0ID49IHJ0LT5ydF9ybXgucm14X3dlaWdodCAmJiBybjsgDQot CSAgICAgd2VpZ2h0IC09IHJ0LT5ydF9ybXgucm14X3dlaWdodCkgew0KLQkJ DQotCQkvKiBzdGF5IHdpdGhpbiB0aGUgbXVsdGlwYXRoIHJvdXRlcyAqLw0K LQkJaWYgKHJuLT5ybl9kdXBlZGtleSAmJiBybi0+cm5fbWFzayAhPSBybi0+ cm5fZHVwZWRrZXktPnJuX21hc2spDQotCQkJYnJlYWs7DQotCQlybiA9IHJu LT5ybl9kdXBlZGtleTsNCisJZm9yICggcm4gPSBybjAsIG4gPSAwOyBybiAh PSBOVUxMOyBybiA9IHJuX21wYXRoX25leHQoIHJuKSkgew0KIAkJcnQgPSAo c3RydWN0IHJ0ZW50cnkgKilybjsNCisJCWlmKHJ0LT5ydF9mbGFncyAmIFJU Rl9VUCkgew0KKwkJCWlmICggcnQtPnJ0X3JteC5ybXhfd2VpZ2h0ID09IGxv d2VzdF93ZWlnaHQpIHsNCisJCQkJaWYgKG4gPT0gaGFzaCkNCisJCQkJCWJy ZWFrOw0KKwkJCQluKys7DQorCQkJfQ0KKwkJfQ0KIAl9DQogCS8qIFhYWCB0 cnkgZmlsbGluZyBydF9nd3JvdXRlIGFuZCBhdm9pZCB1bnJlYWNoYWJsZSBn dyAgKi8NCiANCmRpZmYgLXUgLXIgLi4vc3JjX29yZ184LjJfMjAxMTAzMjkv c3lzL25ldC9yYWRpeF9tcGF0aC5oIC4vc3lzL25ldC9yYWRpeF9tcGF0aC5o DQotLS0gLi4vc3JjX29yZ184LjJfMjAxMTAzMjkvc3lzL25ldC9yYWRpeF9t cGF0aC5oCTIwMDktMDgtMDMgMDg6MTM6MDYuMDAwMDAwMDAwICswMDAwDQor KysgLi9zeXMvbmV0L3JhZGl4X21wYXRoLmgJMjAxMS0wNC0wNCAxOTo0ODow OS4wMDAwMDAwMDAgKzAwMDANCkBAIC00NCw5ICs0NCwxMCBAQA0KIHN0cnVj dCByb3V0ZTsNCiBzdHJ1Y3QgcnRlbnRyeTsNCiBzdHJ1Y3Qgc29ja2FkZHI7 DQorZXh0ZXJuIHVpbnQzMl90IGhhc2hqaXR0ZXI7DQogaW50CXJuX21wYXRo X2NhcGFibGUoc3RydWN0IHJhZGl4X25vZGVfaGVhZCAqKTsNCiBzdHJ1Y3Qg cmFkaXhfbm9kZSAqcm5fbXBhdGhfbmV4dChzdHJ1Y3QgcmFkaXhfbm9kZSAq KTsNCi11X2ludDMyX3Qgcm5fbXBhdGhfY291bnQoc3RydWN0IHJhZGl4X25v ZGUgKik7DQoraW50NjRfdCBybl9tcGF0aF9jb3VudChzdHJ1Y3QgcmFkaXhf bm9kZSAqKTsNCiBzdHJ1Y3QgcnRlbnRyeSAqcnRfbXBhdGhfbWF0Y2hnYXRl KHN0cnVjdCBydGVudHJ5ICosIHN0cnVjdCBzb2NrYWRkciAqKTsNCiBpbnQg cnRfbXBhdGhfY29uZmxpY3Qoc3RydWN0IHJhZGl4X25vZGVfaGVhZCAqLCBz dHJ1Y3QgcnRlbnRyeSAqLA0KICAgICBzdHJ1Y3Qgc29ja2FkZHIgKik7DQpk aWZmIC11IC1yIC4uL3NyY19vcmdfOC4yXzIwMTEwMzI5L3N5cy9uZXQvcm91 dGUuYyAuL3N5cy9uZXQvcm91dGUuYw0KLS0tIC4uL3NyY19vcmdfOC4yXzIw MTEwMzI5L3N5cy9uZXQvcm91dGUuYwkyMDExLTAzLTI4IDE1OjI2OjUxLjAw MDAwMDAwMCArMDAwMA0KKysrIC4vc3lzL25ldC9yb3V0ZS5jCTIwMTEtMDQt MDQgMjM6MDE6MTcuMDAwMDAwMDAwICswMDAwDQpAQCAtNTEsNiArNTEsOCBA QA0KICNpbmNsdWRlIDxzeXMvcHJvYy5oPg0KICNpbmNsdWRlIDxzeXMvZG9t YWluLmg+DQogI2luY2x1ZGUgPHN5cy9rZXJuZWwuaD4NCisjaW5jbHVkZSA8 c3lzL2xvY2suaD4NCisjaW5jbHVkZSA8c3lzL3JtbG9jay5oPg0KIA0KICNp bmNsdWRlIDxuZXQvaWYuaD4NCiAjaW5jbHVkZSA8bmV0L2lmX2RsLmg+DQpA QCAtMzQyLDYgKzM0NCw3IEBADQogCXN0cnVjdCByYWRpeF9ub2RlICpybjsN CiAJc3RydWN0IHJ0ZW50cnkgKm5ld3J0Ow0KIAlzdHJ1Y3QgcnRfYWRkcmlu Zm8gaW5mbzsNCisJc3RydWN0IHJtX3ByaW90cmFja2VyIHRyYWNrZXI7DQog CWludCBlcnIgPSAwLCBtc2d0eXBlID0gUlRNX01JU1M7DQogCWludCBuZWVk bG9jazsNCiANCkBAIC0zNTgsMjQgKzM2MSwyNiBAQA0KIAkJZ290byBtaXNz Ow0KIAl9DQogCW5lZWRsb2NrID0gIShpZ25mbGFncyAmIFJURl9STkhfTE9D S0VEKTsNCi0JaWYgKG5lZWRsb2NrKQ0KLQkJUkFESVhfTk9ERV9IRUFEX1JM T0NLKHJuaCk7DQotI2lmZGVmIElOVkFSSUFOVFMJDQorCWlmIChuZWVkbG9j aykgLyogWFhYIHdlIGFsd2F5cyBuZWVkIHRoZSBsb2NrIGZvciBub3chICov DQorCQlSQURJWF9OT0RFX0hFQURfTE9DSyhybmgpOw0KIAllbHNlDQotCQlS QURJWF9OT0RFX0hFQURfTE9DS19BU1NFUlQocm5oKTsNCi0jZW5kaWYNCisJ CVJBRElYX05PREVfSEVBRF9STE9DSyhybmgsICZ0cmFja2VyKTsNCiAJcm4g PSBybmgtPnJuaF9tYXRjaGFkZHIoZHN0LCBybmgpOw0KIAlpZiAocm4gJiYg KChybi0+cm5fZmxhZ3MgJiBSTkZfUk9PVCkgPT0gMCkpIHsNCiAJCW5ld3J0 ID0gcnQgPSBSTlRPUlQocm4pOw0KIAkJUlRfTE9DSyhuZXdydCk7DQogCQlS VF9BRERSRUYobmV3cnQpOw0KLQkJaWYgKG5lZWRsb2NrKQ0KLQkJCVJBRElY X05PREVfSEVBRF9SVU5MT0NLKHJuaCk7DQorCQlpZiAobmVlZGxvY2spIC8q IFhYWCB3ZSBhbHdheXMgbmVlZCB0aGUgbG9jayBmb3Igbm93ISAqLw0KKwkJ CVJBRElYX05PREVfSEVBRF9VTkxPQ0socm5oKTsNCisJCWVsc2UNCisJCQlS QURJWF9OT0RFX0hFQURfUlVOTE9DSyhybmgsICZ0cmFja2VyKTsNCiAJCWdv dG8gZG9uZTsNCisJfQ0KKwlpZiAobmVlZGxvY2spIC8qIFhYWCB3ZSBhbHdh eXMgbmVlZCB0aGUgbG9jayBmb3Igbm93ISAqLw0KKwkJUkFESVhfTk9ERV9I RUFEX1VOTE9DSyhybmgpOw0KKwllbHNlDQorCQlSQURJWF9OT0RFX0hFQURf UlVOTE9DSyhybmgsICZ0cmFja2VyKTsNCiANCi0JfSBlbHNlIGlmIChuZWVk bG9jaykNCi0JCVJBRElYX05PREVfSEVBRF9SVU5MT0NLKHJuaCk7DQotCQ0K IAkvKg0KIAkgKiBFaXRoZXIgd2UgaGl0IHRoZSByb290IG9yIGNvdWxkbid0 IGZpbmQgYW55IG1hdGNoLA0KIAkgKiBXaGljaCBiYXNpY2FsbHkgbWVhbnMN CkBAIC00MDAsNiArNDA1LDE1NyBAQA0KIH0NCiANCiAvKg0KKyAqIExvb2t1 cCBhIGRlc3RpbmF0aW9uIGluIHRoZSByb3V0aW5nIHRhYmxlIGFuZA0KKyAq IHJlcG9ydCB0aGUgbmV4dCBob3AsIGludGVyZmFjZSBhbmQgaW50ZXJmYWNl IGFkZHJlc3MNCisgKiBpbiBhIG5ldyBzdHJ1Y3R1cmUuDQorICogT25seSBy ZWFkIGxvY2sgYWNjZXNzIG9uIHRoZSByb3V0aW5nIHRhYmxlIGlzIHJlcXVp cmVkLA0KKyAqIGluZGl2aWR1YWwgcm91dGVzIGFyZSBub3QgbG9ja2VkLg0K KyAqIFJldHVybnMgMSBmb3IgZW50cnkgZm91bmQsIDAgZm9yIG5vdCBmb3Vu ZC4NCisgKi8NCitpbnQNCitydGxvb2t1cF9maWIoc3RydWN0IHNvY2thZGRy ICpkc3QsIHVfaW50IGZpYm51bSwgc3RydWN0IHJ0bG9va3VwICpydGwsDQor ICAgICAgIGludCBmbGFncykNCit7DQorICAgICAgICBzdHJ1Y3QgcmFkaXhf bm9kZV9oZWFkICpybmg7DQorICAgICAgIHN0cnVjdCByYWRpeF9ub2RlICpy bjsNCisgICAgICAgc3RydWN0IHJ0ZW50cnkgKnJ0Ow0KKyAgICAgICBpbnQg cmV0ID0gMDsNCisgICAgICAgc3RydWN0IHJtX3ByaW90cmFja2VyIHRyYWNr ZXI7DQorDQorICAgICAgIEtBU1NFUlQoKGZpYm51bSA8IHJ0X251bWZpYnMp LCAoInJ0YWxsb2MxX2ZpYjogYmFkIGZpYm51bSIpKTsNCisgICAgICAgaWYg KGRzdC0+c2FfZmFtaWx5ICE9IEFGX0lORVQpICAvKiBPbmx5IElORVQgc3Vw cG9ydHMgPiAxIGZpYiBub3cgKi8NCisgICAgICAgICAgICAgICBmaWJudW0g PSAwOw0KKyAgICAgICBybmggPSBydF90YWJsZXNfZ2V0X3JuaChmaWJudW0s IGRzdC0+c2FfZmFtaWx5KTsNCisNCisgICAgICAgLyogTG9vayB1cCB0aGUg YWRkcmVzcyBpbiB0aGUgdGFibGUgZm9yIHRoYXQgQWRkcmVzcyBGYW1pbHku ICovDQorICAgICAgIGlmIChybmggPT0gTlVMTCkgew0KKyAgICAgICAgICAg ICAgIFZfcnRzdGF0LnJ0c191bnJlYWNoKys7DQorICAgICAgICAgICAgICAg cmV0dXJuICgwKTsNCisgICAgICAgfQ0KKw0KKyAgICAgICBSQURJWF9OT0RF X0hFQURfUkxPQ0socm5oLCAmdHJhY2tlcik7DQorICAgICAgIHJuID0gcm5o LT5ybmhfbWF0Y2hhZGRyKGRzdCwgcm5oKTsNCisgICAgICAgaWYgKHJuICE9 IE5VTEwgJiYgKChybi0+cm5fZmxhZ3MgJiBSTkZfUk9PVCkgPT0gMCkpIHsN CisgICAgICAgICAgICAgICBydCA9IFJOVE9SVChybik7DQorDQorICAgICAg ICAgICAgICAgaW50IHJ0X2xlbiA9IFNBX1NJWkUoIHJ0LT5ydF9nYXRld2F5 KTsNCisgICAgICAgICAgICAgICBpbnQgcnRsX2xlbiA9IFNBX1NJWkUoIHJ0 bC0+cnRfZ2F0ZXdheSk7DQorICAgICAgICAgICAgICAgaWYoIHJ0X2xlbiA+ IHJ0bF9sZW4pIHsNCisgICAgICAgICAgICAgICAgICAgICAgIGJjb3B5KCAm cnQtPnJ0X2dhdGV3YXksICZydGwtPnJ0X2dhdGV3YXksIHJ0bF9sZW4pOw0K KyAgICAgICAgICAgICAgIH0gZWxzZSB7DQorICAgICAgICAgICAgICAgICAg ICAgICBiY29weSggJnJ0LT5ydF9nYXRld2F5LCAmcnRsLT5ydF9nYXRld2F5 LCBydF9sZW4pOw0KKyAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAg ICBydGwtPnJ0X2lmcCA9IHJ0LT5ydF9pZnA7DQorICAgICAgICAgICAgICAg cnRsLT5ydF9pZmEgPSBydC0+cnRfaWZhOw0KKyAgICAgICAgICAgICAgIHJ0 bC0+cnRfcm14LnJteF9tdHUgPSBydC0+cnRfcm14LnJteF9tdHU7DQorICAg ICAgICAgICAgICAgcnRsLT5ydF9ybXgucm14X2V4cGlyZSA9IHJ0LT5ydF9y bXgucm14X2V4cGlyZTsNCisgICAgICAgICAgICAgICBydGwtPnJ0X2ZsYWdz ID0gcnQtPnJ0X2ZsYWdzOw0KKyAgICAgICAgICAgICAgIGlmIChmbGFncyAm IFJUTF9QS1NFTlQpDQorICAgICAgICAgICAgICAgICAgICAgICBydC0+cnRf cm14LnJteF9wa3NlbnQrKzsgICAgICAgICAgICAgICAgLyogcmFjeSBidXQg b2sgLSBYWFggV0hZPyovDQorICAgICAgICAgICAgICAgcmV0ID0gMTsNCisg ICAgICAgfQ0KKyAgICAgICBSQURJWF9OT0RFX0hFQURfUlVOTE9DSyhybmgs ICZ0cmFja2VyKTsNCisgICAgICAgcmV0dXJuIChyZXQpOw0KK30NCisNCisj aWZkZWYgUkFESVhfTVBBVEgNCisvKg0KKyAqIExvb2t1cCBhIG1wYXRoIGRl c3RpbmF0aW9uIGluIHRoZSByb3V0aW5nIHRhYmxlIGFuZA0KKyAqIHJlcG9y dCB0aGUgbmV4dCBob3AsIGludGVyZmFjZSBhbmQgaW50ZXJmYWNlIGFkZHJl c3MNCisgKiBpbiBhIG5ldyBzdHJ1Y3R1cmUuDQorICogT25seSByZWFkIGxv Y2sgYWNjZXNzIG9uIHRoZSByb3V0aW5nIHRhYmxlIGlzIHJlcXVpcmVkLA0K KyAqIGluZGl2aWR1YWwgcm91dGVzIGFyZSBub3QgbG9ja2VkLg0KKyAqIFJl dHVybnMgMSBmb3IgZW50cnkgZm91bmQsIDAgZm9yIG5vdCBmb3VuZC4NCisg Ki8NCitpbnQNCitydGxvb2t1cF9tcGF0aF9maWIoc3RydWN0IHNvY2thZGRy ICpkc3QsIHVfaW50MzJfdCBoYXNoLCB1X2ludCBmaWJudW0sDQorICAgICAg ICBzdHJ1Y3QgcnRsb29rdXAgKnJ0bCwgaW50IGZsYWdzKQ0KK3sNCisgICAg ICAgc3RydWN0IHJhZGl4X25vZGVfaGVhZCAqcm5oOw0KKyAgICAgICBzdHJ1 Y3QgcmFkaXhfbm9kZSAqcm4sICpybjA7DQorICAgICAgIHN0cnVjdCBydGVu dHJ5ICpydDsNCisgICAgICAgaW50IHJldCA9IDA7DQorICAgICAgIHN0cnVj dCBybV9wcmlvdHJhY2tlciB0cmFja2VyOw0KKyAgICAgICBpbnQ2NF90IHdl aWdodDsNCisgICAgICAgaW50NjRfdCBsb3dlc3Rfd2VpZ2h0Ow0KKyAgICAg ICB1X2ludDMyX3QgbiA9IDA7DQorDQorICAgICAgIEtBU1NFUlQoKGZpYm51 bSA8IHJ0X251bWZpYnMpLCAoInJ0YWxsb2MxX2ZpYjogYmFkIGZpYm51bSIp KTsNCisgICAgICAgaWYgKGRzdC0+c2FfZmFtaWx5ICE9IEFGX0lORVQpICAv KiBPbmx5IElORVQgc3VwcG9ydHMgPiAxIGZpYiBub3cgKi8NCisgICAgICAg ICAgICAgICBmaWJudW0gPSAwOw0KKyAgICAgICBybmggPSBydF90YWJsZXNf Z2V0X3JuaChmaWJudW0sIGRzdC0+c2FfZmFtaWx5KTsNCisNCisgICAgICAg LyogTG9vayB1cCB0aGUgYWRkcmVzcyBpbiB0aGUgdGFibGUgZm9yIHRoYXQg QWRkcmVzcyBGYW1pbHkuICovDQorICAgICAgIGlmIChybmggPT0gTlVMTCkg ew0KKyAgICAgICAgICAgICAgIFZfcnRzdGF0LnJ0c191bnJlYWNoKys7DQor ICAgICAgICAgICAgICAgcmV0dXJuICgwKTsNCisgICAgICAgfQ0KKw0KKyAg ICAgICBSQURJWF9OT0RFX0hFQURfUkxPQ0socm5oLCAmdHJhY2tlcik7DQor ICAgICAgIHJuID0gcm5oLT5ybmhfbWF0Y2hhZGRyKGRzdCwgcm5oKTsNCisg ICAgICAgaWYgKHJuICE9IE5VTEwgJiYgKChybi0+cm5fZmxhZ3MgJiBSTkZf Uk9PVCkgPT0gMCkpIHsNCisgICAgICAgICAgICAgICAgLyogd2UgaGF2ZSBh IHJvdXRlIC0gbm93IGRvIHRoZSBtcGF0aCBzZWxlY3Rpb24gKi8NCisgICAg ICAgICAgICAgICBpZiAocm5fbXBhdGhfbmV4dCggcm4pICE9IE5VTEwpIHsg LyogbXVsdGlwYXRoICovDQorICAgICAgICAgICAgICAgICAgICAgICBybjAg PSBybjsNCisNCisgICAgICAgICAgICAgICAgICAgICAgIC8qIGZpbmQgbG93 ZXN0IHdlaWdodCByb3V0ZSAqLw0KKyAgICAgICAgICAgICAgICAgICAgICAg Zm9yICggcnQgPSAoc3RydWN0IHJ0ZW50cnkgKilybiwgd2VpZ2h0ID0gcnQt PnJ0X3JteC5ybXhfd2VpZ2h0Ow0KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHJuICE9IE5VTEw7IHJuID0gcm5fbXBhdGhfbmV4 dCggcm4pKSB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ0 ID0gKHN0cnVjdCBydGVudHJ5ICopcm47DQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGlmKHJ0LT5ydF9mbGFncyAmIFJURl9VUCkgew0KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3ZWln aHQgPiBydC0+cnRfcm14LnJteF93ZWlnaHQpIHsNCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlaWdodCA9IHJ0 LT5ydF9ybXgucm14X3dlaWdodDsNCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG4gPSAxOw0KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAod2VpZ2h0 ID09IHJ0LT5ydF9ybXgucm14X3dlaWdodCkNCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4rKzsNCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAg ICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgICAgbG93ZXN0X3dlaWdo dCA9IHdlaWdodDsNCisNCisgICAgICAgICAgICAgICAgICAgICAgIC8qIHNl bGVjdCBub3cgb25lIG9mIHRoZSBsb3dlc3Qgd2VpZ2h0IHJvdXRlcyAqLw0K KyAgICAgICAgICAgICAgICAgICAgICAgLyogZ3cgc2VsZWN0aW9uIGJ5IE1v ZHVsby1OIEhhc2ggKFJGQzI5OTEpIFhYWCBuZWVkIGltcHJvdmVtZW50PyAq Lw0KKyAgICAgICAgICAgICAgICAgICAgICAgaGFzaCArPSBoYXNoaml0dGVy Ow0KKyAgICAgICAgICAgICAgICAgICAgICAgaGFzaCAlPSBuOw0KKyAgICAg ICAgICAgICAgICAgICAgICAgZm9yICggcm4gPSBybjAsIG4gPSAwOyBybiAh PSBOVUxMOyBybiA9IHJuX21wYXRoX25leHQoIHJuKSkgew0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBydCA9IChzdHJ1Y3QgcnRlbnRyeSAq KXJuOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihydC0+ cnRfZmxhZ3MgJiBSVEZfVVApIHsNCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpZiAoIHJ0LT5ydF9ybXgucm14X3dlaWdodCA9 PSBsb3dlc3Rfd2VpZ2h0KSB7DQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpZiAobiA9PSBoYXNoKQ0KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBicmVhazsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG4rKzsNCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgICAgIH0NCisNCisgICAg ICAgICAgICAgICAgICAgICAgIC8qIGd3IHNlbGVjdGlvbiBoYXMgZmFpbGVk IC0gdGhlcmUgbXVzdCBiZSBvbmx5IHplcm8gd2VpZ2h0IHJvdXRlcyAqLyAg ICAgICAgICAgICAgICAgICANCisgICAgICAgICAgICAgICAgICAgICAgIGlm ICghcm4pDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8g ZW5kOw0KKyAgICAgICAgICAgICAgIH0gZWxzZQ0KKyAgICAgICAgICAgICAg ICAgICAgICAgcnQgPSAoc3RydWN0IHJ0ZW50cnkgKilybjsNCisNCisgICAg ICAgICAgICAgICBpbnQgcnRfbGVuID0gU0FfU0laRSggcnQtPnJ0X2dhdGV3 YXkpOw0KKyAgICAgICAgICAgICAgIGludCBydGxfbGVuID0gU0FfU0laRSgg cnRsLT5ydF9nYXRld2F5KTsNCisgICAgICAgICAgICAgICBpZiggcnRfbGVu ID4gcnRsX2xlbikgew0KKyAgICAgICAgICAgICAgICAgICAgICAgYmNvcHko ICZydC0+cnRfZ2F0ZXdheSwgJnJ0bC0+cnRfZ2F0ZXdheSwgcnRsX2xlbik7 DQorICAgICAgICAgICAgICAgfSBlbHNlIHsNCisgICAgICAgICAgICAgICAg ICAgICAgIGJjb3B5KCAmcnQtPnJ0X2dhdGV3YXksICZydGwtPnJ0X2dhdGV3 YXksIHJ0X2xlbik7DQorICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAg ICAgIHJ0bC0+cnRfaWZwID0gcnQtPnJ0X2lmcDsNCisgICAgICAgICAgICAg ICBydGwtPnJ0X2lmYSA9IHJ0LT5ydF9pZmE7DQorICAgICAgICAgICAgICAg cnRsLT5ydF9ybXgucm14X210dSA9IHJ0LT5ydF9ybXgucm14X210dTsNCisg ICAgICAgICAgICAgICBydGwtPnJ0X3JteC5ybXhfZXhwaXJlID0gcnQtPnJ0 X3JteC5ybXhfZXhwaXJlOw0KKyAgICAgICAgICAgICAgIHJ0bC0+cnRfZmxh Z3MgPSBydC0+cnRfZmxhZ3M7DQorICAgICAgICAgICAgICAgaWYgKGZsYWdz ICYgUlRMX1BLU0VOVCkNCisgICAgICAgICAgICAgICAgICAgICAgIHJ0LT5y dF9ybXgucm14X3Brc2VudCsrOyAgICAgICAgICAgICAgICAvKiByYWN5IGJ1 dCBvayAtIFhYWCBXSFk/Ki8NCisgICAgICAgICAgICAgICByZXQgPSAxOw0K KyAgICAgICB9DQorZW5kOg0KKyAgICAgICBSQURJWF9OT0RFX0hFQURfUlVO TE9DSyhybmgsICZ0cmFja2VyKTsNCisgICAgICAgcmV0dXJuIChyZXQpOw0K K30NCisjZW5kaWYNCisNCisvKg0KICAqIFJlbW92ZSBhIHJlZmVyZW5jZSBj b3VudCBmcm9tIGFuIHJ0ZW50cnkuDQogICogSWYgdGhlIGNvdW50IGdldHMg bG93IGVub3VnaCwgdGFrZSBpdCBvdXQgb2YgdGhlIHJvdXRpbmcgdGFibGUN CiAgKi8NCkBAIC04NzUsNyArMTAzMSw3IEBADQogCSAqIFJlbW92ZSB0aGUg aXRlbSBmcm9tIHRoZSB0cmVlOyBpdCBzaG91bGQgYmUgdGhlcmUsDQogCSAq IGJ1dCB3aGVuIGNhbGxlcnMgaW52b2tlIHVzIGJsaW5kbHkgaXQgbWF5IG5v dCAoc2lnaCkuDQogCSAqLw0KLQlybiA9IHJuaC0+cm5oX2RlbGFkZHIocnRf a2V5KHJ0KSwgcnRfbWFzayhydCksIHJuaCk7DQorCXJuID0gcm5oLT5ybmhf ZGVsYWRkcihydF9rZXkocnQpLCBydF9tYXNrKHJ0KSwgcm5oLCBOVUxMKTsN CiAJaWYgKHJuID09IE5VTEwpIHsNCiAJCWVycm9yID0gRVNSQ0g7DQogCQln b3RvIGJhZDsNCkBAIC05MTMsMTEyICsxMDY5LDYgQEANCiAJcmV0dXJuIChl cnJvcik7DQogfQ0KIA0KLSNpZmRlZiBSQURJWF9NUEFUSA0KLXN0YXRpYyBp bnQNCi1ybl9tcGF0aF91cGRhdGUoaW50IHJlcSwgc3RydWN0IHJ0X2FkZHJp bmZvICppbmZvLA0KLSAgICBzdHJ1Y3QgcmFkaXhfbm9kZV9oZWFkICpybmgs IHN0cnVjdCBydGVudHJ5ICoqcmV0X25ydCkNCi17DQotCS8qDQotCSAqIGlm IHdlIGdvdCBtdWx0aXBhdGggcm91dGVzLCB3ZSByZXF1aXJlIHVzZXJzIHRv IHNwZWNpZnkNCi0JICogYSBtYXRjaGluZyBSVEFYX0dBVEVXQVkuDQotCSAq Lw0KLQlzdHJ1Y3QgcnRlbnRyeSAqcnQsICpydG8gPSBOVUxMOw0KLQlyZWdp c3RlciBzdHJ1Y3QgcmFkaXhfbm9kZSAqcm47DQotCWludCBlcnJvciA9IDA7 DQotDQotCXJuID0gcm5oLT5ybmhfbWF0Y2hhZGRyKGRzdCwgcm5oKTsNCi0J aWYgKHJuID09IE5VTEwpDQotCQlyZXR1cm4gKEVTUkNIKTsNCi0JcnRvID0g cnQgPSBSTlRPUlQocm4pOw0KLQlydCA9IHJ0X21wYXRoX21hdGNoZ2F0ZShy dCwgZ2F0ZXdheSk7DQotCWlmIChydCA9PSBOVUxMKQ0KLQkJcmV0dXJuIChF U1JDSCk7DQotCS8qDQotCSAqIHRoaXMgaXMgdGhlIGZpcnN0IGVudHJ5IGlu IHRoZSBjaGFpbg0KLQkgKi8NCi0JaWYgKHJ0byA9PSBydCkgew0KLQkJcm4g PSBybl9tcGF0aF9uZXh0KChzdHJ1Y3QgcmFkaXhfbm9kZSAqKXJ0KTsNCi0J CS8qDQotCQkgKiB0aGVyZSBpcyBhbm90aGVyIGVudHJ5LCBub3cgaXQncyBh Y3RpdmUNCi0JCSAqLw0KLQkJaWYgKHJuKSB7DQotCQkJcnRvID0gUk5UT1JU KHJuKTsNCi0JCQlSVF9MT0NLKHJ0byk7DQotCQkJcnRvLT5ydF9mbGFncyB8 PSBSVEZfVVA7DQotCQkJUlRfVU5MT0NLKHJ0byk7DQotCQl9IGVsc2UgaWYg KHJ0LT5ydF9mbGFncyAmIFJURl9HQVRFV0FZKSB7DQotCQkJLyoNCi0JCQkg KiBGb3IgZ2F0ZXdheSByb3V0ZXMsIHdlIG5lZWQgdG8gDQotCQkJICogbWFr ZSBzdXJlIHRoYXQgd2Ugd2UgYXJlIGRlbGV0aW5nDQotCQkJICogdGhlIGNv cnJlY3QgZ2F0ZXdheS4gDQotCQkJICogcnRfbXBhdGhfbWF0Y2hnYXRlKCkg ZG9lcyBub3QgDQotCQkJICogY2hlY2sgdGhlIGNhc2Ugd2hlbiB0aGVyZSBp cyBvbmx5DQotCQkJICogb25lIHJvdXRlIGluIHRoZSBjaGFpbi4gIA0KLQkJ CSAqLw0KLQkJCWlmIChnYXRld2F5ICYmDQotCQkJICAgIChydC0+cnRfZ2F0 ZXdheS0+c2FfbGVuICE9IGdhdGV3YXktPnNhX2xlbiB8fA0KLQkJCQltZW1j bXAocnQtPnJ0X2dhdGV3YXksIGdhdGV3YXksIGdhdGV3YXktPnNhX2xlbikp KQ0KLQkJCQllcnJvciA9IEVTUkNIOw0KLQkJCWVsc2Ugew0KLQkJCQkvKg0K LQkJCQkgKiByZW1vdmUgZnJvbSB0cmVlIGJlZm9yZSByZXR1cm5pbmcgaXQN Ci0JCQkJICogdG8gdGhlIGNhbGxlcg0KLQkJCQkgKi8NCi0JCQkJcm4gPSBy bmgtPnJuaF9kZWxhZGRyKGRzdCwgbmV0bWFzaywgcm5oKTsNCi0JCQkJS0FT U0VSVChydCA9PSBSTlRPUlQocm4pLCAoInJhZGl4IG5vZGUgZGlzYXBwZWFy ZWQiKSk7DQotCQkJCWdvdG8gZ3dkZWxldGU7DQotCQkJfQ0KLQkJCQ0KLQkJ fQ0KLQkJLyoNCi0JCSAqIHVzZSB0aGUgbm9ybWFsIGRlbGV0ZSBjb2RlIHRv IHJlbW92ZQ0KLQkJICogdGhlIGZpcnN0IGVudHJ5DQotCQkgKi8NCi0JCWlm IChyZXEgIT0gUlRNX0RFTEVURSkgDQotCQkJZ290byBub25kZWxldGU7DQot DQotCQllcnJvciA9IEVOT0VOVDsNCi0JCWdvdG8gZG9uZTsNCi0JfQ0KLQkJ DQotCS8qDQotCSAqIGlmIHRoZSBlbnRyeSBpcyAybmQgYW5kIG9uIHVwDQot CSAqLw0KLQlpZiAoKHJlcSA9PSBSVE1fREVMRVRFKSAmJiAhcnRfbXBhdGhf ZGVsZHVwKHJ0bywgcnQpKQ0KLQkJcGFuaWMgKCJydHJlcXVlc3QxOiBydF9t cGF0aF9kZWxkdXAiKTsNCi1nd2RlbGV0ZToNCi0JUlRfTE9DSyhydCk7DQot CVJUX0FERFJFRihydCk7DQotCWlmIChyZXEgPT0gUlRNX0RFTEVURSkgew0K LQkJcnQtPnJ0X2ZsYWdzICY9IH5SVEZfVVA7DQotCQkvKg0KLQkJICogT25l IG1vcmUgcnRlbnRyeSBmbG9hdGluZyBhcm91bmQgdGhhdCBpcyBub3QNCi0J CSAqIGxpbmtlZCB0byB0aGUgcm91dGluZyB0YWJsZS4gcnR0cmFzaCB3aWxs IGJlIGRlY3JlbWVudGVkDQotCQkgKiB3aGVuIFJURlJFRShydCkgaXMgZXZl bnR1YWxseSBjYWxsZWQuDQotCQkgKi8NCi0JCVZfcnR0cmFzaCsrOw0KLQl9 DQotCQ0KLW5vbmRlbGV0ZToNCi0JaWYgKHJlcSAhPSBSVE1fREVMRVRFKQ0K LQkJcGFuaWMoInVucmVjb2duaXplZCByZXF1ZXN0ICVkIiwgcmVxKTsNCi0J DQotDQotCS8qDQotCSAqIElmIHRoZSBjYWxsZXIgd2FudHMgaXQsIHRoZW4g aXQgY2FuIGhhdmUgaXQsDQotCSAqIGJ1dCBpdCdzIHVwIHRvIGl0IHRvIGZy ZWUgdGhlIHJ0ZW50cnkgYXMgd2Ugd29uJ3QgYmUNCi0JICogZG9pbmcgaXQu DQotCSAqLw0KLQlpZiAocmV0X25ydCkgew0KLQkJKnJldF9ucnQgPSBydDsN Ci0JCVJUX1VOTE9DSyhydCk7DQotCX0gZWxzZQ0KLQkJUlRGUkVFX0xPQ0tF RChydCk7DQotZG9uZToNCi0JcmV0dXJuIChlcnJvcik7DQotfQ0KLSNlbmRp Zg0KLQ0KIGludA0KIHJ0cmVxdWVzdDFfZmliKGludCByZXEsIHN0cnVjdCBy dF9hZGRyaW5mbyAqaW5mbywgc3RydWN0IHJ0ZW50cnkgKipyZXRfbnJ0LA0K IAkJCQl1X2ludCBmaWJudW0pDQpAQCAtMTAzMiw2ICsxMDgyLDcgQEANCiAJ cmVnaXN0ZXIgc3RydWN0IHJhZGl4X25vZGVfaGVhZCAqcm5oOw0KIAlzdHJ1 Y3QgaWZhZGRyICppZmE7DQogCXN0cnVjdCBzb2NrYWRkciAqbmRzdDsNCisJ c3RydWN0IHJtX3ByaW90cmFja2VyIHRyYWNrZXI7DQogI2RlZmluZSBzZW5k ZXJyKHgpIHsgZXJyb3IgPSB4IDsgZ290byBiYWQ7IH0NCiANCiAJS0FTU0VS VCgoZmlibnVtIDwgcnRfbnVtZmlicyksICgicnRyZXF1ZXN0MV9maWI6IGJh ZCBmaWJudW0iKSk7DQpAQCAtMTA0OCw3ICsxMDk5LDcgQEANCiAJaWYgKG5l ZWRsb2NrKQ0KIAkJUkFESVhfTk9ERV9IRUFEX0xPQ0socm5oKTsNCiAJZWxz ZQ0KLQkJUkFESVhfTk9ERV9IRUFEX0xPQ0tfQVNTRVJUKHJuaCk7DQorCQlS QURJWF9OT0RFX0hFQURfUkxPQ0socm5oLCAmdHJhY2tlcik7DQogCS8qDQog CSAqIElmIHdlIGFyZSBhZGRpbmcgYSBob3N0IHJvdXRlIHRoZW4gd2UgZG9u J3Qgd2FudCB0byBwdXQNCiAJICogYSBuZXRtYXNrIGluIHRoZSB0cmVlLCBu b3IgZG8gd2Ugd2FudCB0byBjbG9uZSBpdC4NCkBAIC0xMDU4LDI4ICsxMTA5 LDMwIEBADQogDQogCXN3aXRjaCAocmVxKSB7DQogCWNhc2UgUlRNX0RFTEVU RToNCisJCWlmICgocm4gPSBybmgtPnJuaF9sb29rdXAoZHN0LCBuZXRtYXNr LCBybmgpKSA9PSBOVUxMKQ0KKwkJCXNlbmRlcnIoRVNSQ0gpOw0KKwkJcnQg PSBSTlRPUlQocm4pOw0KICNpZmRlZiBSQURJWF9NUEFUSA0KKwkJLyoNCisJ CSAqIGlmIHdlIGdvdCBtdWx0aXBhdGggcm91dGVzLCB3ZSByZXF1aXJlIHVz ZXJzIHRvIHNwZWNpZnkNCisJCSAqIGEgbWF0Y2hpbmcgUlRBWF9HQVRFV0FZ Lg0KKwkJICovDQogCQlpZiAocm5fbXBhdGhfY2FwYWJsZShybmgpKSB7DQot CQkJZXJyb3IgPSBybl9tcGF0aF91cGRhdGUocmVxLCBpbmZvLCBybmgsIHJl dF9ucnQpOw0KLQkJCS8qDQotCQkJICogImJhZCIgaG9sZHMgdHJ1ZSBmb3Ig dGhlIHN1Y2Nlc3MgY2FzZQ0KLQkJCSAqIGFzIHdlbGwNCi0JCQkgKi8NCi0J CQlpZiAoZXJyb3IgIT0gRU5PRU5UKQ0KLQkJCQlnb3RvIGJhZDsNCi0JCQll cnJvciA9IDA7DQorCQkJcnQgPSBydF9tcGF0aF9tYXRjaGdhdGUoIHJ0LCBn YXRld2F5KTsNCisJCQlybiA9IChzdHJ1Y3QgcmFkaXhfbm9kZSAqKXJ0Ow0K KwkJCWlmICghcnQpDQorCQkJCXNlbmRlcnIoRVNSQ0gpOw0KIAkJfQ0KICNl bmRpZg0KIAkJLyoNCiAJCSAqIFJlbW92ZSB0aGUgaXRlbSBmcm9tIHRoZSB0 cmVlIGFuZCByZXR1cm4gaXQuDQogCQkgKiBDb21wbGFpbiBpZiBpdCBpcyBu b3QgdGhlcmUgYW5kIGRvIG5vIG1vcmUgcHJvY2Vzc2luZy4NCiAJCSAqLw0K LQkJcm4gPSBybmgtPnJuaF9kZWxhZGRyKGRzdCwgbmV0bWFzaywgcm5oKTsN CisJCXJuID0gcm5oLT5ybmhfZGVsYWRkcihkc3QsIG5ldG1hc2ssIHJuaCwg cm4pOw0KIAkJaWYgKHJuID09IE5VTEwpDQogCQkJc2VuZGVycihFU1JDSCk7 DQogCQlpZiAocm4tPnJuX2ZsYWdzICYgKFJORl9BQ1RJVkUgfCBSTkZfUk9P VCkpDQogCQkJcGFuaWMgKCJydHJlcXVlc3QgZGVsZXRlIik7DQotCQlydCA9 IFJOVE9SVChybik7DQogCQlSVF9MT0NLKHJ0KTsNCiAJCVJUX0FERFJFRihy dCk7DQogCQlydC0+cnRfZmxhZ3MgJj0gflJURl9VUDsNCkBAIC0xMjg1LDYg KzEzMzgsOCBAQA0KIGJhZDoNCiAJaWYgKG5lZWRsb2NrKQ0KIAkJUkFESVhf Tk9ERV9IRUFEX1VOTE9DSyhybmgpOw0KKwllbHNlDQorCQlSQURJWF9OT0RF X0hFQURfUlVOTE9DSyhybmgsICZ0cmFja2VyKTsNCiAJcmV0dXJuIChlcnJv cik7DQogI3VuZGVmIHNlbmRlcnINCiB9DQpAQCAtMTMwOCw3ICsxMzYzLDkg QEANCiAjZW5kaWYNCiANCiAJUlRfTE9DS19BU1NFUlQocnQpOw0KKyNpZmRl ZiBJTlZBUklBTlRTDQogCVJBRElYX05PREVfSEVBRF9MT0NLX0FTU0VSVChy bmgpOw0KKyNlbmRpZg0KIAkNCiAJLyoNCiAJICogUHJlcGFyZSB0byBzdG9y ZSB0aGUgZ2F0ZXdheSBpbiBydC0+cnRfZ2F0ZXdheS4NCmRpZmYgLXUgLXIg Li4vc3JjX29yZ184LjJfMjAxMTAzMjkvc3lzL25ldC9yb3V0ZS5oIC4vc3lz L25ldC9yb3V0ZS5oDQotLS0gLi4vc3JjX29yZ184LjJfMjAxMTAzMjkvc3lz L25ldC9yb3V0ZS5oCTIwMTAtMDQtMDIgMDU6MTI6NDYuMDAwMDAwMDAwICsw MDAwDQorKysgLi9zeXMvbmV0L3JvdXRlLmgJMjAxMS0wNC0wMyAxNjowNzo1 Ny4wMDAwMDAwMDAgKzAwMDANCkBAIC03OSw2ICs3OSwzOSBAQA0KIH07DQog DQogLyoNCisgKiBQb2ludGVycyB0byBzdHJ1Y3R1cmVzIG9uIHRoZSBzdGFj ayBmb3IgcHVyZSByb3V0aW5nDQorICogdGFibGUgbG9va3VwcyAvIGZhc3Qg bXR1IGFjY2Vzcy4NCisgKiBGYWtlcyBzdHJ1Y3QgcnRfbWV0cmljc19saXRl DQorICovDQorc3RydWN0IHJ0bG9va3VwX21ldHJpY3Mgew0KKyAgICAgICB1 X2xvbmcgIHJteF9tdHU7ICAgICAgICAvKiBNVFUgZm9yIHRoaXMgcGF0aCAq Lw0KKyAgICAgICB1X2xvbmcgIHJteF9leHBpcmU7ICAgICAvKiBYWFggcmVh cmFuZ2UgcnRfbWV0cmljc19saXRlICovDQorICAgICAgIHVfbG9uZyAgcm14 X3Brc2VudDsgICAgIC8qIFhYWCBmYXN0ZXIgdGhhbiBleHRyYSBpZj8gLSBy ZW1vdmU/ICovDQorfTsNCisNCisvKg0KKyAqIFBvaW50ZXJzIHRvIHN0cnVj dHVyZXMgb24gdGhlIHN0YWNrIGZvciBwdXJlIHJvdXRpbmcNCisgKiB0YWJs ZSBsb29rdXBzLiANCisgKiBGYWtlcyBzdHJ1Y3QgcnRlbnRyeQ0KKyAqLw0K KyNpZm5kZWYgUk5GX05PUk1BTA0KKyNpbmNsdWRlIDxuZXQvcmFkaXguaD4N CisjaWZkZWYgUkFESVhfTVBBVEgNCisjaW5jbHVkZSA8bmV0L3JhZGl4X21w YXRoLmg+DQorI2VuZGlmDQorI2VuZGlmDQorc3RydWN0IHJ0bG9va3VwIHsN CisgICAgICAgc3RydWN0ICByYWRpeF9ub2RlIHJ0X25vZGVzWzJdOyAgICAg ICAgIC8qIFhYWCByZWFyYW5nZSBydGVudHJ5IGFuZCByZW1vdmUgKi8NCisg ICAgICAgc3RydWN0ICBzb2NrYWRkciAqcnRfZ2F0ZXdheTsNCisgICAgICAg aW50ICAgICBydF9mbGFnczsNCisgICAgICAgaW50ICAgICBydF9yZWZjbnQ7 ICAgICAgICAgICAgICAgICAgICAgIC8qIFhYWCByZWFyYW5nZSBydGVudHJ5 IGFuZCByZW1vdmUgKi8NCisgICAgICAgc3RydWN0ICBpZm5ldCAqcnRfaWZw Ow0KKyAgICAgICBzdHJ1Y3QgIGlmYWRkciAqcnRfaWZhOw0KKyAgICAgICBz dHJ1Y3QgIHJ0bG9va3VwX21ldHJpY3MgcnRfcm14Ow0KK307DQorI2RlZmlu ZSAgICAgICAgUlRMX1BLU0VOVCAgICAgIDB4MDAwMSAgLyogaW5jcmVtZW50 IHBhY2tldCBzZW50IGNvdW50ZXIgKi8NCisNCisvKg0KICAqIHJteF9ydHQg YW5kIHJteF9ydHR2YXIgYXJlIHN0b3JlZCBhcyBtaWNyb3NlY29uZHM7DQog ICogUlRUVE9QUkhaKHJ0dCkgY29udmVydHMgdG8gYSB2YWx1ZSBzdWl0YWJs ZSBmb3IgdXNlDQogICogYnkgYSBwcm90b2NvbCBzbG93dGltbyBjb3VudGVy Lg0KQEAgLTEyMywxMiArMTU2LDYgQEANCiAgKiBnYXRld2F5cyBhcmUgbWFy a2VkIHNvIHRoYXQgdGhlIG91dHB1dCByb3V0aW5lcyBrbm93IHRvIGFkZHJl c3MgdGhlDQogICogZ2F0ZXdheSByYXRoZXIgdGhhbiB0aGUgdWx0aW1hdGUg ZGVzdGluYXRpb24uDQogICovDQotI2lmbmRlZiBSTkZfTk9STUFMDQotI2lu Y2x1ZGUgPG5ldC9yYWRpeC5oPg0KLSNpZmRlZiBSQURJWF9NUEFUSA0KLSNp bmNsdWRlIDxuZXQvcmFkaXhfbXBhdGguaD4NCi0jZW5kaWYNCi0jZW5kaWYN CiBzdHJ1Y3QgcnRlbnRyeSB7DQogCXN0cnVjdAlyYWRpeF9ub2RlIHJ0X25v ZGVzWzJdOwkvKiB0cmVlIGdsdWUsIGFuZCBvdGhlciB2YWx1ZXMgKi8NCiAJ LyoNCkBAIC00MzAsNiArNDU3LDEwIEBADQogdm9pZAkgcnRhbGxvY19maWIo c3RydWN0IHJvdXRlICpybywgdV9pbnQgZmlibnVtKTsNCiBzdHJ1Y3QgcnRl bnRyeSAqcnRhbGxvYzFfZmliKHN0cnVjdCBzb2NrYWRkciAqLCBpbnQsIHVf bG9uZywgdV9pbnQpOw0KIGludAkgcnRpb2N0bF9maWIodV9sb25nLCBjYWRk cl90LCB1X2ludCk7DQoraW50ICAgIHJ0bG9va3VwX2ZpYihzdHJ1Y3Qgc29j a2FkZHIgKiwgdV9pbnQsIHN0cnVjdCBydGxvb2t1cCAqLCBpbnQpOw0KKyNp ZmRlZiBSQURJWF9NUEFUSA0KK2ludCAgICBydGxvb2t1cF9tcGF0aF9maWIo c3RydWN0IHNvY2thZGRyICosIHVfaW50MzJfdCwgdV9pbnQsIHN0cnVjdCBy dGxvb2t1cCAqLCBpbnQpOw0KKyNlbmRpZg0KIHZvaWQJIHJ0cmVkaXJlY3Rf ZmliKHN0cnVjdCBzb2NrYWRkciAqLCBzdHJ1Y3Qgc29ja2FkZHIgKiwNCiAJ ICAgIHN0cnVjdCBzb2NrYWRkciAqLCBpbnQsIHN0cnVjdCBzb2NrYWRkciAq LCB1X2ludCk7DQogaW50CSBydHJlcXVlc3RfZmliKGludCwgc3RydWN0IHNv Y2thZGRyICosDQpkaWZmIC11IC1yIC4uL3NyY19vcmdfOC4yXzIwMTEwMzI5 L3N5cy9uZXQvcnRzb2NrLmMgLi9zeXMvbmV0L3J0c29jay5jDQotLS0gLi4v c3JjX29yZ184LjJfMjAxMTAzMjkvc3lzL25ldC9ydHNvY2suYwkyMDEwLTEw LTMwIDExOjU0OjU1LjAwMDAwMDAwMCArMDAwMA0KKysrIC4vc3lzL25ldC9y dHNvY2suYwkyMDExLTA0LTAzIDE2OjA3OjU3LjAwMDAwMDAwMCArMDAwMA0K QEAgLTUxLDYgKzUxLDcgQEANCiAjaW5jbHVkZSA8c3lzL3NvY2tldHZhci5o Pg0KICNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+DQogI2luY2x1ZGUgPHN5cy9z eXN0bS5oPg0KKyNpbmNsdWRlIDxzeXMvcm1sb2NrLmg+DQogDQogI2luY2x1 ZGUgPG5ldC9pZi5oPg0KICNpbmNsdWRlIDxuZXQvaWZfZGwuaD4NCkBAIC01 MTMsNiArNTE0LDcgQEANCiAJaW50IGxlbiwgZXJyb3IgPSAwOw0KIAlzdHJ1 Y3QgaWZuZXQgKmlmcCA9IE5VTEw7DQogCXVuaW9uIHNvY2thZGRyX3VuaW9u IHNhdW47DQorCXN0cnVjdCBybV9wcmlvdHJhY2tlciB0cmFja2VyOw0KIA0K ICNkZWZpbmUgc2VuZGVycihlKSB7IGVycm9yID0gZTsgZ290byBmbHVzaDt9 DQogCWlmIChtID09IE5VTEwgfHwgKChtLT5tX2xlbiA8IHNpemVvZihsb25n KSkgJiYNCkBAIC02NDMsMTEgKzY0NSwxMSBAQA0KIAkJICAgIGluZm8ucnRp X2luZm9bUlRBWF9EU1RdLT5zYV9mYW1pbHkpOw0KIAkJaWYgKHJuaCA9PSBO VUxMKQ0KIAkJCXNlbmRlcnIoRUFGTk9TVVBQT1JUKTsNCi0JCVJBRElYX05P REVfSEVBRF9STE9DSyhybmgpOw0KKwkJUkFESVhfTk9ERV9IRUFEX1JMT0NL KHJuaCwgJnRyYWNrZXIpOw0KIAkJcnQgPSAoc3RydWN0IHJ0ZW50cnkgKikg cm5oLT5ybmhfbG9va3VwKGluZm8ucnRpX2luZm9bUlRBWF9EU1RdLA0KIAkJ CWluZm8ucnRpX2luZm9bUlRBWF9ORVRNQVNLXSwgcm5oKTsNCiAJCWlmIChy dCA9PSBOVUxMKSB7CS8qIFhYWCBsb29rcyBib2d1cyAqLw0KLQkJCVJBRElY X05PREVfSEVBRF9SVU5MT0NLKHJuaCk7DQorCQkJUkFESVhfTk9ERV9IRUFE X1JVTkxPQ0socm5oLCAmdHJhY2tlcik7DQogCQkJc2VuZGVycihFU1JDSCk7 DQogCQl9DQogI2lmZGVmIFJBRElYX01QQVRIDQpAQCAtNjYzLDcgKzY2NSw3 IEBADQogCQkgICAgKHJ0bS0+cnRtX3R5cGUgIT0gUlRNX0dFVCB8fCBpbmZv LnJ0aV9pbmZvW1JUQVhfR0FURVdBWV0pKSB7DQogCQkJcnQgPSBydF9tcGF0 aF9tYXRjaGdhdGUocnQsIGluZm8ucnRpX2luZm9bUlRBWF9HQVRFV0FZXSk7 DQogCQkJaWYgKCFydCkgew0KLQkJCQlSQURJWF9OT0RFX0hFQURfUlVOTE9D SyhybmgpOw0KKwkJCQlSQURJWF9OT0RFX0hFQURfUlVOTE9DSyhybmgsICZ0 cmFja2VyKTsNCiAJCQkJc2VuZGVycihFU1JDSCk7DQogCQkJfQ0KIAkJfQ0K QEAgLTY5NSwxMyArNjk3LDEzIEBADQogCQkJICovDQogCQkJcnQgPSAoc3Ry dWN0IHJ0ZW50cnkgKilybmgtPnJuaF9tYXRjaGFkZHIoJmxhZGRyLCBybmgp Ow0KIAkJCWlmIChydCA9PSBOVUxMKSB7DQotCQkJCVJBRElYX05PREVfSEVB RF9SVU5MT0NLKHJuaCk7DQorCQkJCVJBRElYX05PREVfSEVBRF9SVU5MT0NL KHJuaCwgJnRyYWNrZXIpOw0KIAkJCQlzZW5kZXJyKEVTUkNIKTsNCiAJCQl9 DQogCQl9IA0KIAkJUlRfTE9DSyhydCk7DQogCQlSVF9BRERSRUYocnQpOw0K LQkJUkFESVhfTk9ERV9IRUFEX1JVTkxPQ0socm5oKTsNCisJCVJBRElYX05P REVfSEVBRF9SVU5MT0NLKHJuaCwgJnRyYWNrZXIpOw0KIA0KIAkJLyogDQog CQkgKiBGaXggZm9yIFBSOiA4Mjk3NA0KZGlmZiAtdSAtciAuLi9zcmNfb3Jn XzguMl8yMDExMDMyOS9zeXMvbmV0aW5ldC9pY21wX3Zhci5oIC4vc3lzL25l dGluZXQvaWNtcF92YXIuaA0KLS0tIC4uL3NyY19vcmdfOC4yXzIwMTEwMzI5 L3N5cy9uZXRpbmV0L2ljbXBfdmFyLmgJMjAwOS0wOC0wMyAwODoxMzowNi4w MDAwMDAwMDAgKzAwMDANCisrKyAuL3N5cy9uZXRpbmV0L2ljbXBfdmFyLmgJ MjAxMS0wNC0wMyAxNjowNzo1Ny4wMDAwMDAwMDAgKzAwMDANCkBAIC0xMDIs NyArMTAyLDExIEBADQogI2RlZmluZSBCQU5ETElNX1JTVF9DTE9TRURQT1JU IDMgLyogTm8gY29ubmVjdGlvbiwgYW5kIG5vIGxpc3RlbmVycyAqLw0KICNk ZWZpbmUgQkFORExJTV9SU1RfT1BFTlBPUlQgNCAgIC8qIE5vIGNvbm5lY3Rp b24sIGxpc3RlbmVyICovDQogI2RlZmluZSBCQU5ETElNX0lDTVA2X1VOUkVB Q0ggNQ0KLSNkZWZpbmUgQkFORExJTV9NQVggNQ0KKyNkZWZpbmUgQkFORExJ TV9JQ01QX0ZXRF9VTlJFQUNIIDYgLyogZm9yd2FyZGluZzogbGltaXQgdW5y ZWFjaGFibGUgKi8NCisjZGVmaW5lIEJBTkRMSU1fSUNNUF9GV0RfVElNWENF RUQgNyAvKiBmb3J3YXJkaW5nOiBsaW1pdCB0aW1lLWV4Y2VlZGVkICovDQor I2RlZmluZSBCQU5ETElNX0lDTVBfRldEX05FRURGUkFHIDggLyogZm9yd2Fy ZGluZzogbGltaXQgbmVlZC1mcmFnICovDQorI2RlZmluZSBCQU5ETElNX0lD TVBfRldEX0ZJTFRFUiA5IC8qIGZvcndhcmRpbmc6IGxpbWl0IGFkbWluLXBy b2hpYiAqLw0KKyNkZWZpbmUgQkFORExJTV9NQVggOQ0KICNlbmRpZg0KIA0K ICNlbmRpZg0KZGlmZiAtdSAtciAuLi9zcmNfb3JnXzguMl8yMDExMDMyOS9z eXMvbmV0aW5ldC9pbi5jIC4vc3lzL25ldGluZXQvaW4uYw0KLS0tIC4uL3Ny Y19vcmdfOC4yXzIwMTEwMzI5L3N5cy9uZXRpbmV0L2luLmMJMjAxMS0wMS0x MiAyMDo0NDoxMS4wMDAwMDAwMDAgKzAwMDANCisrKyAuL3N5cy9uZXRpbmV0 L2luLmMJMjAxMS0wNC0wMyAxNjowNzo1Ny4wMDAwMDAwMDAgKzAwMDANCkBA IC0xMzkyLDEyICsxMzkyLDQyIEBADQogaW5fbGx0YWJsZV9ydGNoZWNrKHN0 cnVjdCBpZm5ldCAqaWZwLCB1X2ludCBmbGFncywgY29uc3Qgc3RydWN0IHNv Y2thZGRyICpsM2FkZHIpDQogew0KIAlzdHJ1Y3QgcnRlbnRyeSAqcnQ7DQor I2lmZGVmIFJBRElYX01QQVRIDQorCWludDY0X3Qgd2VpZ2h0Ow0KKwlzdHJ1 Y3QgcnRlbnRyeSAqcnQwOw0KKwlpbnQzMl90IGZvdW5kID0gMDsNCisjZW5k aWYNCiANCiAJS0FTU0VSVChsM2FkZHItPnNhX2ZhbWlseSA9PSBBRl9JTkVU LA0KIAkgICAgKCJzaW5fZmFtaWx5ICVkIiwgbDNhZGRyLT5zYV9mYW1pbHkp KTsNCiANCiAJLyogWFhYIHJ0YWxsb2MxIHNob3VsZCB0YWtlIGEgY29uc3Qg cGFyYW0gKi8NCiAJcnQgPSBydGFsbG9jMShfX0RFQ09OU1Qoc3RydWN0IHNv Y2thZGRyICosIGwzYWRkciksIDAsIDApOw0KKyNpZmRlZiBSQURJWF9NUEFU SA0KKwlydDAgPSBydDsNCisJaWYgKChydCAhPSBOVUxMKSAmJiAoIHJuX21w YXRoX25leHQoKHN0cnVjdCByYWRpeF9ub2RlICopcnQpICE9IE5VTEwpKSB7 DQorCQkvKiBjaGVjayBpZiB0aGVyZSBhcmUgb3RoZXIsIG1hdGNoaW5nIHJv dXRlcyAqLw0KKwkJLyogZmluZCBsb3dlc3Qgd2VpZ2h0IHJvdXRlICovDQor CQlmb3IgKCB3ZWlnaHQgPSBydC0+cnRfcm14LnJteF93ZWlnaHQ7IHJ0ICE9 IE5VTEw7IHJ0ID0gKHN0cnVjdCBydGVudHJ5ICopcm5fbXBhdGhfbmV4dCgg KHN0cnVjdCByYWRpeF9ub2RlICopcnQpKSB7DQorCQkJaWYocnQtPnJ0X2Zs YWdzICYgUlRGX1VQKSB7DQorCQkJCWlmICh3ZWlnaHQgPiBydC0+cnRfcm14 LnJteF93ZWlnaHQpDQorCQkJCQl3ZWlnaHQgPSBydC0+cnRfcm14LnJteF93 ZWlnaHQ7DQorCQkJfQ0KKwkJfQ0KKw0KKwkJLyogZmluZCBub3cgb25lIG5v biBnYXRld2F5IHJvdXRlIHdpdGggbG93ZXN0IHdlaWdodCAqLw0KKwkJZm9y ICggcnQgPSBydDA7IHJ0ICE9IE5VTEw7IHJ0ID0gKHN0cnVjdCBydGVudHJ5 ICopcm5fbXBhdGhfbmV4dCggKHN0cnVjdCByYWRpeF9ub2RlICopcnQpKSB7 DQorCQkJaWYocnQtPnJ0X2ZsYWdzICYgUlRGX1VQKSB7DQorCQkJCWlmICgo d2VpZ2h0ID09IHJ0LT5ydF9ybXgucm14X3dlaWdodCkgJiYgIShydC0+cnRf ZmxhZ3MgJiBSVEZfR0FURVdBWSkpIHsNCisJCQkJCWZvdW5kID0gMTsNCisJ CQkJCSBicmVhazsNCisJCQkJfQ0KKwkJCX0NCisJCX0NCisJCWlmIChmb3Vu ZCA9PSAwKQ0KKwkJCXJ0ID0gTlVMTDsNCisJfQ0KKyNlbmRpZg0KIAlpZiAo cnQgPT0gTlVMTCB8fCAoIShmbGFncyAmIExMRV9QVUIpICYmDQogCQkJICAg KChydC0+cnRfZmxhZ3MgJiBSVEZfR0FURVdBWSkgfHwgDQogCQkJICAgIChy dC0+cnRfaWZwICE9IGlmcCkpKSkgew0KQEAgLTE0MDUsMTEgKzE0MzUsMjAg QEANCiAJCWxvZyhMT0dfSU5GTywgIklQdjQgYWRkcmVzczogXCIlc1wiIGlz IG5vdCBvbiB0aGUgbmV0d29ya1xuIiwNCiAJCSAgICBpbmV0X250b2EoKChj b25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKilsM2FkZHIpLT5zaW5fYWRkcikp Ow0KICNlbmRpZg0KKyNpZmRlZiBSQURJWF9NUEFUSA0KKwkJaWYgKHJ0MCAh PSBOVUxMKQ0KKwkJCVJURlJFRV9MT0NLRUQocnQwKTsNCisjZWxzZQ0KIAkJ aWYgKHJ0ICE9IE5VTEwpDQogCQkJUlRGUkVFX0xPQ0tFRChydCk7DQorI2Vu ZGlmDQogCQlyZXR1cm4gKEVJTlZBTCk7DQogCX0NCisjaWZkZWYgUkFESVhf TVBBVEgNCisJUlRGUkVFX0xPQ0tFRChydDApOw0KKyNlbHNlDQogCVJURlJF RV9MT0NLRUQocnQpOw0KKyNlbmRpZg0KIAlyZXR1cm4gMDsNCiB9DQogDQpk aWZmIC11IC1yIC4uL3NyY19vcmdfOC4yXzIwMTEwMzI5L3N5cy9uZXRpbmV0 L2luX3JteC5jIC4vc3lzL25ldGluZXQvaW5fcm14LmMNCi0tLSAuLi9zcmNf b3JnXzguMl8yMDExMDMyOS9zeXMvbmV0aW5ldC9pbl9ybXguYwkyMDEwLTEw LTExIDExOjI1OjM3LjAwMDAwMDAwMCArMDAwMA0KKysrIC4vc3lzL25ldGlu ZXQvaW5fcm14LmMJMjAxMS0wNC0wMyAxNjowNzo1Ny4wMDAwMDAwMDAgKzAw MDANCkBAIC01MSw2ICs1MSw4IEBADQogI2luY2x1ZGUgPHN5cy9tYnVmLmg+ DQogI2luY2x1ZGUgPHN5cy9zeXNsb2cuaD4NCiAjaW5jbHVkZSA8c3lzL2Nh bGxvdXQuaD4NCisjaW5jbHVkZSA8c3lzL2xvY2suaD4NCisjaW5jbHVkZSA8 c3lzL3JtbG9jay5oPg0KIA0KICNpbmNsdWRlIDxuZXQvaWYuaD4NCiAjaW5j bHVkZSA8bmV0L3JvdXRlLmg+DQpkaWZmIC11IC1yIC4uL3NyY19vcmdfOC4y XzIwMTEwMzI5L3N5cy9uZXRpbmV0L2lwX2Zhc3Rmd2QuYyAuL3N5cy9uZXRp bmV0L2lwX2Zhc3Rmd2QuYw0KLS0tIC4uL3NyY19vcmdfOC4yXzIwMTEwMzI5 L3N5cy9uZXRpbmV0L2lwX2Zhc3Rmd2QuYwkyMDEwLTEyLTEwIDE0OjA2OjUw LjAwMDAwMDAwMCArMDAwMA0KKysrIC4vc3lzL25ldGluZXQvaXBfZmFzdGZ3 ZC5jCTIwMTEtMDQtMDUgMDE6MTM6NDEuMDAwMDAwMDAwICswMDAwDQpAQCAt OTQsNiArOTQsOSBAQA0KICNpbmNsdWRlIDxuZXQvaWZfdmFyLmg+DQogI2lu Y2x1ZGUgPG5ldC9pZl9kbC5oPg0KICNpbmNsdWRlIDxuZXQvcm91dGUuaD4N CisjaWZkZWYgUkFESVhfTVBBVEgNCisjaW5jbHVkZSA8bmV0L3JhZGl4X21w YXRoLmg+DQorI2VuZGlmDQogI2luY2x1ZGUgPG5ldC92bmV0Lmg+DQogDQog I2luY2x1ZGUgPG5ldGluZXQvaW4uaD4NCkBAIC0xMDIsNiArMTA1LDcgQEAN CiAjaW5jbHVkZSA8bmV0aW5ldC9pcC5oPg0KICNpbmNsdWRlIDxuZXRpbmV0 L2lwX3Zhci5oPg0KICNpbmNsdWRlIDxuZXRpbmV0L2lwX2ljbXAuaD4NCisj aW5jbHVkZSA8bmV0aW5ldC9pY21wX3Zhci5oPg0KICNpbmNsdWRlIDxuZXRp bmV0L2lwX29wdGlvbnMuaD4NCiANCiAjaW5jbHVkZSA8bWFjaGluZS9pbl9j a3N1bS5oPg0KQEAgLTExMyw3ICsxMTcsMTEgQEANCiAgICAgJlZORVRfTkFN RShpcGZhc3Rmb3J3YXJkX2FjdGl2ZSksIDAsICJFbmFibGUgZmFzdCBJUCBm b3J3YXJkaW5nIik7DQogDQogc3RhdGljIHN0cnVjdCBzb2NrYWRkcl9pbiAq DQotaXBfZmluZHJvdXRlKHN0cnVjdCByb3V0ZSAqcm8sIHN0cnVjdCBpbl9h ZGRyIGRlc3QsIHN0cnVjdCBtYnVmICptKQ0KKyNpZmRlZiBSQURJWF9NUEFU SA0KK2lwX2ZpbmRyb3V0ZShzdHJ1Y3Qgcm91dGUgKnJvLCB1aW50MzJfdCBo YXNoLCBzdHJ1Y3QgaW5fYWRkciBkZXN0LCBzdHJ1Y3QgbWJ1ZiAqbSwgc3Ry dWN0IHJ0bG9va3VwICpydGwpDQorI2Vsc2UNCitpcF9maW5kcm91dGUoc3Ry dWN0IHJvdXRlICpybywgc3RydWN0IGluX2FkZHIgZGVzdCwgc3RydWN0IG1i dWYgKm0sIHN0cnVjdCBydGxvb2t1cCAqcnRsKQ0KKyNlbmRpZg0KIHsNCiAJ c3RydWN0IHNvY2thZGRyX2luICpkc3Q7DQogCXN0cnVjdCBydGVudHJ5ICpy dDsNCkBAIC0xMjYsNyArMTM0LDE3IEBADQogCWRzdC0+c2luX2ZhbWlseSA9 IEFGX0lORVQ7DQogCWRzdC0+c2luX2xlbiA9IHNpemVvZigqZHN0KTsNCiAJ ZHN0LT5zaW5fYWRkci5zX2FkZHIgPSBkZXN0LnNfYWRkcjsNCi0JaW5fcnRh bGxvY19pZ24ocm8sIDAsIE1fR0VURklCKG0pKTsNCisNCisJcnRsLT5ydF9n YXRld2F5ID0gKHN0cnVjdCBzb2NrYWRkciAqKWRzdDsNCisjaWZkZWYgUkFE SVhfTVBBVEgNCisJaWYgKCFydGxvb2t1cF9tcGF0aF9maWIoKHN0cnVjdCBz b2NrYWRkciAqKWRzdCwNCisJCQloYXNoLCBNX0dFVEZJQihtKSwgIHJ0bCwg UlRMX1BLU0VOVCkpDQorI2Vsc2UNCisJaWYgKCFydGxvb2t1cF9maWIoIChz dHJ1Y3Qgc29ja2FkZHIgKilkc3QsIE1fR0VURklCKG0pLCBydGwsIFJUTF9Q S1NFTlQpKQ0KKyNlbmRpZg0KKwkJcm8tPnJvX3J0ID0gTlVMTDsNCisJZWxz ZQ0KKwkJcm8tPnJvX3J0ID0gKHN0cnVjdCBydGVudHJ5ICopcnRsOw0KIA0K IAkvKg0KIAkgKiBSb3V0ZSB0aGVyZSBhbmQgaW50ZXJmYWNlIHN0aWxsIHVw Pw0KQEAgLTE0MCw5ICsxNTgsMTAgQEANCiAJfSBlbHNlIHsNCiAJCUlQU1RB VF9JTkMoaXBzX25vcm91dGUpOw0KIAkJSVBTVEFUX0lOQyhpcHNfY2FudGZv cndhcmQpOw0KLQkJaWYgKHJ0KQ0KLQkJCVJURlJFRShydCk7DQotCQlpY21w X2Vycm9yKG0sIElDTVBfVU5SRUFDSCwgSUNNUF9VTlJFQUNIX0hPU1QsIDAs IDApOw0KKwkJaWYgKGJhZHBvcnRfYmFuZGxpbShCQU5ETElNX0lDTVBfRldE X1VOUkVBQ0gpIDwgMCkNCisJCQltX2ZyZWVtKG0pOw0KKwkJZWxzZQ0KKwkJ CWljbXBfZXJyb3IobSwgSUNNUF9VTlJFQUNILCBJQ01QX1VOUkVBQ0hfSE9T VCwgMCwgMCk7DQogCQlyZXR1cm4gTlVMTDsNCiAJfQ0KIAlyZXR1cm4gZHN0 Ow0KQEAgLTE2Nyw2ICsxODYsNyBAQA0KIAl1X3Nob3J0IHN1bSwgaXBfbGVu Ow0KIAlpbnQgZXJyb3IgPSAwOw0KIAlpbnQgaGxlbiwgbXR1Ow0KKwlzdHJ1 Y3QgcnRsb29rdXAgcnRsOw0KICNpZmRlZiBJUEZJUkVXQUxMX0ZPUldBUkQN CiAJc3RydWN0IG1fdGFnICpmd2RfdGFnOw0KICNlbmRpZg0KQEAgLTI5OSw4 ICszMTksMTEgQEANCiAJCWlmIChpcF9kb29wdHMgPT0gMSkNCiAJCQlyZXR1 cm4gbTsNCiAJCWVsc2UgaWYgKGlwX2Rvb3B0cyA9PSAyKSB7DQotCQkJaWNt cF9lcnJvcihtLCBJQ01QX1VOUkVBQ0gsIElDTVBfVU5SRUFDSF9GSUxURVJf UFJPSElCLA0KLQkJCQkwLCAwKTsNCisJCQlpZiAoYmFkcG9ydF9iYW5kbGlt KEJBTkRMSU1fSUNNUF9GV0RfRklMVEVSKSA8IDApDQorCQkJCW1fZnJlZW0o bSk7DQorCQkJZWxzZQ0KKwkJCQlpY21wX2Vycm9yKG0sIElDTVBfVU5SRUFD SCwNCisJCQkJCUlDTVBfVU5SRUFDSF9GSUxURVJfUFJPSElCLCAwLCAwKTsN CiAJCQlyZXR1cm4gTlVMTDsJLyogbWJ1ZiBhbHJlYWR5IGZyZWUnZCAqLw0K IAkJfQ0KIAkJLyogZWxzZSBpZ25vcmUgSVAgb3B0aW9ucyBhbmQgY29udGlu dWUgKi8NCkBAIC0zOTksNyArNDIyLDExIEBADQogCWlmICghVl9pcHN0ZWFs dGgpIHsNCiAjZW5kaWYNCiAJaWYgKGlwLT5pcF90dGwgPD0gSVBUVExERUMp IHsNCi0JCWljbXBfZXJyb3IobSwgSUNNUF9USU1YQ0VFRCwgSUNNUF9USU1Y Q0VFRF9JTlRSQU5TLCAwLCAwKTsNCisJCWlmIChiYWRwb3J0X2JhbmRsaW0o QkFORExJTV9JQ01QX0ZXRF9USU1YQ0VFRCkgPCAwKQ0KKwkJCW1fZnJlZW0o bSk7DQorCQllbHNlDQorCQkJaWNtcF9lcnJvcihtLCBJQ01QX1RJTVhDRUVE LCBJQ01QX1RJTVhDRUVEX0lOVFJBTlMsDQorCQkJCTAsIDApOw0KIAkJcmV0 dXJuIE5VTEw7CS8qIG1idWYgYWxyZWFkeSBmcmVlJ2QgKi8NCiAJfQ0KIA0K QEAgLTQyMCw3ICs0NDcsMTMgQEANCiAJLyoNCiAJICogRmluZCByb3V0ZSB0 byBkZXN0aW5hdGlvbi4NCiAJICovDQotCWlmICgoZHN0ID0gaXBfZmluZHJv dXRlKCZybywgZGVzdCwgbSkpID09IE5VTEwpDQorI2lmZGVmIFJBRElYX01Q QVRIDQorCWlmICgoZHN0ID0gaXBfZmluZHJvdXRlKCZybywgbnRvaGwoaXAt PmlwX3NyYy5zX2FkZHIgXiBpcC0+aXBfZHN0LnNfYWRkciksDQorCQkJZGVz dCwgbSwgJnJ0bCkpID09IE5VTEwpDQorI2Vsc2UNCisJaWYgKChkc3QgPSBp cF9maW5kcm91dGUoJnJvLA0KKwkJCWRlc3QsIG0sICZydGwpKSA9PSBOVUxM KQ0KKyNlbmRpZg0KIAkJcmV0dXJuIE5VTEw7CS8qIGljbXAgdW5yZWFjaCBh bHJlYWR5IHNlbnQgKi8NCiAJaWZwID0gcm8ucm9fcnQtPnJ0X2lmcDsNCiAN CkBAIC00NzYsOCArNTA5LDYgQEANCiAJCQkgKiAib3VycyItbGFiZWwuDQog CQkJICovDQogCQkJbS0+bV9mbGFncyB8PSBNX0ZBU1RGV0RfT1VSUzsNCi0J CQlpZiAocm8ucm9fcnQpDQotCQkJCVJURlJFRShyby5yb19ydCk7DQogCQkJ cmV0dXJuIG07DQogCQl9DQogCQkvKg0KQEAgLTQ5MCw4ICs1MjEsNyBAQA0K IAkJCW1fdGFnX2RlbGV0ZShtLCBmd2RfdGFnKTsNCiAJCX0NCiAjZW5kaWYg LyogSVBGSVJFV0FMTF9GT1JXQVJEICovDQotCQlSVEZSRUUocm8ucm9fcnQp Ow0KLQkJaWYgKChkc3QgPSBpcF9maW5kcm91dGUoJnJvLCBkZXN0LCBtKSkg PT0gTlVMTCkNCisJCWlmICgoZHN0ID0gaXBfZmluZHJvdXRlKCZybywgZGVz dCwgbSwgJnJ0bCkpID09IE5VTEwpDQogCQkJcmV0dXJuIE5VTEw7CS8qIGlj bXAgdW5yZWFjaCBhbHJlYWR5IHNlbnQgKi8NCiAJCWlmcCA9IHJvLnJvX3J0 LT5ydF9pZnA7DQogCX0NCkBAIC01MDcsNiArNTM3LDggQEANCiAJaWYgKChy by5yb19ydC0+cnRfZmxhZ3MgJiBSVEZfUkVKRUNUKSAmJg0KIAkgICAgKHJv LnJvX3J0LT5ydF9ybXgucm14X2V4cGlyZSA9PSAwIHx8DQogCSAgICB0aW1l X3VwdGltZSA8IHJvLnJvX3J0LT5ydF9ybXgucm14X2V4cGlyZSkpIHsNCisJ CWlmIChiYWRwb3J0X2JhbmRsaW0oQkFORExJTV9JQ01QX0ZXRF9VTlJFQUNI KSA8IDApDQorCQkJZ290byBkcm9wOw0KIAkJaWNtcF9lcnJvcihtLCBJQ01Q X1VOUkVBQ0gsIElDTVBfVU5SRUFDSF9IT1NULCAwLCAwKTsNCiAJCWdvdG8g Y29uc3VtZWQ7DQogCX0NCkBAIC01MjcsNiArNTU5LDggQEANCiAJICogQ2hl Y2sgaWYgbWVkaWEgbGluayBzdGF0ZSBvZiBpbnRlcmZhY2UgaXMgbm90IGRv d24NCiAJICovDQogCWlmIChpZnAtPmlmX2xpbmtfc3RhdGUgPT0gTElOS19T VEFURV9ET1dOKSB7DQorCQlpZiAoYmFkcG9ydF9iYW5kbGltKEJBTkRMSU1f SUNNUF9GV0RfVU5SRUFDSCkgPCAwKQ0KKwkJCWdvdG8gZHJvcDsNCiAJCWlj bXBfZXJyb3IobSwgSUNNUF9VTlJFQUNILCBJQ01QX1VOUkVBQ0hfSE9TVCwg MCwgMCk7DQogCQlnb3RvIGNvbnN1bWVkOw0KIAl9DQpAQCAtNTU3LDggKzU5 MSw5IEBADQogCQkgKi8NCiAJCWlmIChpcC0+aXBfb2ZmICYgSVBfREYpIHsN CiAJCQlJUFNUQVRfSU5DKGlwc19jYW50ZnJhZyk7DQotCQkJaWNtcF9lcnJv cihtLCBJQ01QX1VOUkVBQ0gsIElDTVBfVU5SRUFDSF9ORUVERlJBRywNCi0J CQkJMCwgbXR1KTsNCisJCQlpZiAoYmFkcG9ydF9iYW5kbGltKEJBTkRMSU1f SUNNUF9GV0RfTkVFREZSQUcpIDwgMCkNCisJCQkJZ290byBkcm9wOw0KKwkJ CWljbXBfZXJyb3IobSwgSUNNUF9VTlJFQUNILCBJQ01QX1VOUkVBQ0hfTkVF REZSQUcsIDAsIG10dSk7DQogCQkJZ290byBjb25zdW1lZDsNCiAJCX0gZWxz ZSB7DQogCQkJLyoNCkBAIC02MDYsMTIgKzY0MSw5IEBADQogCQlJUFNUQVRf SU5DKGlwc19mYXN0Zm9yd2FyZCk7DQogCX0NCiBjb25zdW1lZDoNCi0JUlRG UkVFKHJvLnJvX3J0KTsNCiAJcmV0dXJuIE5VTEw7DQogZHJvcDoNCiAJaWYg KG0pDQogCQltX2ZyZWVtKG0pOw0KLQlpZiAocm8ucm9fcnQpDQotCQlSVEZS RUUocm8ucm9fcnQpOw0KIAlyZXR1cm4gTlVMTDsNCiB9DQpkaWZmIC11IC1y IC4uL3NyY19vcmdfOC4yXzIwMTEwMzI5L3N5cy9uZXRpbmV0L2lwX2ljbXAu YyAuL3N5cy9uZXRpbmV0L2lwX2ljbXAuYw0KLS0tIC4uL3NyY19vcmdfOC4y XzIwMTEwMzI5L3N5cy9uZXRpbmV0L2lwX2ljbXAuYwkyMDEwLTA5LTIxIDIy OjMzOjMwLjAwMDAwMDAwMCArMDAwMA0KKysrIC4vc3lzL25ldGluZXQvaXBf aWNtcC5jCTIwMTEtMDQtMDQgMjM6MDE6NTcuMDAwMDAwMDAwICswMDAwDQpA QCAtOTU4LDcgKzk1OCwxMSBAQA0KIAkJeyAiaWNtcCB0c3RhbXAgcmVzcG9u c2UiIH0sDQogCQl7ICJjbG9zZWQgcG9ydCBSU1QgcmVzcG9uc2UiIH0sDQog CQl7ICJvcGVuIHBvcnQgUlNUIHJlc3BvbnNlIiB9LA0KLQkJeyAiaWNtcDYg dW5yZWFjaCByZXNwb25zZSIgfQ0KKwkJeyAiaWNtcDYgdW5yZWFjaCByZXNw b25zZSIgfSwNCisJCXsgImZvcndhcmRpbmc6IGxpbWl0IHVucmVhY2hhYmxl IiB9LA0KKwkJeyAiZm9yd2FyZGluZzogbGltaXQgdGltZS1leGNlZWRlZCIg fSwNCisJCXsgImZvcndhcmRpbmc6IGxpbWl0IG5lZWQtZnJhZyIgfSwNCisJ CXsgImZvcndhcmRpbmc6IGxpbWl0IGFkbWluLXByb2hpYiIgfQ0KIAl9Ow0K IA0KIAkvKg0KZGlmZiAtdSAtciAuLi9zcmNfb3JnXzguMl8yMDExMDMyOS9z eXMvbmV0aW5ldC9pcF9pbnB1dC5jIC4vc3lzL25ldGluZXQvaXBfaW5wdXQu Yw0KLS0tIC4uL3NyY19vcmdfOC4yXzIwMTEwMzI5L3N5cy9uZXRpbmV0L2lw X2lucHV0LmMJMjAxMS0wMy0yOCAxNToyNjo1Mi4wMDAwMDAwMDAgKzAwMDAN CisrKyAuL3N5cy9uZXRpbmV0L2lwX2lucHV0LmMJMjAxMS0wNC0wNSAwMTox NDowMC4wMDAwMDAwMDAgKzAwMDANCkBAIC03MSw2ICs3MSw3IEBADQogI2lu Y2x1ZGUgPG5ldGluZXQvaXBfdmFyLmg+DQogI2luY2x1ZGUgPG5ldGluZXQv aXBfZncuaD4NCiAjaW5jbHVkZSA8bmV0aW5ldC9pcF9pY21wLmg+DQorI2lu Y2x1ZGUgPG5ldGluZXQvaWNtcF92YXIuaD4NCiAjaW5jbHVkZSA8bmV0aW5l dC9pcF9vcHRpb25zLmg+DQogI2luY2x1ZGUgPG1hY2hpbmUvaW5fY2tzdW0u aD4NCiAjaW5jbHVkZSA8bmV0aW5ldC9pcF9jYXJwLmg+DQpAQCAtMTM0OCwy MCArMTM0OSwyMiBAQA0KIAlzdHJ1Y3Qgcm91dGUgc3JvOw0KIAlzdHJ1Y3Qg c29ja2FkZHJfaW4gKnNpbjsNCiAJc3RydWN0IGluX2lmYWRkciAqaWE7DQor CXN0cnVjdCBzb2NrYWRkcl9pbiAqbHVfZHN0Ow0KKwlzdHJ1Y3QgcnRsb29r dXAgcnRsOw0KIA0KIAliemVybygmc3JvLCBzaXplb2Yoc3JvKSk7DQogCXNp biA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmc3JvLnJvX2RzdDsNCiAJc2lu LT5zaW5fZmFtaWx5ID0gQUZfSU5FVDsNCiAJc2luLT5zaW5fbGVuID0gc2l6 ZW9mKCpzaW4pOw0KIAlzaW4tPnNpbl9hZGRyID0gZHN0Ow0KLQlpbl9ydGFs bG9jX2lnbigmc3JvLCAwLCBmaWJudW0pOw0KLQ0KLQlpZiAoc3JvLnJvX3J0 ID09IE5VTEwpDQorCWx1X2RzdCA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikm c3JvLnJvX2RzdDsNCisJcnRsLnJ0X2dhdGV3YXkgPSAoc3RydWN0IHNvY2th ZGRyICopbHVfZHN0Ow0KKwlpZiAoIXJ0bG9va3VwX2ZpYiggKHN0cnVjdCBz b2NrYWRkciAqKWx1X2RzdCwNCisJCQlmaWJudW0sICZydGwsIDApKQ0KIAkJ cmV0dXJuIChOVUxMKTsNCiANCi0JaWEgPSBpZmF0b2lhKHNyby5yb19ydC0+ cnRfaWZhKTsNCisJaWEgPSBpZmF0b2lhKHJ0bC5ydF9pZmEpOw0KIAlpZmFf cmVmKCZpYS0+aWFfaWZhKTsNCi0JUlRGUkVFKHNyby5yb19ydCk7DQogCXJl dHVybiAoaWEpOw0KIH0NCiANCkBAIC0xMzk3LDYgKzE0MDAsOSBAQA0KIAlz dHJ1Y3QgaW5fYWRkciBkZXN0Ow0KIAlzdHJ1Y3Qgcm91dGUgcm87DQogCWlu dCBlcnJvciwgdHlwZSA9IDAsIGNvZGUgPSAwLCBtdHUgPSAwOw0KKwlzdHJ1 Y3QgcnRsb29rdXAgcnRsOw0KKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gKmRzdDsN CisJaW50IGljbXBfc2VuZCA9IDA7DQogDQogCWlmIChtLT5tX2ZsYWdzICYg KE1fQkNBU1R8TV9NQ0FTVCkgfHwgaW5fY2FuZm9yd2FyZChpcC0+aXBfZHN0 KSA9PSAwKSB7DQogCQlJUFNUQVRfSU5DKGlwc19jYW50Zm9yd2FyZCk7DQpA QCAtMTQwNyw4ICsxNDEzLDExIEBADQogCWlmICghVl9pcHN0ZWFsdGgpIHsN CiAjZW5kaWYNCiAJCWlmIChpcC0+aXBfdHRsIDw9IElQVFRMREVDKSB7DQot CQkJaWNtcF9lcnJvcihtLCBJQ01QX1RJTVhDRUVELCBJQ01QX1RJTVhDRUVE X0lOVFJBTlMsDQotCQkJICAgIDAsIDApOw0KKwkJCWlmIChiYWRwb3J0X2Jh bmRsaW0oQkFORExJTV9JQ01QX0ZXRF9USU1YQ0VFRCkgPCAwKQ0KKwkJCQlt X2ZyZWVtKG0pOw0KKwkJCWVsc2UNCisJCQkJaWNtcF9lcnJvcihtLCBJQ01Q X1RJTVhDRUVELCBJQ01QX1RJTVhDRUVEX0lOVFJBTlMsDQorCQkJCQkwLCAw KTsNCiAJCQlyZXR1cm47DQogCQl9DQogI2lmZGVmIElQU1RFQUxUSA0KQEAg LTE0MjMsNyArMTQzMiwxMCBAQA0KIAkgKiBpcF9vdXRwdXQgaW4gY2FzZSBv ZiBvdXRnb2luZyBJUHNlYyBwb2xpY3kuDQogCSAqLw0KIAlpZiAoIXNyY3J0 ICYmIGlhID09IE5VTEwpIHsNCi0JCWljbXBfZXJyb3IobSwgSUNNUF9VTlJF QUNILCBJQ01QX1VOUkVBQ0hfSE9TVCwgMCwgMCk7DQorCQlpZiAoYmFkcG9y dF9iYW5kbGltKEJBTkRMSU1fSUNNUF9GV0RfVU5SRUFDSCkgPCAwKQ0KKwkJ CW1fZnJlZW0obSk7DQorCQllbHNlDQorCQkJaWNtcF9lcnJvcihtLCBJQ01Q X1VOUkVBQ0gsIElDTVBfVU5SRUFDSF9IT1NULCAwLCAwKTsNCiAJCXJldHVy bjsNCiAJfQ0KICNlbmRpZg0KQEAgLTE0ODgsNyArMTUwMCwxMyBAQA0KIAkJ c2luLT5zaW5fZmFtaWx5ID0gQUZfSU5FVDsNCiAJCXNpbi0+c2luX2xlbiA9 IHNpemVvZigqc2luKTsNCiAJCXNpbi0+c2luX2FkZHIgPSBpcC0+aXBfZHN0 Ow0KLQkJaW5fcnRhbGxvY19pZ24oJnJvLCAwLCBNX0dFVEZJQihtKSk7DQor CQlkc3QgPSAoc3RydWN0IHNvY2thZGRyX2luICopJnJvLnJvX2RzdDsNCisJ CXJ0bC5ydF9nYXRld2F5ID0gKHN0cnVjdCBzb2NrYWRkciAqKWRzdDsNCisJ CWlmICghcnRsb29rdXBfZmliKCAoc3RydWN0IHNvY2thZGRyICopZHN0LA0K KwkJCQlNX0dFVEZJQihtKSwgJnJ0bCwgMCkpDQorCQkJcm8ucm9fcnQgPSBO VUxMOw0KKwkJZWxzZQ0KKwkJCXJvLnJvX3J0ID0gKHN0cnVjdCBydGVudHJ5 ICopJnJ0bDsNCiANCiAJCXJ0ID0gcm8ucm9fcnQ7DQogDQpAQCAtMTUwOCw4 ICsxNTI2LDYgQEANCiAJCQkJY29kZSA9IElDTVBfUkVESVJFQ1RfSE9TVDsN CiAJCQl9DQogCQl9DQotCQlpZiAocnQpDQotCQkJUlRGUkVFKHJ0KTsNCiAJ fQ0KIA0KIAkvKg0KQEAgLTE1MjIsOCArMTUzOCw2IEBADQogDQogCWlmIChl cnJvciA9PSBFTVNHU0laRSAmJiByby5yb19ydCkNCiAJCW10dSA9IHJvLnJv X3J0LT5ydF9ybXgucm14X210dTsNCi0JaWYgKHJvLnJvX3J0KQ0KLQkJUlRG UkVFKHJvLnJvX3J0KTsNCiANCiAJaWYgKGVycm9yKQ0KIAkJSVBTVEFUX0lO QyhpcHNfY2FudGZvcndhcmQpOw0KQEAgLTE1NTgsMTEgKzE1NzIsMTMgQEAN CiAJZGVmYXVsdDoNCiAJCXR5cGUgPSBJQ01QX1VOUkVBQ0g7DQogCQljb2Rl ID0gSUNNUF9VTlJFQUNIX0hPU1Q7DQorCQlpY21wX3NlbmQgPSBiYWRwb3J0 X2JhbmRsaW0oIEJBTkRMSU1fSUNNUF9GV0RfVU5SRUFDSCk7DQogCQlicmVh azsNCiANCiAJY2FzZSBFTVNHU0laRToNCiAJCXR5cGUgPSBJQ01QX1VOUkVB Q0g7DQogCQljb2RlID0gSUNNUF9VTlJFQUNIX05FRURGUkFHOw0KKwkJaWNt cF9zZW5kID0gYmFkcG9ydF9iYW5kbGltKCBCQU5ETElNX0lDTVBfRldEX05F RURGUkFHKTsNCiANCiAjaWZkZWYgSVBTRUMNCiAJCS8qIA0KQEAgLTE2MTgs NyArMTYzNCwxMCBAQA0KIAl9DQogCWlmIChpYSAhPSBOVUxMKQ0KIAkJaWZh X2ZyZWUoJmlhLT5pYV9pZmEpOw0KLQlpY21wX2Vycm9yKG1jb3B5LCB0eXBl LCBjb2RlLCBkZXN0LnNfYWRkciwgbXR1KTsNCisJaWYgKGljbXBfc2VuZCA8 IDApDQorCQltX2ZyZWVtKG0pOw0KKwllbHNlDQorCQlpY21wX2Vycm9yKG1j b3B5LCB0eXBlLCBjb2RlLCBkZXN0LnNfYWRkciwgbXR1KTsNCiB9DQogDQog dm9pZA0KZGlmZiAtdSAtciAuLi9zcmNfb3JnXzguMl8yMDExMDMyOS9zeXMv bmV0aW5ldC9pcF9vdXRwdXQuYyAuL3N5cy9uZXRpbmV0L2lwX291dHB1dC5j DQotLS0gLi4vc3JjX29yZ184LjJfMjAxMTAzMjkvc3lzL25ldGluZXQvaXBf b3V0cHV0LmMJMjAxMC0xMC0yNSAxMzoxNjoxMS4wMDAwMDAwMDAgKzAwMDAN CisrKyAuL3N5cy9uZXRpbmV0L2lwX291dHB1dC5jCTIwMTEtMDQtMDUgMDE6 MTU6MzIuMDAwMDAwMDAwICswMDAwDQpAQCAtMTI4LDYgKzEyOCw3IEBADQog CXN0cnVjdCBpbl9pZmFkZHIgKmlhID0gTlVMTDsNCiAJaW50IGlzYnJvYWRj YXN0LCBzd19jc3VtOw0KIAlzdHJ1Y3Qgcm91dGUgaXByb3V0ZTsNCisJc3Ry dWN0IHJ0bG9va3VwIHJ0bDsNCiAJc3RydWN0IHJ0ZW50cnkgKnJ0ZTsJLyog Y2FjaGUgZm9yIHJvLT5yb19ydCAqLw0KIAlzdHJ1Y3QgaW5fYWRkciBvZHN0 Ow0KICNpZmRlZiBJUEZJUkVXQUxMX0ZPUldBUkQNCkBAIC0yNzEsMTYgKzI3 MiwyNCBAQA0KIAkJICogb3BlcmF0aW9uIChhcyBpdCBpcyBmb3IgQVJQKS4N CiAJCSAqLw0KIAkJaWYgKHJ0ZSA9PSBOVUxMKSB7DQorCQkJcnRsLnJ0X2dh dGV3YXkgPSAoc3RydWN0IHNvY2thZGRyICopZHN0Ow0KICNpZmRlZiBSQURJ WF9NUEFUSA0KLQkJCXJ0YWxsb2NfbXBhdGhfZmliKHJvLA0KLQkJCSAgICBu dG9obChpcC0+aXBfc3JjLnNfYWRkciBeIGlwLT5pcF9kc3Quc19hZGRyKSwN Ci0JCQkgICAgaW5wID8gaW5wLT5pbnBfaW5jLmluY19maWJudW0gOiBNX0dF VEZJQihtKSk7DQorCQkJaWYgKCFydGxvb2t1cF9tcGF0aF9maWIoKHN0cnVj dCBzb2NrYWRkciAqKWRzdCwNCisJCQkJCW50b2hsKGlwLT5pcF9zcmMuc19h ZGRyIF4gaXAtPmlwX2RzdC5zX2FkZHIpLA0KKwkJCQkJaW5wID8gaW5wLT5p bnBfaW5jLmluY19maWJudW0gOiBNX0dFVEZJQihtKSwNCisJCQkJCSZydGws IFJUTF9QS1NFTlQpKQ0KICNlbHNlDQotCQkJaW5fcnRhbGxvY19pZ24ocm8s IDAsDQotCQkJICAgIGlucCA/IGlucC0+aW5wX2luYy5pbmNfZmlibnVtIDog TV9HRVRGSUIobSkpOw0KKwkJCWlmICghcnRsb29rdXBfZmliKCAoc3RydWN0 IHNvY2thZGRyICopZHN0LA0KKwkJCQkJaW5wID8gaW5wLT5pbnBfaW5jLmlu Y19maWJudW0gOiBNX0dFVEZJQihtKSwNCisJCQkJCSZydGwsIFJUTF9QS1NF TlQpKQ0KICNlbmRpZg0KLQkJCXJ0ZSA9IHJvLT5yb19ydDsNCisJCQkJcm8t PnJvX3J0ID0gTlVMTDsNCisJCQllbHNlIHsNCisJCQkJbm9ydGZyZWUgPSAx Ow0KKwkJCQlyby0+cm9fcnQgPSAoc3RydWN0IHJ0ZW50cnkgKikmcnRsOw0K KwkJCX0NCiAJCX0NCisJCXJ0ZSA9IHJvLT5yb19ydDsNCiAJCWlmIChydGUg PT0gTlVMTCB8fA0KIAkJICAgIHJ0ZS0+cnRfaWZwID09IE5VTEwgfHwNCiAJ CSAgICAhUlRfTElOS19JU19VUChydGUtPnJ0X2lmcCkpIHsNCmRpZmYgLXUg LXIgLi4vc3JjX29yZ184LjJfMjAxMTAzMjkvc3lzL25ldGluZXQvaXBmdy9p cF9md190YWJsZS5jIC4vc3lzL25ldGluZXQvaXBmdy9pcF9md190YWJsZS5j DQotLS0gLi4vc3JjX29yZ184LjJfMjAxMTAzMjkvc3lzL25ldGluZXQvaXBm dy9pcF9md190YWJsZS5jCTIwMTAtMDMtMjMgMDk6NTg6NTkuMDAwMDAwMDAw ICswMDAwDQorKysgLi9zeXMvbmV0aW5ldC9pcGZ3L2lwX2Z3X3RhYmxlLmMJ MjAxMS0wNC0wMyAxNjowNzo1Ny4wMDAwMDAwMDAgKzAwMDANCkBAIC0xMzcs NyArMTM3LDcgQEANCiAJbWFzay5zaW5fYWRkci5zX2FkZHIgPSBodG9ubCht bGVuID8gfigoMSA8PCAoMzIgLSBtbGVuKSkgLSAxKSA6IDApOw0KIAlzYS5z aW5fYWRkci5zX2FkZHIgPSBhZGRyICYgbWFzay5zaW5fYWRkci5zX2FkZHI7 DQogCUlQRldfV0xPQ0soY2gpOw0KLQllbnQgPSAoc3RydWN0IHRhYmxlX2Vu dHJ5ICopcm5oLT5ybmhfZGVsYWRkcigmc2EsICZtYXNrLCBybmgpOw0KKwll bnQgPSAoc3RydWN0IHRhYmxlX2VudHJ5ICopcm5oLT5ybmhfZGVsYWRkcigm c2EsICZtYXNrLCBybmgsIE5VTEwpOw0KIAlpZiAoZW50ID09IE5VTEwpIHsN CiAJCUlQRldfV1VOTE9DSyhjaCk7DQogCQlyZXR1cm4gKEVTUkNIKTsNCkBA IC0xNTQsNyArMTU0LDcgQEANCiAJc3RydWN0IHRhYmxlX2VudHJ5ICplbnQ7 DQogDQogCWVudCA9IChzdHJ1Y3QgdGFibGVfZW50cnkgKikNCi0JICAgIHJu aC0+cm5oX2RlbGFkZHIocm4tPnJuX2tleSwgcm4tPnJuX21hc2ssIHJuaCk7 DQorCSAgICBybmgtPnJuaF9kZWxhZGRyKHJuLT5ybl9rZXksIHJuLT5ybl9t YXNrLCBybmgsIE5VTEwpOw0KIAlpZiAoZW50ICE9IE5VTEwpDQogCQlmcmVl KGVudCwgTV9JUEZXX1RCTCk7DQogCXJldHVybiAoMCk7DQpkaWZmIC11IC1y IC4uL3NyY19vcmdfOC4yXzIwMTEwMzI5L3N5cy9uZXRpbmV0L3Jhd19pcC5j IC4vc3lzL25ldGluZXQvcmF3X2lwLmMNCi0tLSAuLi9zcmNfb3JnXzguMl8y MDExMDMyOS9zeXMvbmV0aW5ldC9yYXdfaXAuYwkyMDExLTA0LTAyIDE0OjQ1 OjEzLjAwMDAwMDAwMCArMDAwMA0KKysrIC4vc3lzL25ldGluZXQvcmF3X2lw LmMJMjAxMS0wNC0wMyAxNjowNzo1Ny4wMDAwMDAwMDAgKzAwMDANCkBAIC03 NTUsNiArNzU1LDggQEANCiAJCWlmIChlcnIgPT0gMCkNCiAJCQlpYS0+aWFf ZmxhZ3MgfD0gSUZBX1JPVVRFOw0KIAkJZXJyID0gaWZhX2FkZF9sb29wYmFj a19yb3V0ZSgoc3RydWN0IGlmYWRkciAqKWlhLCBzYSk7DQorCQlpZiAoZXJy ID09IDApDQorCQkgICAgICAgIGlhLT5pYV9mbGFncyB8PSBJRkFfUlRTRUxG Ow0KIAkJaWZhX2ZyZWUoJmlhLT5pYV9pZmEpOw0KIAkJYnJlYWs7DQogCX0N CmRpZmYgLXUgLXIgLi4vc3JjX29yZ184LjJfMjAxMTAzMjkvc3lzL25ldGlu ZXQ2L2luNl9pZmF0dGFjaC5jIC4vc3lzL25ldGluZXQ2L2luNl9pZmF0dGFj aC5jDQotLS0gLi4vc3JjX29yZ184LjJfMjAxMTAzMjkvc3lzL25ldGluZXQ2 L2luNl9pZmF0dGFjaC5jCTIwMTAtMDUtMDYgMDY6NDQ6MTkuMDAwMDAwMDAw ICswMDAwDQorKysgLi9zeXMvbmV0aW5ldDYvaW42X2lmYXR0YWNoLmMJMjAx MS0wNC0wMyAxNjowNzo1Ny4wMDAwMDAwMDAgKzAwMDANCkBAIC00Miw2ICs0 Miw4IEBADQogI2luY2x1ZGUgPHN5cy9wcm9jLmg+DQogI2luY2x1ZGUgPHN5 cy9zeXNsb2cuaD4NCiAjaW5jbHVkZSA8c3lzL21kNS5oPg0KKyNpbmNsdWRl IDxzeXMvbG9jay5oPg0KKyNpbmNsdWRlIDxzeXMvcm1sb2NrLmg+DQogDQog I2luY2x1ZGUgPG5ldC9pZi5oPg0KICNpbmNsdWRlIDxuZXQvaWZfZGwuaD4N CmRpZmYgLXUgLXIgLi4vc3JjX29yZ184LjJfMjAxMTAzMjkvc3lzL25ldGlu ZXQ2L2luNl9ybXguYyAuL3N5cy9uZXRpbmV0Ni9pbjZfcm14LmMNCi0tLSAu Li9zcmNfb3JnXzguMl8yMDExMDMyOS9zeXMvbmV0aW5ldDYvaW42X3JteC5j CTIwMTAtMTAtMTEgMTE6MjU6MzcuMDAwMDAwMDAwICswMDAwDQorKysgLi9z eXMvbmV0aW5ldDYvaW42X3JteC5jCTIwMTEtMDQtMDMgMTY6MDc6NTcuMDAw MDAwMDAwICswMDAwDQpAQCAtODcsNiArODcsNyBAQA0KICNpbmNsdWRlIDxz eXMvcndsb2NrLmg+DQogI2luY2x1ZGUgPHN5cy9zeXNsb2cuaD4NCiAjaW5j bHVkZSA8c3lzL2NhbGxvdXQuaD4NCisjaW5jbHVkZSA8c3lzL3JtbG9jay5o Pg0KIA0KICNpbmNsdWRlIDxuZXQvaWYuaD4NCiAjaW5jbHVkZSA8bmV0L3Jv dXRlLmg+DQpkaWZmIC11IC1yIC4uL3NyY19vcmdfOC4yXzIwMTEwMzI5L3N5 cy9uZXRpbmV0Ni9pbjZfc3JjLmMgLi9zeXMvbmV0aW5ldDYvaW42X3NyYy5j DQotLS0gLi4vc3JjX29yZ184LjJfMjAxMTAzMjkvc3lzL25ldGluZXQ2L2lu Nl9zcmMuYwkyMDEwLTA1LTA2IDA2OjQ0OjE5LjAwMDAwMDAwMCArMDAwMA0K KysrIC4vc3lzL25ldGluZXQ2L2luNl9zcmMuYwkyMDExLTA0LTA1IDAxOjE0 OjI0LjAwMDAwMDAwMCArMDAwMA0KQEAgLTc5NiwxNSArNzk2LDI1MyBAQA0K IA0KIC8qDQogICogY2xvbmUgLSBtZWFuaW5nZnVsIG9ubHkgZm9yIGJzZGkg YW5kIGZyZWVic2QNCisgKiBYWFggcmVtb3ZlIGFuZCBkbyBsb29rdXAgZGly ZWN0IGluIGlwNl9vdXRwdXQNCiAgKi8NCiBpbnQNCiBpbjZfc2VsZWN0cm91 dGUoc3RydWN0IHNvY2thZGRyX2luNiAqZHN0c29jaywgc3RydWN0IGlwNl9w a3RvcHRzICpvcHRzLA0KLSAgICBzdHJ1Y3QgaXA2X21vcHRpb25zICptb3B0 cywgc3RydWN0IHJvdXRlX2luNiAqcm8sDQorICAgIHN0cnVjdCBpcDZfbW9w dGlvbnMgKm1vcHRzLCBzdHJ1Y3Qgcm91dGVfaW42ICpybywgc3RydWN0IHJ0 bG9va3VwICpydGwsDQogICAgIHN0cnVjdCBpZm5ldCAqKnJldGlmcCwgc3Ry dWN0IHJ0ZW50cnkgKipyZXRydCkNCiB7DQorICAgICAgIGludCBlcnJvciA9 IDA7DQorICAgICAgIHN0cnVjdCBpZm5ldCAqaWZwID0gTlVMTDsNCisgICAg ICAgc3RydWN0IHJ0ZW50cnkgKnJ0ID0gTlVMTDsNCisgICAgICAgc3RydWN0 IHNvY2thZGRyX2luNiAqc2luNl9uZXh0Ow0KKyAgICAgICBzdHJ1Y3QgaW42 X3BrdGluZm8gKnBpID0gTlVMTDsNCisgICAgICAgc3RydWN0IGluNl9hZGRy ICpkc3QgPSAmZHN0c29jay0+c2luNl9hZGRyOw0KKyAgICAgICBzdHJ1Y3Qg c29ja2FkZHJfaW42ICpsdV9kc3Q7DQorICAgICAgIGludCBub3JvdXRlb2sg PSAwOw0KKyNpZiAwDQorICAgICAgIGNoYXIgaXA2YnVmW0lORVQ2X0FERFJT VFJMRU5dOw0KKw0KKyAgICAgICBpZiAoZHN0c29jay0+c2luNl9hZGRyLnM2 X2FkZHIzMlswXSA9PSAwICYmDQorICAgICAgICAgICBkc3Rzb2NrLT5zaW42 X2FkZHIuczZfYWRkcjMyWzFdID09IDAgJiYNCisgICAgICAgICAgICFJTjZf SVNfQUREUl9MT09QQkFDSygmZHN0c29jay0+c2luNl9hZGRyKSkgew0KKyAg ICAgICAgICAgICAgIHByaW50ZigiaW42X3NlbGVjdHJvdXRlOiBzdHJhbmdl IGRlc3RpbmF0aW9uICVzXG4iLA0KKyAgICAgICAgICAgICAgICAgICAgICBp cDZfc3ByaW50ZihpcDZidWYsICZkc3Rzb2NrLT5zaW42X2FkZHIpKTsNCisg ICAgICAgfSBlbHNlIHsNCisgICAgICAgICAgICAgICBwcmludGYoImluNl9z ZWxlY3Ryb3V0ZTogZGVzdGluYXRpb24gPSAlcyUlJWRcbiIsDQorICAgICAg ICAgICAgICAgICAgICAgIGlwNl9zcHJpbnRmKGlwNmJ1ZiwgJmRzdHNvY2st PnNpbjZfYWRkciksDQorICAgICAgICAgICAgICAgICAgICAgIGRzdHNvY2st PnNpbjZfc2NvcGVfaWQpOyAvKiBmb3IgZGVidWcgKi8NCisgICAgICAgfQ0K KyNlbmRpZg0KKw0KKyAgICAgICAvKiBJZiB0aGUgY2FsbGVyIHNwZWNpZnkg dGhlIG91dGdvaW5nIGludGVyZmFjZSBleHBsaWNpdGx5LCB1c2UgaXQuICov DQorICAgICAgIGlmIChvcHRzICYmIChwaSA9IG9wdHMtPmlwNnBvX3BrdGlu Zm8pICE9IE5VTEwgJiYgcGktPmlwaTZfaWZpbmRleCkgew0KKyAgICAgICAg ICAgICAgIC8qIFhYWCBib3VuZGFyeSBjaGVjayBpcyBhc3N1bWVkIHRvIGJl IGFscmVhZHkgZG9uZS4gKi8NCisgICAgICAgICAgICAgICBpZnAgPSBpZm5l dF9ieWluZGV4KHBpLT5pcGk2X2lmaW5kZXgpOw0KKyAgICAgICAgICAgICAg IGlmIChpZnAgIT0gTlVMTCAmJg0KKyAgICAgICAgICAgICAgICAgICAobm9y b3V0ZW9rIHx8IHJldHJ0ID09IE5VTEwgfHwNCisgICAgICAgICAgICAgICAg ICAgSU42X0lTX0FERFJfTVVMVElDQVNUKGRzdCkpKSB7DQorICAgICAgICAg ICAgICAgICAgICAgICAvKg0KKyAgICAgICAgICAgICAgICAgICAgICAgICog d2UgZG8gbm90IGhhdmUgdG8gY2hlY2sgb3IgZ2V0IHRoZSByb3V0ZSBmb3IN CisgICAgICAgICAgICAgICAgICAgICAgICAqIG11bHRpY2FzdC4NCisgICAg ICAgICAgICAgICAgICAgICAgICAqLw0KKyAgICAgICAgICAgICAgICAgICAg ICAgZ290byBkb25lOw0KKyAgICAgICAgICAgICAgIH0gZWxzZQ0KKyAgICAg ICAgICAgICAgICAgICAgICAgZ290byBnZXRyb3V0ZTsNCisgICAgICAgfQ0K Kw0KKyAgICAgICAvKg0KKyAgICAgICAgKiBJZiB0aGUgZGVzdGluYXRpb24g YWRkcmVzcyBpcyBhIG11bHRpY2FzdCBhZGRyZXNzIGFuZCB0aGUgb3V0Z29p bmcNCisgICAgICAgICogaW50ZXJmYWNlIGZvciB0aGUgYWRkcmVzcyBpcyBz cGVjaWZpZWQgYnkgdGhlIGNhbGxlciwgdXNlIGl0Lg0KKyAgICAgICAgKi8N CisgICAgICAgaWYgKElONl9JU19BRERSX01VTFRJQ0FTVChkc3QpICYmDQor ICAgICAgICAgICBtb3B0cyAhPSBOVUxMICYmIChpZnAgPSBtb3B0cy0+aW02 b19tdWx0aWNhc3RfaWZwKSAhPSBOVUxMKSB7DQorICAgICAgICAgICAgICAg Z290byBkb25lOyAvKiB3ZSBkbyBub3QgbmVlZCBhIHJvdXRlIGZvciBtdWx0 aWNhc3QuICovDQorICAgICAgIH0NCisNCisgIGdldHJvdXRlOg0KKyAgICAg ICAvKg0KKyAgICAgICAgKiBJZiB0aGUgbmV4dCBob3AgYWRkcmVzcyBmb3Ig dGhlIHBhY2tldCBpcyBzcGVjaWZpZWQgYnkgdGhlIGNhbGxlciwNCisgICAg ICAgICogdXNlIGl0IGFzIHRoZSBnYXRld2F5Lg0KKyAgICAgICAgKi8NCisg ICAgICAgaWYgKG9wdHMgJiYgb3B0cy0+aXA2cG9fbmV4dGhvcCkgew0KKyAg ICAgICAgICAgICAgIHN0cnVjdCByb3V0ZV9pbjYgKnJvbjsNCisgICAgICAg ICAgICAgICBzdHJ1Y3QgbGxlbnRyeSAqbGE7DQorICAgICAgICAgICANCisg ICAgICAgICAgICAgICBzaW42X25leHQgPSBzYXRvc2luNihvcHRzLT5pcDZw b19uZXh0aG9wKTsNCisgICAgICAgICAgICAgICANCisgICAgICAgICAgICAg ICAvKiBhdCB0aGlzIG1vbWVudCwgd2Ugb25seSBzdXBwb3J0IEFGX0lORVQ2 IG5leHQgaG9wcyAqLw0KKyAgICAgICAgICAgICAgIGlmIChzaW42X25leHQt PnNpbjZfZmFtaWx5ICE9IEFGX0lORVQ2KSB7DQorICAgICAgICAgICAgICAg ICAgICAgICBlcnJvciA9IEVBRk5PU1VQUE9SVDsgLyogb3Igc2hvdWxkIHdl IHByb2NlZWQ/ICovDQorICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGRv bmU7DQorICAgICAgICAgICAgICAgfQ0KKw0KKyAgICAgICAgICAgICAgIC8q DQorICAgICAgICAgICAgICAgICogSWYgdGhlIG5leHQgaG9wIGlzIGFuIElQ djYgYWRkcmVzcywgdGhlbiB0aGUgbm9kZSBpZGVudGlmaWVkDQorICAgICAg ICAgICAgICAgICogYnkgdGhhdCBhZGRyZXNzIG11c3QgYmUgYSBuZWlnaGJv ciBvZiB0aGUgc2VuZGluZyBob3N0Lg0KKyAgICAgICAgICAgICAgICAqLw0K KyAgICAgICAgICAgICAgIHJvbiA9ICZvcHRzLT5pcDZwb19uZXh0cm91dGU7 DQorICAgICAgICAgICAgICAgLyoNCisgICAgICAgICAgICAgICAgKiBYWFgg d2hhdCBkbyB3ZSBkbyBoZXJlPw0KKyAgICAgICAgICAgICAgICAqIFBMWiB0 byBiZSBmaXhpbmcNCisgICAgICAgICAgICAgICAgKi8NCisNCisgICAgICAg ICAgICAgICBpZiAocm9uLT5yb19ydCA9PSBOVUxMKSB7DQorICAgICAgICAg ICAgICAgICAgICAgICBsdV9kc3QgPSAoc3RydWN0IHNvY2thZGRyX2luNiAq KSZyb24tPnJvX2RzdDsgDQorICAgICAgICAgICAgICAgICAgICAgICBydGwt PnJ0X2dhdGV3YXkgPSAoc3RydWN0IHNvY2thZGRyICopbHVfZHN0Ow0KKyAg ICAgICAgICAgICAgICAgICAgICAgaWYgKCFydGxvb2t1cF9maWIoIChzdHJ1 Y3Qgc29ja2FkZHIgKilsdV9kc3QsIDBVLA0KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHJ0bCwgUlRMX1BLU0VOVCkpIHsNCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9uLT5yb19ydCA9IE5V TEw7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0g RUhPU1RVTlJFQUNIOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBnb3RvIGRvbmU7DQorICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UN CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9uLT5yb19ydCA9 IChzdHJ1Y3QgcnRlbnRyeSAqKSBydGw7DQorICAgICAgICAgICAgICAgfQ0K Kw0KKyAgICAgICAgICAgICAgIHJ0ID0gcm9uLT5yb19ydDsNCisgICAgICAg ICAgICAgICBpZnAgPSBydC0+cnRfaWZwOw0KKyAgICAgICAgICAgICAgIElG X0FGREFUQV9MT0NLKGlmcCk7DQorICAgICAgICAgICAgICAgbGEgPSBsbGFf bG9va3VwKExMVEFCTEU2KGlmcCksIDAsIChzdHJ1Y3Qgc29ja2FkZHIgKikm c2luNl9uZXh0LT5zaW42X2FkZHIpOw0KKyAgICAgICAgICAgICAgIElGX0FG REFUQV9VTkxPQ0soaWZwKTsNCisgICAgICAgICAgICAgICBpZiAobGEgIT0g TlVMTCkgDQorICAgICAgICAgICAgICAgICAgICAgICBMTEVfUlVOTE9DSyhs YSk7DQorICAgICAgICAgICAgICAgZWxzZSB7DQorICAgICAgICAgICAgICAg ICAgICAgICBlcnJvciA9IEVIT1NUVU5SRUFDSDsNCisgICAgICAgICAgICAg ICAgICAgICAgIGdvdG8gZG9uZTsNCisgICAgICAgICAgICAgICB9DQorI2lm IDANCisgICAgICAgICAgICAgICBpZiAoKHJvbi0+cm9fcnQgJiYNCisgICAg ICAgICAgICAgICAgICAgKHJvbi0+cm9fcnQtPnJ0X2ZsYWdzICYgKFJURl9V UCB8IFJURl9MTElORk8pKSAhPQ0KKyAgICAgICAgICAgICAgICAgICAoUlRG X1VQIHwgUlRGX0xMSU5GTykpIHx8DQorICAgICAgICAgICAgICAgICAgICFJ TjZfQVJFX0FERFJfRVFVQUwoJnNhdG9zaW42KCZyb24tPnJvX2RzdCktPnNp bjZfYWRkciwNCisgICAgICAgICAgICAgICAgICAgJnNpbjZfbmV4dC0+c2lu Nl9hZGRyKSkgew0KKyAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJvbi0+ cm9fcnQpDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvbi0+ cm9fcnQgPSBOVUxMOw0KKyAgICAgICAgICAgICAgICAgICAgICAgKnNhdG9z aW42KCZyb24tPnJvX2RzdCkgPSAqc2luNl9uZXh0Ow0KKyAgICAgICAgICAg ICAgIH0NCisgICAgICAgICAgICAgICBpZiAocm9uLT5yb19ydCA9PSBOVUxM KSB7DQorICAgICAgICAgICAgICAgICAgICAgICBsdV9kc3QgPSAoc3RydWN0 IHNvY2thZGRyX2luNiAqKSZyb24tPnJvX2RzdDsNCisgICAgICAgICAgICAg ICAgICAgICAgIHJ0bC0+cnRfZ2F0ZXdheSA9IChzdHJ1Y3Qgc29ja2FkZHIg KilsdV9kc3Q7DQorICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJ0bG9v a3VwX2ZpYiggKHN0cnVjdCBzb2NrYWRkciAqKWx1X2RzdCwgMFUsDQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnRsLCBSVExf UEtTRU5UKSkgew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy b24tPnJvX3J0ID0gTlVMTDsNCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZXJyb3IgPSBFSE9TVFVOUkVBQ0g7DQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsNCisgICAgICAgICAgICAgICAg ICAgICAgIH0gZWxzZSB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHJvbi0+cm9fcnQgPSAoc3RydWN0IHJ0ZW50cnkgKikgcnRsOw0KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyb24tPnJvX3J0 LT5ydF9mbGFncyAmIFJURl9MTElORk8pKSB7DQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcm9uLT5yb19ydCA9IE5VTEw7DQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3Ig PSBFSE9TVFVOUkVBQ0g7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZ290byBkb25lOw0KKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgICAgfQ0KKyAg ICAgICAgICAgICAgIH0NCisjZW5kaWYNCisNCisgICAgICAgICAgICAgICAv Kg0KKyAgICAgICAgICAgICAgICAqIFdoZW4gY2xvbmluZyBpcyByZXF1aXJl ZCwgdHJ5IHRvIGFsbG9jYXRlIGEgcm91dGUgdG8gdGhlDQorICAgICAgICAg ICAgICAgICogZGVzdGluYXRpb24gc28gdGhhdCB0aGUgY2FsbGVyIGNhbiBz dG9yZSBwYXRoIE1UVQ0KKyAgICAgICAgICAgICAgICAqIGluZm9ybWF0aW9u Lg0KKyAgICAgICAgICAgICAgICAqLw0KKyAgICAgICAgICAgICAgIGdvdG8g ZG9uZTsNCisgICAgICAgfQ0KKw0KKyAgICAgICAvKg0KKyAgICAgICAgKiBV c2UgYSBjYWNoZWQgcm91dGUgaWYgaXQgZXhpc3RzIGFuZCBpcyB2YWxpZCwg ZWxzZSB0cnkgdG8gYWxsb2NhdGUNCisgICAgICAgICogYSBuZXcgb25lLiAg Tm90ZSB0aGF0IHdlIHNob3VsZCBjaGVjayB0aGUgYWRkcmVzcyBmYW1pbHkg b2YgdGhlDQorICAgICAgICAqIGNhY2hlZCBkZXN0aW5hdGlvbiwgaW4gY2Fz ZSBvZiBzaGFyaW5nIHRoZSBjYWNoZSB3aXRoIElQdjQuDQorICAgICAgICAq Lw0KKyAgICAgICBpZiAocm8pIHsNCisgICAgICAgICAgICAgICBpZiAocm8t PnJvX3J0ICYmDQorICAgICAgICAgICAgICAgICAgICghKHJvLT5yb19ydC0+ cnRfZmxhZ3MgJiBSVEZfVVApIHx8DQorICAgICAgICAgICAgICAgICAgICAo KHN0cnVjdCBzb2NrYWRkciAqKSgmcm8tPnJvX2RzdCkpLT5zYV9mYW1pbHkg IT0gQUZfSU5FVDYgfHwNCisgICAgICAgICAgICAgICAgICAgICFJTjZfQVJF X0FERFJfRVFVQUwoJnNhdG9zaW42KCZyby0+cm9fZHN0KS0+c2luNl9hZGRy LA0KKyAgICAgICAgICAgICAgICAgICAgZHN0KSkpDQorICAgICAgICAgICAg ICAgICAgICAgICByby0+cm9fcnQgPSAoc3RydWN0IHJ0ZW50cnkgKilOVUxM Ow0KKyAgICAgICAgICAgICAgIGlmIChyby0+cm9fcnQgPT0gKHN0cnVjdCBy dGVudHJ5ICopTlVMTCkgew0KKyAgICAgICAgICAgICAgICAgICAgICAgc3Ry dWN0IHNvY2thZGRyX2luNiAqc2E2Ow0KKw0KKyAgICAgICAgICAgICAgICAg ICAgICAgLyogTm8gcm91dGUgeWV0LCBzbyB0cnkgdG8gYWNxdWlyZSBvbmUg Ki8NCisgICAgICAgICAgICAgICAgICAgICAgIGJ6ZXJvKCZyby0+cm9fZHN0 LCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOw0KKyAgICAgICAgICAg ICAgICAgICAgICAgc2E2ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikmcm8t PnJvX2RzdDsNCisgICAgICAgICAgICAgICAgICAgICAgICpzYTYgPSAqZHN0 c29jazsNCisgICAgICAgICAgICAgICAgICAgICAgIHNhNi0+c2luNl9zY29w ZV9pZCA9IDA7DQorDQorICAgICAgICAgICAgICAgICAgICAgICBsdV9kc3Qg PSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSZyby0+cm9fZHN0OyANCisgICAg ICAgICAgICAgICAgICAgICAgIHJ0bC0+cnRfZ2F0ZXdheSA9IChzdHJ1Y3Qg c29ja2FkZHIgKilsdV9kc3Q7DQorI2lmZGVmIFJBRElYX01QQVRIDQorICAg ICAgICAgICAgICAgICAgICAgICBpZiAoIXJ0bG9va3VwX21wYXRoX2ZpYigo c3RydWN0IHNvY2thZGRyICopbHVfZHN0LA0KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG50b2hsKHNhNi0+c2luNl9hZGRyLnM2 X2FkZHIzMlszXSksDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgMFUsIHJ0bCwgUlRMX1BLU0VOVCkpDQorI2Vsc2UNCisgICAg ICAgICAgICAgICAgICAgICAgIGlmICghcnRsb29rdXBfZmliKChzdHJ1Y3Qg c29ja2FkZHIgKilsdV9kc3QsIDBVLA0KKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHJ0bCwgUlRMX1BLU0VOVCkpDQorI2VuZGlm DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvLT5yb19ydCA9 IE5VTEw7DQorICAgICAgICAgICAgICAgICAgICAgICBlbHNlDQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHJvLT5yb19ydCA9IChzdHJ1Y3Qg cnRlbnRyeSAqKSBydGw7DQorICAgICAgICAgICAgICAgfQ0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICANCisgICAgICAgICAgICAgICAvKg0K KyAgICAgICAgICAgICAgICAqIGRvIG5vdCBjYXJlIGFib3V0IHRoZSByZXN1 bHQgaWYgd2UgaGF2ZSB0aGUgbmV4dGhvcA0KKyAgICAgICAgICAgICAgICAq IGV4cGxpY2l0bHkgc3BlY2lmaWVkLg0KKyAgICAgICAgICAgICAgICAqLw0K KyAgICAgICAgICAgICAgIGlmIChvcHRzICYmIG9wdHMtPmlwNnBvX25leHRo b3ApDQorICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGRvbmU7DQorDQor ICAgICAgICAgICAgICAgaWYgKHJvLT5yb19ydCkgew0KKyAgICAgICAgICAg ICAgICAgICAgICAgaWZwID0gcm8tPnJvX3J0LT5ydF9pZnA7DQorDQorICAg ICAgICAgICAgICAgICAgICAgICBpZiAoaWZwID09IE5VTEwpIHsgLyogY2Fu IHRoaXMgcmVhbGx5IGhhcHBlbj8gKi8NCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcm8tPnJvX3J0ID0gTlVMTDsNCisgICAgICAgICAgICAg ICAgICAgICAgIH0NCisgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAg ICAgaWYgKHJvLT5yb19ydCA9PSBOVUxMKQ0KKyAgICAgICAgICAgICAgICAg ICAgICAgZXJyb3IgPSBFSE9TVFVOUkVBQ0g7DQorICAgICAgICAgICAgICAg cnQgPSByby0+cm9fcnQ7DQorDQorICAgICAgICAgICAgICAgLyoNCisgICAg ICAgICAgICAgICAgKiBDaGVjayBpZiB0aGUgb3V0Z29pbmcgaW50ZXJmYWNl IGNvbmZsaWN0cyB3aXRoDQorICAgICAgICAgICAgICAgICogdGhlIGludGVy ZmFjZSBzcGVjaWZpZWQgYnkgaXBpNl9pZmluZGV4IChpZiBzcGVjaWZpZWQp Lg0KKyAgICAgICAgICAgICAgICAqIE5vdGUgdGhhdCBsb29wYmFjayBpbnRl cmZhY2UgaXMgYWx3YXlzIG9rYXkuDQorICAgICAgICAgICAgICAgICogKHRo aXMgbWF5IGhhcHBlbiB3aGVuIHdlIGFyZSBzZW5kaW5nIGEgcGFja2V0IHRv IG9uZSBvZg0KKyAgICAgICAgICAgICAgICAqICBvdXIgb3duIGFkZHJlc3Nl cy4pDQorICAgICAgICAgICAgICAgICovDQorICAgICAgICAgICAgICAgaWYg KGlmcCAmJiBvcHRzICYmIG9wdHMtPmlwNnBvX3BrdGluZm8gJiYNCisgICAg ICAgICAgICAgICAgICAgb3B0cy0+aXA2cG9fcGt0aW5mby0+aXBpNl9pZmlu ZGV4KSB7DQorICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShpZnAtPmlm X2ZsYWdzICYgSUZGX0xPT1BCQUNLKSAmJg0KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgIGlmcC0+aWZfaW5kZXggIT0NCisgICAgICAgICAgICAgICAg ICAgICAgICAgICBvcHRzLT5pcDZwb19wa3RpbmZvLT5pcGk2X2lmaW5kZXgp IHsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBF SE9TVFVOUkVBQ0g7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGdvdG8gZG9uZTsNCisgICAgICAgICAgICAgICAgICAgICAgIH0NCisgICAg ICAgICAgICAgICB9DQorICAgICAgIH0NCisNCisgIGRvbmU6DQorICAgICAg IGlmIChpZnAgPT0gTlVMTCAmJiBydCA9PSBOVUxMKSB7DQorICAgICAgICAg ICAgICAgLyoNCisgICAgICAgICAgICAgICAgKiBUaGlzIGNhbiBoYXBwZW4g aWYgdGhlIGNhbGxlciBkaWQgbm90IHBhc3MgYSBjYWNoZWQgcm91dGUNCisg ICAgICAgICAgICAgICAgKiBub3IgYW55IG90aGVyIGhpbnRzLiAgV2UgdHJl YXQgdGhpcyBjYXNlIGFuIGVycm9yLg0KKyAgICAgICAgICAgICAgICAqLw0K KyAgICAgICAgICAgICAgIGVycm9yID0gRUhPU1RVTlJFQUNIOw0KKyAgICAg ICB9DQorICAgICAgIGlmIChlcnJvciA9PSBFSE9TVFVOUkVBQ0gpDQorICAg ICAgICAgICAgICAgVl9pcDZzdGF0LmlwNnNfbm9yb3V0ZSsrOw0KKw0KKyAg ICAgICBpZiAocmV0aWZwICE9IE5VTEwpIHsNCisgICAgICAgICAgICAgICAq cmV0aWZwID0gaWZwOw0KKw0KKyAgICAgICAgICAgICAgIC8qDQorICAgICAg ICAgICAgICAgICogQWRqdXN0IHRoZSAib3V0Z29pbmciIGludGVyZmFjZS4g IElmIHdlJ3JlIGdvaW5nIHRvIGxvb3AgDQorICAgICAgICAgICAgICAgICog dGhlIHBhY2tldCBiYWNrIHRvIG91cnNlbHZlcywgdGhlIGlmcCB3b3VsZCBi ZSB0aGUgbG9vcGJhY2sgDQorICAgICAgICAgICAgICAgICogaW50ZXJmYWNl LiBIb3dldmVyLCB3ZSdkIHJhdGhlciBrbm93IHRoZSBpbnRlcmZhY2UgYXNz b2NpYXRlZCANCisgICAgICAgICAgICAgICAgKiB0byB0aGUgZGVzdGluYXRp b24gYWRkcmVzcyAod2hpY2ggc2hvdWxkIHByb2JhYmx5IGJlIG9uZSBvZiAN CisgICAgICAgICAgICAgICAgKiBvdXIgb3duIGFkZHJlc3Nlcy4pDQorICAg ICAgICAgICAgICAgICovDQorICAgICAgICAgICAgICAgaWYgKHJ0KSB7DQor ICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHJ0LT5ydF9pZnAtPmlmX2Zs YWdzICYgSUZGX0xPT1BCQUNLKSAmJg0KKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIChydC0+cnRfZ2F0ZXdheS0+c2FfZmFtaWx5ID09IEFGX0xJTksp KQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcmV0aWZwID0g DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZu ZXRfYnlpbmRleCgoKHN0cnVjdCBzb2NrYWRkcl9kbCAqKQ0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHJ0LT5ydF9nYXRld2F5KS0+c2RsX2luZGV4KTsNCisgICAgICAgICAgICAg ICB9DQorICAgICAgIH0NCisgICAgICAgaWYgKHJldHJ0ICE9IE5VTEwpDQor ICAgICAgICAgICAgICAgKnJldHJ0ID0gcnQ7ICAgIC8qIHJ0IG1heSBiZSBO VUxMICovDQogDQotCXJldHVybiAoc2VsZWN0cm91dGUoZHN0c29jaywgb3B0 cywgbW9wdHMsIHJvLCByZXRpZnAsDQotCSAgICByZXRydCwgMCkpOw0KKyAg ICAgICByZXR1cm4gKGVycm9yKTsNCiB9DQogDQogLyoNCmRpZmYgLXUgLXIg Li4vc3JjX29yZ184LjJfMjAxMTAzMjkvc3lzL25ldGluZXQ2L2lwNl9mb3J3 YXJkLmMgLi9zeXMvbmV0aW5ldDYvaXA2X2ZvcndhcmQuYw0KLS0tIC4uL3Ny Y19vcmdfOC4yXzIwMTEwMzI5L3N5cy9uZXRpbmV0Ni9pcDZfZm9yd2FyZC5j CTIwMTAtMDItMDcgMDk6MDA6MjIuMDAwMDAwMDAwICswMDAwDQorKysgLi9z eXMvbmV0aW5ldDYvaXA2X2ZvcndhcmQuYwkyMDExLTA0LTA1IDAxOjE0OjU4 LjAwMDAwMDAwMCArMDAwMA0KQEAgLTk5LDYgKzk5LDcgQEANCiAJc3RydWN0 IGlmbmV0ICpvcmlnaWZwOwkvKiBtYXliZSB1bm5lY2Vzc2FyeSAqLw0KIAl1 X2ludDMyX3QgaW56b25lLCBvdXR6b25lOw0KIAlzdHJ1Y3QgaW42X2FkZHIg c3JjX2luNiwgZHN0X2luNjsNCisJc3RydWN0IHJ0bG9va3VwIHJ0bDsNCiAj aWZkZWYgSVBTRUMNCiAJc3RydWN0IHNlY3BvbGljeSAqc3AgPSBOVUxMOw0K IAlpbnQgaXBzZWNydCA9IDA7DQpAQCAtMzUyLDE4ICszNTMsMjcgQEANCiAJ ZHN0LT5zaW42X2ZhbWlseSA9IEFGX0lORVQ2Ow0KIAlkc3QtPnNpbjZfYWRk ciA9IGlwNi0+aXA2X2RzdDsNCiANCi0JcmluNi5yb19ydCA9IHJ0YWxsb2Mx KChzdHJ1Y3Qgc29ja2FkZHIgKilkc3QsIDAsIDApOw0KLQlpZiAocmluNi5y b19ydCAhPSBOVUxMKQ0KLQkJUlRfVU5MT0NLKHJpbjYucm9fcnQpOw0KLQll bHNlIHsNCisJcnRsLnJ0X2dhdGV3YXkgPSAoc3RydWN0IHNvY2thZGRyICop ZHN0Ow0KKyNpZmRlZiBSQURJWF9NUEFUSA0KKwlzcmNfaW42ID0gaXA2LT5p cDZfc3JjOw0KKwlkc3RfaW42ID0gaXA2LT5pcDZfZHN0Ow0KKwlpZiAoIXJ0 bG9va3VwX21wYXRoX2ZpYigoc3RydWN0IHNvY2thZGRyICopZHN0LA0KKwkJ CW50b2hsKHNyY19pbjYtPnNpbjZfYWRkci5zNl9hZGRyMzJbM10gXiBkc3Rf aW42LT5zaW42X2FkZHIuczZfYWRkcjMyWzNdKSwNCisJCQkwVSwgJnJ0bCwg UlRMX1BLU0VOVCkpIHsNCisjZWxzZQ0KKwlpZiAoIXJ0bG9va3VwX2ZpYigg KHN0cnVjdCBzb2NrYWRkciAqKWRzdCwgMFUsICZydGwsDQorCQkJUlRMX1BL U0VOVCkpIHsNCisjZW5kaWYNCisJCXJpbjYucm9fcnQgPSBOVUxMOw0KIAkJ Vl9pcDZzdGF0LmlwNnNfbm9yb3V0ZSsrOw0KIAkJaW42X2lmc3RhdF9pbmMo bS0+bV9wa3RoZHIucmN2aWYsIGlmczZfaW5fbm9yb3V0ZSk7DQogCQlpZiAo bWNvcHkpIHsNCiAJCQlpY21wNl9lcnJvcihtY29weSwgSUNNUDZfRFNUX1VO UkVBQ0gsDQotCQkJSUNNUDZfRFNUX1VOUkVBQ0hfTk9ST1VURSwgMCk7DQor CQkJCUlDTVA2X0RTVF9VTlJFQUNIX05PUk9VVEUsIDApOw0KIAkJfQ0KIAkJ Z290byBiYWQ7DQotCX0NCisJfSBlbHNlDQorCQlyaW42LnJvX3J0ID0gKHN0 cnVjdCBydGVudHJ5ICopICZydGw7DQogCXJ0ID0gcmluNi5yb19ydDsNCiAj aWZkZWYgSVBTRUMNCiBza2lwX3JvdXRpbmc6DQpAQCAtNTgwLDEyICs1OTAs MTIgQEANCiANCiBzZW5kZXJyOg0KIAlpZiAobWNvcHkgPT0gTlVMTCkNCi0J CWdvdG8gb3V0Ow0KKwkJcmV0dXJuOw0KIAlzd2l0Y2ggKGVycm9yKSB7DQog CWNhc2UgMDoNCiAJCWlmICh0eXBlID09IE5EX1JFRElSRUNUKSB7DQogCQkJ aWNtcDZfcmVkaXJlY3Rfb3V0cHV0KG1jb3B5LCBydCk7DQotCQkJZ290byBv dXQ7DQorCQkJcmV0dXJuOw0KIAkJfQ0KIAkJZ290byBmcmVlY29weTsNCiAN CmRpZmYgLXUgLXIgLi4vc3JjX29yZ184LjJfMjAxMTAzMjkvc3lzL25ldGlu ZXQ2L2lwNl9vdXRwdXQuYyAuL3N5cy9uZXRpbmV0Ni9pcDZfb3V0cHV0LmMN Ci0tLSAuLi9zcmNfb3JnXzguMl8yMDExMDMyOS9zeXMvbmV0aW5ldDYvaXA2 X291dHB1dC5jCTIwMTAtMTAtMjUgMTM6MTY6MTEuMDAwMDAwMDAwICswMDAw DQorKysgLi9zeXMvbmV0aW5ldDYvaXA2X291dHB1dC5jCTIwMTEtMDQtMDMg MTY6MDc6NTcuMDAwMDAwMDAwICswMDAwDQpAQCAtMjAwLDcgKzIwMCw3IEBA DQogCWludCBobGVuLCB0bGVuLCBsZW4sIG9mZjsNCiAJc3RydWN0IHJvdXRl X2luNiBpcDZyb3V0ZTsNCiAJc3RydWN0IHJ0ZW50cnkgKnJ0ID0gTlVMTDsN Ci0Jc3RydWN0IHNvY2thZGRyX2luNiAqZHN0LCBzcmNfc2EsIGRzdF9zYTsN CisJc3RydWN0IHNvY2thZGRyX2luNiAqZHN0LCBzcmNfc2EsIGRzdF9zYSwg ZHN0X2xvb2t1cDsNCiAJc3RydWN0IGluNl9hZGRyIG9kc3Q7DQogCWludCBl cnJvciA9IDA7DQogCXN0cnVjdCBpbjZfaWZhZGRyICppYSA9IE5VTEw7DQpA QCAtMjEzLDYgKzIxMyw3IEBADQogCXN0cnVjdCByb3V0ZV9pbjYgKnJvX3Bt dHUgPSBOVUxMOw0KIAlpbnQgaGRyc3BsaXQgPSAwOw0KIAlpbnQgbmVlZGlw c2VjID0gMDsNCisJc3RydWN0IHJ0bG9va3VwIHJ0bDsNCiAjaWZkZWYgU0NU UA0KIAlpbnQgc3dfY3N1bTsNCiAjZW5kaWYNCkBAIC01NzIsMTEgKzU3Mywx MSBAQA0KIAkvKiBhZGp1c3QgcG9pbnRlciAqLw0KIAlpcDYgPSBtdG9kKG0s IHN0cnVjdCBpcDZfaGRyICopOw0KIA0KLQliemVybygmZHN0X3NhLCBzaXpl b2YoZHN0X3NhKSk7DQotCWRzdF9zYS5zaW42X2ZhbWlseSA9IEFGX0lORVQ2 Ow0KLQlkc3Rfc2Euc2luNl9sZW4gPSBzaXplb2YoZHN0X3NhKTsNCi0JZHN0 X3NhLnNpbjZfYWRkciA9IGlwNi0+aXA2X2RzdDsNCi0JaWYgKChlcnJvciA9 IGluNl9zZWxlY3Ryb3V0ZSgmZHN0X3NhLCBvcHQsIGltNm8sIHJvLA0KKwli emVybygmZHN0X2xvb2t1cCwgc2l6ZW9mKGRzdF9sb29rdXApKTsNCisJZHN0 X2xvb2t1cC5zaW42X2ZhbWlseSA9IEFGX0lORVQ2Ow0KKwlkc3RfbG9va3Vw LnNpbjZfbGVuID0gc2l6ZW9mKGRzdF9sb29rdXApOw0KKwlkc3RfbG9va3Vw LnNpbjZfYWRkciA9IGlwNi0+aXA2X2RzdDsNCisJaWYgKChlcnJvciA9IGlu Nl9zZWxlY3Ryb3V0ZSgmZHN0X2xvb2t1cCwgb3B0LCBpbTZvLCBybywgJnJ0 bCwNCiAJICAgICZpZnAsICZydCkpICE9IDApIHsNCiAJCXN3aXRjaCAoZXJy b3IpIHsNCiAJCWNhc2UgRUhPU1RVTlJFQUNIOg0KQEAgLTU5NSw3ICs1OTYs NyBAQA0KIAkJICogSWYgaW42X3NlbGVjdHJvdXRlKCkgZG9lcyBub3QgcmV0 dXJuIGEgcm91dGUgZW50cnksDQogCQkgKiBkc3QgbWF5IG5vdCBoYXZlIGJl ZW4gdXBkYXRlZC4NCiAJCSAqLw0KLQkJKmRzdCA9IGRzdF9zYTsJLyogWFhY ICovDQorCQkqZHN0ID0gZHN0X2xvb2t1cDsgICAgICAvKiBYWFggKi8NCiAJ fQ0KIA0KIAkvKg0KQEAgLTEwNzEsMTEgKzEwNzIsNiBAQA0KIAkJVl9pcDZz dGF0LmlwNnNfZnJhZ21lbnRlZCsrOw0KIA0KIGRvbmU6DQotCWlmIChybyA9 PSAmaXA2cm91dGUgJiYgcm8tPnJvX3J0KSB7IC8qIGJyYWNlIG5lY2Vzc2Fy eSBmb3IgUlRGUkVFICovDQotCQlSVEZSRUUocm8tPnJvX3J0KTsNCi0JfSBl bHNlIGlmIChyb19wbXR1ID09ICZpcDZyb3V0ZSAmJiByb19wbXR1LT5yb19y dCkgew0KLQkJUlRGUkVFKHJvX3BtdHUtPnJvX3J0KTsNCi0JfQ0KICNpZmRl ZiBJUFNFQw0KIAlpZiAoc3AgIT0gTlVMTCkNCiAJCUtFWV9GUkVFU1AoJnNw KTsNCmRpZmYgLXUgLXIgLi4vc3JjX29yZ184LjJfMjAxMTAzMjkvc3lzL25l dGluZXQ2L2lwNl92YXIuaCAuL3N5cy9uZXRpbmV0Ni9pcDZfdmFyLmgNCi0t LSAuLi9zcmNfb3JnXzguMl8yMDExMDMyOS9zeXMvbmV0aW5ldDYvaXA2X3Zh ci5oCTIwMTAtMDktMDkgMDY6NDM6MTguMDAwMDAwMDAwICswMDAwDQorKysg Li9zeXMvbmV0aW5ldDYvaXA2X3Zhci5oCTIwMTEtMDQtMDMgMTY6MDc6NTcu MDAwMDAwMDAwICswMDAwDQpAQCAtNDMxLDEyICs0MzEsMTMgQEANCiBpbnQJ ZGVzdDZfaW5wdXQgX19QKChzdHJ1Y3QgbWJ1ZiAqKiwgaW50ICosIGludCkp Ow0KIGludAlub25lX2lucHV0IF9fUCgoc3RydWN0IG1idWYgKiosIGludCAq LCBpbnQpKTsNCiANCisjaW5jbHVkZSA8bmV0L3JvdXRlLmg+DQogaW50CWlu Nl9zZWxlY3RzcmMoc3RydWN0IHNvY2thZGRyX2luNiAqLCBzdHJ1Y3QgaXA2 X3BrdG9wdHMgKiwNCiAJc3RydWN0IGlucGNiICppbnAsIHN0cnVjdCByb3V0 ZV9pbjYgKiwgc3RydWN0IHVjcmVkICpjcmVkLA0KIAlzdHJ1Y3QgaWZuZXQg KiosIHN0cnVjdCBpbjZfYWRkciAqKTsNCiBpbnQgaW42X3NlbGVjdHJvdXRl IF9fUCgoc3RydWN0IHNvY2thZGRyX2luNiAqLCBzdHJ1Y3QgaXA2X3BrdG9w dHMgKiwNCi0Jc3RydWN0IGlwNl9tb3B0aW9ucyAqLCBzdHJ1Y3Qgcm91dGVf aW42ICosIHN0cnVjdCBpZm5ldCAqKiwNCi0Jc3RydWN0IHJ0ZW50cnkgKiop KTsNCisJc3RydWN0IGlwNl9tb3B0aW9ucyAqLCBzdHJ1Y3Qgcm91dGVfaW42 ICosIHN0cnVjdCBydGxvb2t1cCAqLA0KKwlzdHJ1Y3QgaWZuZXQgKiosIHN0 cnVjdCBydGVudHJ5ICoqKSk7DQogdV9pbnQzMl90IGlwNl9yYW5kb21pZCBf X1AoKHZvaWQpKTsNCiB1X2ludDMyX3QgaXA2X3JhbmRvbWZsb3dsYWJlbCBf X1AoKHZvaWQpKTsNCiAjZW5kaWYgLyogX0tFUk5FTCAqLw0KZGlmZiAtdSAt ciAuLi9zcmNfb3JnXzguMl8yMDExMDMyOS9zeXMvbmV0aW5ldDYvbmQ2X3J0 ci5jIC4vc3lzL25ldGluZXQ2L25kNl9ydHIuYw0KLS0tIC4uL3NyY19vcmdf OC4yXzIwMTEwMzI5L3N5cy9uZXRpbmV0Ni9uZDZfcnRyLmMJMjAxMC0wNS0w NiAwNjo0NDoxOS4wMDAwMDAwMDAgKzAwMDANCisrKyAuL3N5cy9uZXRpbmV0 Ni9uZDZfcnRyLmMJMjAxMS0wNC0wMyAxNjowNzo1Ny4wMDAwMDAwMDAgKzAw MDANCkBAIC00OCw2ICs0OCw4IEBADQogI2luY2x1ZGUgPHN5cy9yd2xvY2su aD4NCiAjaW5jbHVkZSA8c3lzL3N5c2xvZy5oPg0KICNpbmNsdWRlIDxzeXMv cXVldWUuaD4NCisjaW5jbHVkZSA8c3lzL2xvY2suaD4NCisjaW5jbHVkZSA8 c3lzL3JtbG9jay5oPg0KIA0KICNpbmNsdWRlIDxuZXQvaWYuaD4NCiAjaW5j bHVkZSA8bmV0L2lmX3R5cGVzLmg+DQo= --168430090-939355638-1301965804=:2152--