From owner-freebsd-net@FreeBSD.ORG Sun Oct 28 17:13:16 2007 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 55E6F16A46D for ; Sun, 28 Oct 2007 17:13:16 +0000 (UTC) (envelope-from ermal.luci@gmail.com) Received: from wx-out-0506.google.com (wx-out-0506.google.com [66.249.82.238]) by mx1.freebsd.org (Postfix) with ESMTP id BE0AE13C4B6 for ; Sun, 28 Oct 2007 17:13:15 +0000 (UTC) (envelope-from ermal.luci@gmail.com) Received: by wx-out-0506.google.com with SMTP id i29so1241199wxd for ; Sun, 28 Oct 2007 10:13:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=beta; h=domainkey-signature:received:received:message-id:date:from:to:subject:in-reply-to:mime-version:content-type:references; bh=nUlki/CViR6OANFYfhJUZpv+lzd6qHWBNgYYZb08oYk=; b=c0LXpQxILUuq43cTpkav9HhRJnURLhEpgxsZVK0HpVh7c+XmJdsaU2ckV6AFZHuRmDqJ7CdMP0RhPCA+rNXV9mHN6znQT1hN0svGK2xKisu3HDf5vToUyMYnMudXM/VcoBq687vJAlscoa5mCE62sylzA6n2aiDCykKSGq5KRoE= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=beta; h=received:message-id:date:from:to:subject:in-reply-to:mime-version:content-type:references; b=gl5YPB5yuuQ8PmcfJwoQPykGxOr83T4pLkCU8zucmZriSrlVuPdHOsx3iWSiyiXOJ4GI5OTpA61tq/nBA338qS7xieTyhgdyjmwSVbJ7PIhrXsDdsPeSx++LcklBifvE1Ma9gdkb85PCRPy3cqJxiloC3t0P62iZ0kprR6oGfqI= Received: by 10.70.89.11 with SMTP id m11mr8956268wxb.1193591593948; Sun, 28 Oct 2007 10:13:13 -0700 (PDT) Received: by 10.70.73.1 with HTTP; Sun, 28 Oct 2007 10:13:13 -0700 (PDT) Message-ID: <9a542da30710281013q642b5aa8k33c7836ee064242e@mail.gmail.com> Date: Sun, 28 Oct 2007 18:13:13 +0100 From: "=?ISO-8859-1?Q?Ermal_Lu=E7i?=" To: freebsd-pf@freebsd.org, freebsd-net@freebsd.org In-Reply-To: <20071028095802.A61999@xorpc.icir.org> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_14170_30775547.1193591593935" References: <9a542da30710161409o4732a77bybdf4ba35d7491bb@mail.gmail.com> <200710171043.08126.max@love2party.net> <9a542da30710211232v4d3c930fg8ea778a12f3f16cb@mail.gmail.com> <9a542da30710280617t11e668e2o4d122998192f71c@mail.gmail.com> <20071028095802.A61999@xorpc.icir.org> Cc: Subject: Fwd: [PATCH] PF+dummynet 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: Sun, 28 Oct 2007 17:13:16 -0000 ------=_Part_14170_30775547.1193591593935 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline I am sending this again since it seems the list ripps off files other than text files. > > > It gives full dummynet support in pf.conf syntax and removes dummynet > > depndency to ipfw. > > > > You can configure a pipe/queue using the same ipfw syntax the only > > difference is that i call those 'dnpipe'/'dnqueue' respectivley. > > GRED/RED isn't currently finished but that is a pfctl addition so not > > difficult. > > > > For dummynet i preserve ipfw style statistics so tools of ipfw can be > > used here to. > > > > Since this is PF i preserved ALTQ priotitizing of ACK, meaning on ALTQ you do > > pass in quick proto tcp from any to any flags S/SA queue(pri, que) > > > > You can do the same with dummynet queues only, since for pipes it > > doesn't make much sense since they simulate a link. So yuo can do > > > > dnpipe 10 bandwidth 100Kbit > > dnqueue 10 dnpipe 10 queue 100 > > dnqueue 20 dnpipe 10 queue 20 > > > > pass in quick proto tcp from any to any flags S/SA dnqueue(10, 20) > > > > > > Please test and give feedback. > > > _______________________________________________ > > freebsd-net@freebsd.org mailing list > > http://lists.freebsd.org/mailman/listinfo/freebsd-net > > To unsubscribe, send any mail to "freebsd-net-unsubscribe@freebsd.org" > ------=_Part_14170_30775547.1193591593935 Content-Type: text/x-patch; name=test_dummynet3.diff Content-Transfer-Encoding: base64 X-Attachment-Id: f_f8bvlik4 Content-Disposition: attachment; filename=test_dummynet3.diff SW5kZXg6IGNvbnRyaWIvcGYvcGZjdGwvcGFyc2UueQo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvaG9t ZS9lcmkvcmVwby9jb250cmliL3BmL3BmY3RsL3BhcnNlLnksdgpyZXRyaWV2aW5nIHJldmlzaW9u IDEuMS4xLjEKZGlmZiAtdSAtcjEuMS4xLjEgcGFyc2UueQotLS0gY29udHJpYi9wZi9wZmN0bC9w YXJzZS55CTIxIE9jdCAyMDA3IDEzOjUzOjE1IC0wMDAwCTEuMS4xLjEKKysrIGNvbnRyaWIvcGYv cGZjdGwvcGFyc2UueQkyMSBPY3QgMjAwNyAxOTowMzo0OSAtMDAwMApAQCAtNDUsNiArNDUsOSBA QAogI2luY2x1ZGUgPGFsdHEvYWx0cV9wcmlxLmg+CiAjaW5jbHVkZSA8YWx0cS9hbHRxX2hmc2Mu aD4KIAorI2luY2x1ZGUgPG5ldGluZXQvaXBfZncuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2lwX2R1 bW15bmV0Lmg+CisKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2lu Y2x1ZGUgPG5ldGRiLmg+CkBAIC0yMDYsNiArMjA5LDkgQEAKIAljaGFyCQkJKnRhZzsKIAljaGFy CQkJKm1hdGNoX3RhZzsKIAl1X2ludDhfdAkJIG1hdGNoX3RhZ19ub3Q7CisJdV9pbnQzMl90CQkg ZG5waXBlOworCXVfaW50MzJfdAkJIHBkbnBpcGU7CisJdV9pbnQzMl90CQkgZG50eXBlOwogCWlu dAkJCSBydGFibGVpZDsKIH0gZmlsdGVyX29wdHM7CiAKQEAgLTI2MSw2ICsyNjcsOCBAQAogCiAK IHN0cnVjdCBub2RlX2hmc2Nfb3B0cwloZnNjX29wdHM7CitzdHJ1Y3QgZG5fcGlwZQkJZG5waXBl X29wdHM7CitzdHJ1Y3QgZG5fZmxvd19zZXQJZG5xdWV1ZV9vcHRzOwogCiBpbnQJeXllcnJvcihj b25zdCBjaGFyICosIC4uLik7CiBpbnQJZGlzYWxsb3dfdGFibGUoc3RydWN0IG5vZGVfaG9zdCAq LCBjb25zdCBjaGFyICopOwpAQCAtMzk1LDYgKzQwMyw4IEBACiAJCXN0cnVjdCBmaWx0ZXJfb3B0 cwkgZmlsdGVyX29wdHM7CiAJCXN0cnVjdCBhbnRpc3Bvb2Zfb3B0cwkgYW50aXNwb29mX29wdHM7 CiAJCXN0cnVjdCBxdWV1ZV9vcHRzCSBxdWV1ZV9vcHRzOworCQlzdHJ1Y3QgZG5fcGlwZQkJIGRu cGlwZV9vcHRzOworCQlzdHJ1Y3QgZG5fZmxvd19zZXQJIGRucXVldWVfb3B0czsKIAkJc3RydWN0 IHNjcnViX29wdHMJIHNjcnViX29wdHM7CiAJCXN0cnVjdCB0YWJsZV9vcHRzCSB0YWJsZV9vcHRz OwogCQlzdHJ1Y3QgcG9vbF9vcHRzCSBwb29sX29wdHM7CkBAIC00MjEsNiArNDMxLDggQEAKICV0 b2tlbglCSVRNQVNLIFJBTkRPTSBTT1VSQ0VIQVNIIFJPVU5EUk9CSU4gU1RBVElDUE9SVCBQUk9C QUJJTElUWQogJXRva2VuCUFMVFEgQ0JRIFBSSVEgSEZTQyBCQU5EV0lEVEggVEJSU0laRSBMSU5L U0hBUkUgUkVBTFRJTUUgVVBQRVJMSU1JVAogJXRva2VuCVFVRVVFIFBSSU9SSVRZIFFMSU1JVCBS VEFCTEUKKyV0b2tlbglETlBJUEUgRE5RVUVVRSBHUkVEIFJFRCBXRUlHSFQgTUFTSyBERUxBWSBC VUNLRVRTIFBMUgorJXRva2VuCVNSQ0lQIERTVElQIFNSQ1BPUlQgRFNUUE9SVCBTUkNJUDYgRFNU SVA2IEZMT1dJRCBOT0VSUk9SCiAldG9rZW4JTE9BRCBSVUxFU0VUX09QVElNSVpBVElPTgogJXRv a2VuCVNUSUNLWUFERFJFU1MgTUFYU1JDU1RBVEVTIE1BWFNSQ05PREVTIFNPVVJDRVRSQUNLIEdM T0JBTCBSVUxFCiAldG9rZW4JTUFYU1JDQ09OTiBNQVhTUkNDT05OUkFURSBPVkVSTE9BRCBGTFVT SApAQCAtNDUxLDcgKzQ2Myw3IEBACiAldHlwZQk8di5naWQ+CQkJZ2lkcyBnaWRfbGlzdCBnaWRf aXRlbQogJXR5cGUJPHYucm91dGU+CQlyb3V0ZQogJXR5cGUJPHYucmVkaXJlY3Rpb24+CQlyZWRp cmVjdGlvbiByZWRpcnBvb2wKLSV0eXBlCTx2LnN0cmluZz4JCWxhYmVsIHN0cmluZyB0YWcgYW5j aG9ybmFtZQorJXR5cGUJPHYuc3RyaW5nPgkJbGFiZWwgc3RyaW5nIHRhZyBhbmNob3JuYW1lIAog JXR5cGUJPHYua2VlcF9zdGF0ZT4JCWtlZXAKICV0eXBlCTx2LnN0YXRlX29wdD4JCXN0YXRlX29w dF9zcGVjIHN0YXRlX29wdF9saXN0IHN0YXRlX29wdF9pdGVtCiAldHlwZQk8di5sb2dxdWljaz4J CWxvZ3F1aWNrIHF1aWNrIGxvZyBsb2dvcHRzIGxvZ29wdApAQCAtNDYyLDYgKzQ3NCw4IEBACiAl dHlwZQk8di5udW1iZXI+CQljYnFmbGFnc19saXN0IGNicWZsYWdzX2l0ZW0KICV0eXBlCTx2Lm51 bWJlcj4JCXByaXFmbGFnc19saXN0IHByaXFmbGFnc19pdGVtCiAldHlwZQk8di5oZnNjX29wdHM+ CQloZnNjb3B0c19saXN0IGhmc2NvcHRzX2l0ZW0gaGZzY19vcHRzCisldHlwZQk8di5kbnBpcGVf b3B0cz4JCWRucGlwZV9vcHRzCisldHlwZQk8di5kbnF1ZXVlX29wdHM+CWRucXVldWVfb3B0cyBt YXNrX3NwZWNpZmllcgogJXR5cGUJPHYucXVldWVfYndzcGVjPgliYW5kd2lkdGgKICV0eXBlCTx2 LmZpbHRlcl9vcHRzPgkJZmlsdGVyX29wdHMgZmlsdGVyX29wdCBmaWx0ZXJfb3B0c19sCiAldHlw ZQk8di5hbnRpc3Bvb2Zfb3B0cz4JYW50aXNwb29mX29wdHMgYW50aXNwb29mX29wdCBhbnRpc3Bv b2Zfb3B0c19sCkBAIC00ODMsNiArNDk3LDggQEAKIAkJfCBydWxlc2V0IGFuY2hvcnJ1bGUgJ1xu JwogCQl8IHJ1bGVzZXQgbG9hZHJ1bGUgJ1xuJwogCQl8IHJ1bGVzZXQgYWx0cWlmICdcbicKKwkJ fCBydWxlc2V0IGR1bW15bmV0aWYgJ1xuJworCQl8IHJ1bGVzZXQgZG5xdWV1ZXNwZWMgJ1xuJwog CQl8IHJ1bGVzZXQgcXVldWVzcGVjICdcbicKIAkJfCBydWxlc2V0IHZhcnNldCAnXG4nCiAJCXwg cnVsZXNldCBhbnRpc3Bvb2YgJ1xuJwpAQCAtMTY2Nyw2ICsxNjgzLDIyMiBAQAogCQl9CiAJCTsK IAorZHVtbXluZXRpZiAgICAgIDogRE5QSVBFIG51bWJlciBkbnBpcGVfb3B0cyBkbnF1ZXVlX29w dHMgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkbl9waXBlIHA7CisK KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGVja19ydWxlc3RhdGUoUEZDVExfU1RBVEVf UVVFVUUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBZWUVSUk9SOworCisgICAg ICAgICAgICAgICAgICAgICAgICBtZW1zZXQoJnAsIDAsIHNpemVvZihwKSk7CisKKyAgICAgICAg ICAgICAgICAgICAgICAgIHAuYmFuZHdpZHRoID0gJDMuYmFuZHdpZHRoOworICAgICAgICAgICAg ICAgICAgICAgICAgcC5kZWxheSA9ICQzLmRlbGF5OworCQkJcC5waXBlX25yID0gJDI7CisgICAg ICAgICAgICAgICAgICAgICAgICBtZW1jcHkoJnAuZnMsICYkNCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc2l6ZW9mKHAuZnMpKTsKKworICAgICAgICAgICAgICAgICAgICAgICAg aWYocGZjdGxfYWRkX2R1bW15bmV0KHBmLCAmcCkpCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFlZRVJST1I7CisgICAgICAgICAgICAgICAgfQorZG5xdWV1ZXNwZWMgICAgIDogRE5R VUVVRSBudW1iZXIgRE5QSVBFIG51bWJlciBkbnF1ZXVlX29wdHMgeworCQkgICAgICAgIHN0cnVj dCBkbl9waXBlIHA7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGVja19ydWxlc3Rh dGUoUEZDVExfU1RBVEVfUVVFVUUpKSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg WVlFUlJPUjsKKworICAgICAgICAgICAgICAgICAgICAgICAgbWVtc2V0KCZwLCAwLCBzaXplb2Yo cCkpOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJDQgPT0gMCkgeworICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB5eWVycm9yKCJwaXBlIG11c3QgYmUgc3BlY2lmaWVkIGZv ciBxdWV1ZSIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBZWUVSUk9SOworICAg ICAgICAgICAgICAgICAgICAgICAgfQorCQkJaWYgKCQyID09IDApIHsKKwkJCQl5eWVycm9yKCJx dWV1ZSBudW1iZXIgbXVzdCBiZSBncmVhdGVyIHRoYW4gMCIpOworCQkJCVlZRVJST1I7CisJCQl9 CisJCQkJCQorICAgICAgICAgICAgICAgICAgICAgICAgbWVtY3B5KCZwLmZzLCAmJDUsIHNpemVv ZihwLmZzKSk7CisJCQlwLmZzLmZzX25yID0gJDI7CisgICAgICAgICAgICAgICAgICAgICAgICBw LmZzLnBhcmVudF9uciA9ICQ0OworCQkJcC5waXBlX25yID0gMDsKKworICAgICAgICAgICAgICAg ICAgICAgICAgaWYgKHBmY3RsX2FkZF9kdW1teW5ldChwZiwgJnApKSB7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHl5ZXJyb3IoImVycm9ycyBpbiBkbnF1ZXVlIGRlZmluaXRpb24i KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWVlFUlJPUjsKKyAgICAgICAgICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgOworCitk bnBpcGVfb3B0cyAgICAgOiAgICAgICAvKiBYWFg6IGZpeCB0aGlzICovIHsKKwkgICAgICAgICAg ICAgICAgYnplcm8oJmRucGlwZV9vcHRzLCBzaXplb2YgZG5waXBlX29wdHMpOworICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGRucGlwZV9vcHRzX2wKKyAgICAgICAg ICAgICAgICAgICAgICAgCXsgJCQgPSBkbnBpcGVfb3B0czsgfQorICAgICAgICAgICAgICAgIHwJ LyogZW1wdHkgKi8geworICAgICAgICAgICAgICAgICAgICAgICAgYnplcm8oJmRucGlwZV9vcHRz LCBzaXplb2YgZG5waXBlX29wdHMpOworICAgICAgICAgICAgICAgICAgICAgICAgJCQgPSBkbnBp cGVfb3B0czsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgOworCitkbnBpcGVf b3B0c19sICAgOiBkbnBpcGVfb3B0c19sIGRucGlwZV9vcHQKKwkgICAgICAgIHwgZG5waXBlX29w dAorICAgICAgICAgICAgICAgIDsKKworZG5waXBlX29wdCAgICAgIDogQkFORFdJRFRIIGJhbmR3 aWR0aCAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRucGlwZV9vcHRzLmJhbmR3aWR0aCA9 ICQyLmJ3X2Fic29sdXRlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB8IERF TEFZIG51bWJlciAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJDIgPiAw ICYmICQyIDwgMTAwMDEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRucGlwZV9v cHRzLmRlbGF5ID0gJDI7CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgeXllcnJvcigiZGVsYXkgbmVlZHMgYXJndW1lbnQgMC4u MTAwMDBtcyIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBZWUVSUk9SOworICAg ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICA7CisKK2RucXVldWVfb3B0cyAgICA6IC8qIFhYWDogZml4IHRoaXMgKi8geworCQkgICAgICAg IGJ6ZXJvKCZkbnF1ZXVlX29wdHMsIHNpemVvZiBkbnF1ZXVlX29wdHMpOworICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZG5xdWV1ZV9vcHRzX2wKKyAgICAgICAgICAgICAg ICAgICAgICAgIHsgJCQgPSBkbnF1ZXVlX29wdHM7IH0KKyAgICAgICAgICAgICAgICB8IC8qIGVt cHR5ICovIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ6ZXJvKCZxdWV1ZV9vcHRzLCBzaXpl b2YgcXVldWVfb3B0cyk7CisgICAgICAgICAgICAgICAgICAgICAgICAkJCA9IGRucXVldWVfb3B0 czsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgOworCitkbnF1ZXVlX29wdHNf bCAgOiBkbnF1ZXVlX29wdHNfbCBkbnF1ZXVlX29wdAorCQl8IGRucXVldWVfb3B0CisgICAgICAg ICAgICAgICAgOworCitkbnF1ZXVlX29wdCAgICAgOiBCVUNLRVRTIG51bWJlciAgICAgICB7CisJ CSAgICAgICAgaWYgKCQyIDwgMTYgfHwgJDIgPiA2NTUzNSkgeworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB5eWVycm9yKCJidWNrZXRzIG91dCBvZiByYW5nZTogWzE2LTY1NTM1XSIp OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBZWUVSUk9SOworICAgICAgICAgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgLypkbnF1ZXVlX29wdHMubWFy a2VyIHw9IEROX0JVQ0tFVFM7Ki8KKyAgICAgICAgICAgICAgICAgICAgICAgIGRucXVldWVfb3B0 cy5ycV9zaXplID0gJDI7CisgICAgICAgICAgICAgICAgfQorCQl8IFdFSUdIVCBudW1iZXIJCQkg IHsKKwkJCWlmICgkMiA8IDAgfHwgJDIgPiAxMDApICB7IC8qIFswLi4xMDBdIGlzIGFsbG93ZWQg Ki8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeXllcnJvcigid2VpZ2h0IG11c3Qg YmUgaW4gWzAuLjEwMF0gcmFuZ2UiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg WVlFUlJPUjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg ICAgIAorCQkJZG5xdWV1ZV9vcHRzLndlaWdodCA9ICQyOworCQl9CisgICAgICAgICAgICAgICAg fCBRVUVVRSBTVFJJTkcJCSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgICBicHM7 CisgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICAgICpjcDsKKworCQkJYnBzID0gc3RydG9k KCQyLCAmY3ApOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJwcyA8IDE2IHx8IGJwcyA+ IDY1NTM1KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHl5ZXJyb3IoInFsaW1p dCBvdXQgb2YgcmFuZ2UgWzE2Li42NTUzNV0iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgWVlFUlJPUjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg ICAgICAgICAgICAgaWYgKGNwICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaWYgKCFzdHJjbXAoY3AsICJCIikpCisJCQkJCWRucXVldWVfb3B0cy5mbGFnc19mcyB8 PSAKKwkJCQkJCUROX1FTSVpFX0lTX0JZVEVTOworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBlbHNlIGlmICghc3RyY21wKGNwLCAiS0IiKSkgeworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGJwcyAqPSAxMDI0OworCQkJCQlkbnF1ZXVlX29wdHMuZmxhZ3Nf ZnMgfD0gCisJCQkJCQlETl9RU0laRV9JU19CWVRFUzsKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgfSBlbHNlIGlmICgqY3AgIT0gJ1wwJykgeworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHl5ZXJyb3IoInVua25vd24gdW5pdCAlcyIsIGNwKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlKCQyKTsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBZWUVSUk9SOworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB9CisJCQl9IGVsc2UgCisJCQkJZG5xdWV1ZV9vcHRzLmZsYWdzX2ZzICY9 IAorCQkJCQl+RE5fUVNJWkVfSVNfQllURVM7CisgICAgICAgICAgICAgICAgICAgICAgICBmcmVl KCQyKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgZG5xdWV1ZV9vcHRzLnFzaXplID0gKHVf aW50MzJfdClicHM7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHwgUExSIG51 bWJlciAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAg ICBkbnF1ZXVlX29wdHMucGxyID0gKGludCkkMioweDdmZmZmZmZmIDsKKyAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgICAgfCBNQVNLIG1hc2tfc3BlY2lmaWVyICAgeworICAgICAgICAg ICAgICAgICAgICAgICAgbWVtY3B5KCZkbnF1ZXVlX29wdHMsICYkMiwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc2l6ZW9mKGRucXVldWVfb3B0cykpOworICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICB8IFJFRCBzdHJpbmcgJy8nIG51bWJlciAnLycgbnVtYmVyICcv JyBzdHJpbmcgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgLyogWFhYOiB0aGlzIG5v dCB5ZXQgZmluaXNoZWQhICovCisgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICAgICplOwor ICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlICAgcCA9IHN0cnRvZCgkMiwgJmUpOworCisg ICAgICAgICAgICAgICAgICAgICAgICBpZiAoKmUgPT0gJyUnKSB7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHAgKj0gMC4wMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZSsrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKCplKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHl5ZXJyb3IoImlu dmFsaWQ6ICVzIiwgJDIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlKCQy KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWVlFUlJPUjsKKyAgICAgICAgICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHAgPSBmbG9vcihwICogKFVJ TlRfTUFYKzEuMCkgKyAwLjUpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHAgPCAxLjAg fHwgcCA+PSAoVUlOVF9NQVgrMS4wKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB5eWVycm9yKCJpbnZhbGlkOiAlcyIsICQyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZnJlZSgkMik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlZRVJST1I7 CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBmcmVl KCQyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgOworCittYXNrX3NwZWNp ZmllciAgOiBBTEwgICAgICAgICAgICAgICAgICAgeworCisgICAgICAgICAgICAgICAgICAgICAg ICBtZW1zZXQoJiQkLCAwLCBzaXplb2YoJCQpKTsKKworICAgICAgICAgICAgICAgICAgICAgICAg JCQuZmxvd19tYXNrLmRzdF9pcCA9IH4wOworICAgICAgICAgICAgICAgICAgICAgICAgJCQuZmxv d19tYXNrLnNyY19pcCA9IH4wOworICAgICAgICAgICAgICAgICAgICAgICAgJCQuZmxvd19tYXNr LmRzdF9wb3J0ID0gfjA7CisgICAgICAgICAgICAgICAgICAgICAgICAkJC5mbG93X21hc2suc3Jj X3BvcnQgPSB+MDsKKyAgICAgICAgICAgICAgICAgICAgICAgICQkLmZsb3dfbWFzay5wcm90byA9 IH4wOworICAgICAgICAgICAgICAgICAgICAgICAgbjJtYXNrKCYkJC5mbG93X21hc2suZHN0X2lw NiwgMTI4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG4ybWFzaygmJCQuZmxvd19tYXNrLnNy Y19pcDYsIDEyOCk7CisgICAgICAgICAgICAgICAgICAgICAgICAkJC5mbG93X21hc2suZmxvd19p ZDYgPSB+MDsKKyAgICAgICAgICAgICAgICAgICAgICAgICQkLmZsYWdzX2ZzIHw9IEROX0hBVkVf RkxPV19NQVNLOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB8IERTVElQIG51 bWJlciAgICAgICAgICAgICAJeworCQkJJCQuZmxvd19tYXNrLmRzdF9pcCA9ICh1aW50MzJfdCkk MjsKKyAgICAgICAgICAgICAgICAgICAgICAgICQkLmZsYWdzX2ZzIHw9IEROX0hBVkVfRkxPV19N QVNLOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB8IFNSQ0lQIG51bWJlcgkg ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgJCQuZmxvd19tYXNrLnNyY19p cCA9ICh1aW50MzJfdCkkMjsKKyAgICAgICAgICAgICAgICAgICAgICAgICQkLmZsYWdzX2ZzIHw9 IEROX0hBVkVfRkxPV19NQVNLOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB8 IERTVFBPUlQgbnVtYmVyCSAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgJCQu Zmxvd19tYXNrLmRzdF9wb3J0ID0gKHVpbnQxNl90KSQyOworICAgICAgICAgICAgICAgICAgICAg ICAgJCQuZmxhZ3NfZnMgfD0gRE5fSEFWRV9GTE9XX01BU0s7CisgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICAgIHwgU1JDUE9SVCBudW1iZXIJICAgICAgICAgICB7CisgICAgICAgICAg ICAgICAgICAgICAgICAkJC5mbG93X21hc2suc3JjX3BvcnQgPSAodWludDE2X3QpJDI7CisgICAg ICAgICAgICAgICAgICAgICAgICAkJC5mbGFnc19mcyB8PSBETl9IQVZFX0ZMT1dfTUFTSzsKKyAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfCBEU1RJUDYgJy8nIG51bWJlciAJICAg ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBuMm1hc2soJiQkLmZsb3dfbWFzay5k c3RfaXA2LCAkMyk7CisgICAgICAgICAgICAgICAgICAgICAgICAkJC5mbGFnc19mcyB8PSBETl9I QVZFX0ZMT1dfTUFTSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfCBTUkNJ UDYgJy8nIG51bWJlcgkgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBuMm1h c2soJiQkLmZsb3dfbWFzay5zcmNfaXA2LCAkMyk7CisgICAgICAgICAgICAgICAgICAgICAgICAk JC5mbGFnc19mcyB8PSBETl9IQVZFX0ZMT1dfTUFTSzsKKyAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgICAgfCBGTE9XSUQgbnVtYmVyCSAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg ICAgICAgICAgICQkLmZsb3dfbWFzay5mbG93X2lkNiA9ICh1aW50MzJfdCkkMjsKKyAgICAgICAg ICAgICAgICAgICAgICAgICQkLmZsYWdzX2ZzIHw9IEROX0hBVkVfRkxPV19NQVNLOworCisgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHwgUFJPVE8gbnVtYmVyIAkgICAgICAgICAg ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgJCQuZmxvd19tYXNrLnByb3RvID0gKHVpbnQ4 X3QpJDI7CisgICAgICAgICAgICAgICAgICAgICAgICAkJC5mbGFnc19mcyB8PSBETl9IQVZFX0ZM T1dfTUFTSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfCBOT0VSUk9SICAg ICAgIHsgJCQuZmxhZ3NfZnMgfD0gRE5fTk9FUlJPUjsgfQorICAgICAgICAgICAgICAgIDsKKwog cGZydWxlCQk6IGFjdGlvbiBkaXIgbG9ncXVpY2sgaW50ZXJmYWNlIHJvdXRlIGFmIHByb3RvIGZy b210bwogCQkgICAgZmlsdGVyX29wdHMKIAkJewpAQCAtMjAzNCw2ICsyMjY2LDE0IEBACiAJCQkJ ZnJlZSgkOS5xdWV1ZXMucHFuYW1lKTsKIAkJCX0KIAorCQkJaWYgKCQ5LmRucGlwZSkgeworCQkJ CXIuZG5waXBlID0gJDkuZG5waXBlOworCQkJCXIuZG50eXBlID0gJDkuZG50eXBlOworCQkJfQor CQkJaWYgKCQ5LnBkbnBpcGUgJiYgci5kbnR5cGUgPT0gRE5fSVNfUVVFVUUpIHsKKwkJCQlyLnBk bnBpcGUgPSAkOS5wZG5waXBlOworCQkJfQorCiAJCQlleHBhbmRfcnVsZSgmciwgJDQsICQ1Lmhv c3QsICQ3LCAkOC5zcmNfb3MsCiAJCQkgICAgJDguc3JjLmhvc3QsICQ4LnNyYy5wb3J0LCAkOC5k c3QuaG9zdCwgJDguZHN0LnBvcnQsCiAJCQkgICAgJDkudWlkLCAkOS5naWQsICQ5LmljbXBzcGVj LCAiIik7CkBAIC0yMTIzLDYgKzIzNjMsMjcgQEAKIAkJCX0KIAkJCWZpbHRlcl9vcHRzLnF1ZXVl cyA9ICQxOwogCQl9CisJCXwgRE5QSVBFIG51bWJlcgkJCSAgICAgICAgeworCQkJZmlsdGVyX29w dHMuZG5waXBlID0gJDI7CisJCQlmaWx0ZXJfb3B0cy5kbnR5cGUgPSBETl9JU19QSVBFOworCQl9 CisJCXwgRE5QSVBFICcoJyBudW1iZXIgJyknCQkJeworCQkJZmlsdGVyX29wdHMuZG5waXBlID0g JDM7CisJCQlmaWx0ZXJfb3B0cy5kbnR5cGUgPSBETl9JU19QSVBFOworCQl9CisJCXwgRE5RVUVV RSBudW1iZXIJCQl7CisJCQlmaWx0ZXJfb3B0cy5kbnBpcGUgPSAkMjsKKwkJCWZpbHRlcl9vcHRz LmRudHlwZSA9IEROX0lTX1FVRVVFOworCQl9CisJCXwgRE5RVUVVRSAnKCcgbnVtYmVyIGNvbW1h IG51bWJlciAnKScJeworCQkJZmlsdGVyX29wdHMuZG5waXBlID0gJDM7CisJCQlmaWx0ZXJfb3B0 cy5wZG5waXBlID0gJDU7CisJCQlmaWx0ZXJfb3B0cy5kbnR5cGUgPSBETl9JU19RVUVVRTsKKwkJ fQorCQl8IEROUVVFVUUgJygnIG51bWJlciAnKScJCXsKKwkJCWZpbHRlcl9vcHRzLmRucGlwZSA9 ICQzOworCQkJZmlsdGVyX29wdHMuZG50eXBlID0gRE5fSVNfUVVFVUU7CisJCX0KIAkJfCBUQUcg c3RyaW5nCQkJCXsKIAkJCWZpbHRlcl9vcHRzLnRhZyA9ICQyOwogCQl9CkBAIC00MTEwLDYgKzQz NzEsMTEgQEAKIAkJeXllcnJvcigia2VlcCBzdGF0ZSBvbiBibG9jayBydWxlcyBkb2Vzbid0IG1h a2Ugc2Vuc2UiKTsKIAkJcHJvYmxlbXMrKzsKIAl9CisJaWYgKHItPnJ0ICYmIHItPmRucGlwZSkg eworCQl5eWVycm9yKCJyb3V0ZS10by9kdXAtdG8vZmFzdHJvdXRlL3JlcGx5LXRvIHdpdGggZHVt bXluZXQgIgorCQkJImRvZXNuJ3QgbWFrZSBzZW5zZSIpOworCQlwcm9ibGVtcysrOworCX0KIAly ZXR1cm4gKC1wcm9ibGVtcyk7CiB9CiAKQEAgLTQ4OTYsMjMgKzUxNjIsMzIgQEAKIAkJeyAiYml0 bWFzayIsCQlCSVRNQVNLfSwKIAkJeyAiYmxvY2siLAkJQkxPQ0t9LAogCQl7ICJibG9jay1wb2xp Y3kiLAlCTE9DS1BPTElDWX0sCisJCXsgImJ1Y2tldHMiLAkJQlVDS0VUU30sCiAJCXsgImNicSIs CQlDQlF9LAogCQl7ICJjb2RlIiwJCUNPREV9LAogCQl7ICJjcm9wIiwJCUZSQUdDUk9QfSwKIAkJ eyAiZGVidWciLAkJREVCVUd9LAorCQl7ICJkZWxheSIsCQlERUxBWX0sCisJCXsgImRucGlwZSIs IAkJRE5QSVBFfSwKKwkJeyAiZG5xdWV1ZSIsCQlETlFVRVVFfSwKIAkJeyAiZHJvcCIsCQlEUk9Q fSwKIAkJeyAiZHJvcC1vdmwiLAkJRlJBR0RST1B9LAorCQl7ICJkc3QtaXAiLAkJRFNUSVB9LAor CQl7ICJkc3QtaXA2IiwJCURTVElQNn0sCiAJCXsgImR1cC10byIsCQlEVVBUT30sCisJCXsgImRz dC1wb3J0IiwJCURTVFBPUlR9LAogCQl7ICJmYXN0cm91dGUiLAkJRkFTVFJPVVRFfSwKIAkJeyAi ZmlsZSIsCQlGSUxFTkFNRX0sCiAJCXsgImZpbmdlcnByaW50cyIsCUZJTkdFUlBSSU5UU30sCiAJ CXsgImZsYWdzIiwJCUZMQUdTfSwKIAkJeyAiZmxvYXRpbmciLAkJRkxPQVRJTkd9LAorCQl7ICJm bG93LWlkIiwJCUZMT1dJRH0sCiAJCXsgImZsdXNoIiwJCUZMVVNIfSwKIAkJeyAiZm9yIiwJCUZP Un0sCiAJCXsgImZyYWdtZW50IiwJCUZSQUdNRU5UfSwKIAkJeyAiZnJvbSIsCQlGUk9NfSwKIAkJ eyAiZ2xvYmFsIiwJCUdMT0JBTH0sCisJCXsgImdyZWQiLAkJR1JFRH0sCiAJCXsgImdyb3VwIiwJ CUdST1VQfSwKIAkJeyAiaGZzYyIsCQlIRlNDfSwKIAkJeyAiaG9zdGlkIiwJCUhPU1RJRH0sCkBA IC00OTI5LDYgKzUyMDQsNyBAQAogCQl7ICJsb2FkIiwJCUxPQUR9LAogCQl7ICJsb2ciLAkJTE9H fSwKIAkJeyAibG9naW50ZXJmYWNlIiwJTE9HSU5URVJGQUNFfSwKKwkJeyAibWFzayIsCQlNQVNL fSwKIAkJeyAibWF4IiwJCU1BWElNVU19LAogCQl7ICJtYXgtbXNzIiwJCU1BWE1TU30sCiAJCXsg Im1heC1zcmMtY29ubiIsCU1BWFNSQ0NPTk59LApAQCAtNDk0MywxMiArNTIxOSwxNCBAQAogCQl7 ICJuby1kZiIsCQlOT0RGfSwKIAkJeyAibm8tcm91dGUiLAkJTk9ST1VURX0sCiAJCXsgIm5vLXN5 bmMiLAkJTk9TWU5DfSwKKwkJeyAibm9lcnJvciIsCQlOT0VSUk9SfSwKIAkJeyAib24iLAkJCU9O fSwKIAkJeyAib3B0aW1pemF0aW9uIiwJT1BUSU1JWkFUSU9OfSwKIAkJeyAib3MiLAkJCU9TfSwK IAkJeyAib3V0IiwJCU9VVH0sCiAJCXsgIm92ZXJsb2FkIiwJCU9WRVJMT0FEfSwKIAkJeyAicGFz cyIsCQlQQVNTfSwKKwkJeyAicGxyIiwJCVBMUn0sCiAJCXsgInBvcnQiLAkJUE9SVH0sCiAJCXsg InByaW9yaXR5IiwJCVBSSU9SSVRZfSwKIAkJeyAicHJpcSIsCQlQUklRfSwKQEAgLTQ5NjMsNiAr NTI0MSw3IEBACiAJCXsgInJkci1hbmNob3IiLAkJUkRSQU5DSE9SfSwKIAkJeyAicmVhbHRpbWUi LAkJUkVBTFRJTUV9LAogCQl7ICJyZWFzc2VtYmxlIiwJCVJFQVNTRU1CTEV9LAorCQl7ICJyZWQi LAkJUkVEfSwKIAkJeyAicmVwbHktdG8iLAkJUkVQTFlUT30sCiAJCXsgInJlcXVpcmUtb3JkZXIi LAlSRVFVSVJFT1JERVJ9LAogCQl7ICJyZXR1cm4iLAkJUkVUVVJOfSwKQEAgLTQ5ODAsNiArNTI1 OSw5IEBACiAJCXsgInNraXAiLAkJU0tJUH0sCiAJCXsgInNvdXJjZS1oYXNoIiwJU09VUkNFSEFT SH0sCiAJCXsgInNvdXJjZS10cmFjayIsCVNPVVJDRVRSQUNLfSwKKwkJeyAic3JjLWlwIiwJCVNS Q0lQfSwKKwkJeyAic3JjLWlwNiIsIAkJU1JDSVA2fSwKKwkJeyAic3JjLXBvcnQiLAkJU1JDUE9S VH0sCiAJCXsgInN0YXRlIiwJCVNUQVRFfSwKIAkJeyAic3RhdGUtcG9saWN5IiwJU1RBVEVQT0xJ Q1l9LAogCQl7ICJzdGF0aWMtcG9ydCIsCVNUQVRJQ1BPUlR9LApAQCAtNDk5Niw2ICs1Mjc4LDcg QEAKIAkJeyAidXBwZXJsaW1pdCIsCQlVUFBFUkxJTUlUfSwKIAkJeyAidXJwZi1mYWlsZWQiLAlV UlBGRkFJTEVEfSwKIAkJeyAidXNlciIsCQlVU0VSfSwKKwkJeyAid2VpZ2h0IiwJCVdFSUdIVH0s CiAJfTsKIAljb25zdCBzdHJ1Y3Qga2V5d29yZHMJKnA7CiAKQEAgLTU1MjQsMyArNTgwNywyMyBA QAogCiAJcmV0dXJuICgwKTsKIH0KKworLyogbjJtYXNrIHNldHMgbiBiaXRzIG9mIHRoZSBtYXNr ICovCitzdGF0aWMgdm9pZAorbjJtYXNrKHN0cnVjdCBpbjZfYWRkciAqbWFzaywgaW50IG4pCit7 CisgICAgICAgIHN0YXRpYyBpbnQgICAgICBtaW5pbWFza1s5XSA9CisgICAgICAgICAgICB7IDB4 MDAsIDB4ODAsIDB4YzAsIDB4ZTAsIDB4ZjAsIDB4ZjgsIDB4ZmMsIDB4ZmUsIDB4ZmYgfTsKKyAg ICAgICAgdV9jaGFyICAgICAgICAgICpwOworCisgICAgICAgIG1lbXNldChtYXNrLCAwLCBzaXpl b2Yoc3RydWN0IGluNl9hZGRyKSk7CisgICAgICAgIHAgPSAodV9jaGFyICopIG1hc2s7CisgICAg ICAgIGZvciAoOyBuID4gMDsgcCsrLCBuIC09IDgpIHsKKyAgICAgICAgICAgICAgICBpZiAobiA+ PSA4KQorICAgICAgICAgICAgICAgICAgICAgICAgKnAgPSAweGZmOworICAgICAgICAgICAgICAg IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICpwID0gbWluaW1hc2tbbl07CisgICAgICAg IH0KKyAgICAgICAgcmV0dXJuOworfQorCkluZGV4OiBjb250cmliL3BmL3BmY3RsL3BmY3RsLmMK PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQpSQ1MgZmlsZTogL2hvbWUvZXJpL3JlcG8vY29udHJpYi9wZi9wZmN0bC9wZmN0 bC5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEuMS4xCmRpZmYgLXUgLXIxLjEuMS4xIHBmY3Rs LmMKLS0tIGNvbnRyaWIvcGYvcGZjdGwvcGZjdGwuYwkyMSBPY3QgMjAwNyAxMzo1MzoxNSAtMDAw MAkxLjEuMS4xCisrKyBjb250cmliL3BmL3BmY3RsL3BmY3RsLmMJMjEgT2N0IDIwMDcgMTk6MDM6 NDkgLTAwMDAKQEAgLTQ2LDYgKzQ2LDkgQEAKICNpbmNsdWRlIDxhbHRxL2FsdHEuaD4KICNpbmNs dWRlIDxzeXMvc3lzY3RsLmg+CiAKKyNpbmNsdWRlIDxuZXRpbmV0L2lwX2Z3Lmg+CisjaW5jbHVk ZSA8bmV0aW5ldC9pcF9kdW1teW5ldC5oPgorCiAjaW5jbHVkZSA8ZXJyLmg+CiAjaW5jbHVkZSA8 ZXJybm8uaD4KICNpbmNsdWRlIDxmY250bC5oPgpAQCAtNzEsNiArNzQsNyBAQAogaW50CSBwZmN0 bF9jbGVhcl9ydWxlcyhpbnQsIGludCwgY2hhciAqKTsKIGludAkgcGZjdGxfY2xlYXJfbmF0KGlu dCwgaW50LCBjaGFyICopOwogaW50CSBwZmN0bF9jbGVhcl9hbHRxKGludCwgaW50KTsKK2ludAkg cGZjdGxfY2xlYXJfZHVtbXluZXQoaW50LCBpbnQpOwogaW50CSBwZmN0bF9jbGVhcl9zcmNfbm9k ZXMoaW50LCBpbnQpOwogaW50CSBwZmN0bF9jbGVhcl9zdGF0ZXMoaW50LCBjb25zdCBjaGFyICos IGludCk7CiB2b2lkCSBwZmN0bF9hZGRycHJlZml4KGNoYXIgKiwgc3RydWN0IHBmX2FkZHIgKik7 CkBAIC05NSw2ICs5OSw3IEBACiBpbnQJIHBmY3RsX3Nob3dfbGltaXRzKGludCwgaW50KTsKIHZv aWQJIHBmY3RsX2RlYnVnKGludCwgdV9pbnQzMl90LCBpbnQpOwogaW50CSBwZmN0bF90ZXN0X2Fs dHFzdXBwb3J0KGludCwgaW50KTsKK2ludAkgcGZjdGxfdGVzdF9kdW1teW5ldHN1cHBvcnQoaW50 LCBpbnQpOwogaW50CSBwZmN0bF9zaG93X2FuY2hvcnMoaW50LCBpbnQsIGNoYXIgKik7CiBpbnQJ IHBmY3RsX3J1bGVzZXRfdHJhbnMoc3RydWN0IHBmY3RsICosIGNoYXIgKiwgc3RydWN0IHBmX2Fu Y2hvciAqKTsKIGludAkgcGZjdGxfbG9hZF9ydWxlc2V0KHN0cnVjdCBwZmN0bCAqLCBjaGFyICos CkBAIC0xMjIsNiArMTI3LDkgQEAKIGludAkJIGxvYWRvcHQ7CiBpbnQJCSBhbHRxc3VwcG9ydDsK IAoraW50IAkJIGR1bW15bmV0c3VwcG9ydDsKK2ludCAJCSBkbnNvY2s7CisKIGludAkJIGRldiA9 IC0xOwogaW50CQkgZmlyc3RfdGl0bGUgPSAxOwogaW50CQkgbGFiZWxzID0gMDsKQEAgLTIwNywx MiArMjE1LDEyIEBACiB9OwogCiBzdGF0aWMgY29uc3QgY2hhciAqY2xlYXJvcHRfbGlzdFtdID0g ewotCSJuYXQiLCAicXVldWUiLCAicnVsZXMiLCAiU291cmNlcyIsCisJIm5hdCIsICJxdWV1ZSIs ICJkdW1teW5ldCIsICJydWxlcyIsICJTb3VyY2VzIiwKIAkic3RhdGUiLCAiaW5mbyIsICJUYWJs ZXMiLCAib3NmcCIsICJhbGwiLCBOVUxMCiB9OwogCiBzdGF0aWMgY29uc3QgY2hhciAqc2hvd29w dF9saXN0W10gPSB7Ci0JIm5hdCIsICJxdWV1ZSIsICJydWxlcyIsICJBbmNob3JzIiwgIlNvdXJj ZXMiLCAic3RhdGUiLCAiaW5mbyIsCisJIm5hdCIsICJxdWV1ZSIsICJkdW1teW5ldCIsICJydWxl cyIsICJBbmNob3JzIiwgIlNvdXJjZXMiLCAic3RhdGUiLCAiaW5mbyIsCiAJIkludGVyZmFjZXMi LCAibGFiZWxzIiwgInRpbWVvdXRzIiwgIm1lbW9yeSIsICJUYWJsZXMiLCAib3NmcCIsCiAJImFs bCIsIE5VTEwKIH07CkBAIC0zNjcsNiArMzc1LDIxIEBACiB9CiAKIGludAorcGZjdGxfY2xlYXJf ZHVtbXluZXQoaW50IGRuc29jaywgaW50IG9wdHMpCit7CisgICAgICAgaWYgKCFkdW1teW5ldHN1 cHBvcnQpCisgICAgICAgICAgICAgICByZXR1cm4gKC0xKTsKKyAgICAgICBpZiAoc2V0c29ja29w dChkbnNvY2ssIElQUFJPVE9fSVAsIElQX0RVTU1ZTkVUX0ZMVVNILCBOVUxMLCAwKSA8IDApIHsK KyAgICAgICAgICAgICAgIGVycigxLCJzZXRzb2Nrb3B0KElQX0RVTU1ZTkVUX0ZMVVNIKSIpOwor ICAgICAgICAgICAgICAgcmV0dXJuICgxKTsKKyAgICAgICB9CisKKyAgICAgICBpZiAoKG9wdHMg JiBQRl9PUFRfUVVJRVQpID09IDApCisgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkRV TU1ZTkVUIGNsZWFyZWRcbiIpOworICAgICAgIHJldHVybiAoMCk7Cit9CisKK2ludAogcGZjdGxf Y2xlYXJfc3JjX25vZGVzKGludCBkZXYsIGludCBvcHRzKQogewogCWlmIChpb2N0bChkZXYsIERJ T0NDTFJTUkNOT0RFUykpCkBAIC0xMzQ4LDYgKzEzNzEsMjQgQEAKIH0KIAogaW50CitwZmN0bF9h ZGRfZHVtbXluZXQoc3RydWN0IHBmY3RsICpwZiwgc3RydWN0IGRuX3BpcGUgKnApCit7CisgICAg ICAgaWYgKGR1bW15bmV0c3VwcG9ydCAmJgorICAgICAgICAgICAobG9hZG9wdCAmIFBGQ1RMX0ZM QUdfRFVNTVlORVQpICE9IDApIHsKKyAgICAgICAgICAgICAgIGlmICgocGYtPm9wdHMgJiBQRl9P UFRfTk9BQ1RJT04pID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNldHNvY2tv cHQoZG5zb2NrLCBJUFBST1RPX0lQLCBJUF9EVU1NWU5FVF9DT05GSUdVUkUsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcCwgc2l6ZW9mKCpwKSkgPCAwKSB7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZXJyeCgxLCAiRFVNTVlORVQgY29uZmlndXJlIik7CisgICAgICAg ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorCWlmIChwZi0+ b3B0cyAmIFBGX09QVF9WRVJCT1NFKSAKKwkgICAgICAgcHJpbnRfZHVtbXluZXQocCk7CisKKyAg ICAgICByZXR1cm4gKDApOworfQorCitpbnQKIHBmY3RsX3J1bGVzKGludCBkZXYsIGNoYXIgKmZp bGVuYW1lLCBGSUxFICpmaW4sIGludCBvcHRzLCBpbnQgb3B0aW1pemUsCiAgICAgY2hhciAqYW5j aG9ybmFtZSwgc3RydWN0IHBmcl9idWZmZXIgKnRyYW5zKQogewpAQCAtMTkxNCw2ICsxOTU1LDIx IEBACiB9CiAKIGludAorcGZjdGxfdGVzdF9kdW1teW5ldHN1cHBvcnQoaW50IGRuc29jaywgaW50 IG9wdHMpCit7CisgICAgICAgc3RydWN0IGRuX3BpcGUgcDsKKyAgICAgICBzb2NrbGVuX3QgICAg ICAgbGVuOworCisgICAgICAgaWYgKGdldHNvY2tvcHQoZG5zb2NrLCBJUFBST1RPX0lQLCBJUF9E VU1NWU5FVF9HRVQsICZwLAorICAgICAgICAgICAgICAgICAgICAgICAmbGVuKSA8IDApIHsKKyAg ICAgICAgICAgICAgIGlmICghKG9wdHMgJiAoUEZfT1BUX1FVSUVUfFBGX09QVF9OT0FDVElPTikp KQorICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkRVTU1ZTkVUIG5vdCBs b2FkZWRcbiIpOworICAgICAgICAgICAgICAgcmV0dXJuICgwKTsKKyAgICAgICB9CisgICAgICAg cmV0dXJuICgxKTsKK30KKworaW50CiBwZmN0bF9zaG93X2FuY2hvcnMoaW50IGRldiwgaW50IG9w dHMsIGNoYXIgKmFuY2hvcm5hbWUpCiB7CiAJc3RydWN0IHBmaW9jX3J1bGVzZXQJIHByOwpAQCAt MTk3OCw3ICsyMDM0LDcgQEAKIAkJdXNhZ2UoKTsKIAogCXdoaWxlICgoY2ggPSBnZXRvcHQoYXJn YywgYXJndiwKLQkgICAgImE6QWREOmVxZjpGOmdoaTprOks6bW5OT286OnA6clJzOnQ6VDp2eDp6 IikpICE9IC0xKSB7CisJICAgICJhOkFkRFA6ZXFmOkY6Z2hpOms6Szptbk5Pbzo6cDpyUnM6dDpU OnZ4OnoiKSkgIT0gLTEpIHsKIAkJc3dpdGNoIChjaCkgewogCQljYXNlICdhJzoKIAkJCWFuY2hv cm9wdCA9IG9wdGFyZzsKQEAgLTIwNTAsNiArMjEwNiw5IEBACiAJCWNhc2UgJ0EnOgogCQkJbG9h ZG9wdCB8PSBQRkNUTF9GTEFHX0FMVFE7CiAJCQlicmVhazsKKwkJY2FzZSAnUCc6CisJCQlsb2Fk b3B0IHw9IFBGQ1RMX0ZMQUdfRFVNTVlORVQ7CisJCQlicmVhazsKIAkJY2FzZSAnUic6CiAJCQls b2Fkb3B0IHw9IFBGQ1RMX0ZMQUdfRklMVEVSOwogCQkJYnJlYWs7CkBAIC0yMTY0LDYgKzIyMjMs MTEgQEAKIAkJaWYgKGRldiA9PSAtMSkKIAkJCWVycigxLCAiJXMiLCBwZl9kZXZpY2UpOwogCQlh bHRxc3VwcG9ydCA9IHBmY3RsX3Rlc3RfYWx0cXN1cHBvcnQoZGV2LCBvcHRzKTsKKworCQlkbnNv Y2sgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19SQVcsIElQUFJPVE9fUkFXKTsKKwkJaWYgKGRuc29j ayA8IDApCisJCQllcnIoMSwgInNvY2tldCIpOworCQlkdW1teW5ldHN1cHBvcnQgPSBwZmN0bF90 ZXN0X2R1bW15bmV0c3VwcG9ydChkbnNvY2ssIG9wdHMpOwogCX0gZWxzZSB7CiAJCWRldiA9IG9w ZW4ocGZfZGV2aWNlLCBPX1JET05MWSk7CiAJCWlmIChkZXYgPj0gMCkKQEAgLTIxNzYsNiArMjI0 MCwxMCBAQAogI2Vsc2UKIAkJYWx0cXN1cHBvcnQgPSAxOwogI2VuZGlmCisgICAgICAgICAgICAg ICAgZG5zb2NrID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfUkFXLCBJUFBST1RPX1JBVyk7CisgICAg ICAgICAgICAgICAgaWYgKGRuc29jayA8IDApCisgICAgICAgICAgICAgICAgICAgICAgICBlcnIo MSwgInNvY2tldCIpOworICAgICAgICAgICAgICAgIGR1bW15bmV0c3VwcG9ydCA9IHBmY3RsX3Rl c3RfZHVtbXluZXRzdXBwb3J0KGRuc29jaywgb3B0cyk7CiAJfQogCiAJaWYgKG9wdHMgJiBQRl9P UFRfRElTQUJMRSkKQEAgLTIyMDUsNiArMjI3Myw5IEBACiAJCQlwZmN0bF9zaG93X2FsdHEoZGV2 LCBpZmFjZW9wdCwgb3B0cywKIAkJCSAgICBvcHRzICYgUEZfT1BUX1ZFUkJPU0UyKTsKIAkJCWJy ZWFrOworCQljYXNlICdkJzoKKwkJCXBmY3RsX3Nob3dfZHVtbXluZXQoZG5zb2NrLCBvcHRzKTsK KwkJCWJyZWFrOwogCQljYXNlICdzJzoKIAkJCXBmY3RsX3Nob3dfc3RhdGVzKGRldiwgaWZhY2Vv cHQsIG9wdHMpOwogCQkJYnJlYWs7CkBAIC0yMjI3LDYgKzIyOTgsNyBAQAogCQkJcGZjdGxfc2hv d19uYXQoZGV2LCBvcHRzLCBhbmNob3JuYW1lKTsKIAkJCXBmY3RsX3Nob3dfcnVsZXMoZGV2LCBw YXRoLCBvcHRzLCAwLCBhbmNob3JuYW1lLCAwKTsKIAkJCXBmY3RsX3Nob3dfYWx0cShkZXYsIGlm YWNlb3B0LCBvcHRzLCAwKTsKKwkJCXBmY3RsX3Nob3dfZHVtbXluZXQoZG5zb2NrLCBvcHRzKTsK IAkJCXBmY3RsX3Nob3dfc3RhdGVzKGRldiwgaWZhY2VvcHQsIG9wdHMpOwogCQkJcGZjdGxfc2hv d19zcmNfbm9kZXMoZGV2LCBvcHRzKTsKIAkJCXBmY3RsX3Nob3dfc3RhdHVzKGRldiwgb3B0cyk7 CkBAIC0yMjY4LDYgKzIzNDAsOSBAQAogCQljYXNlICdxJzoKIAkJCXBmY3RsX2NsZWFyX2FsdHEo ZGV2LCBvcHRzKTsKIAkJCWJyZWFrOworCQljYXNlICdkJzoKKwkJCXBmY3RsX2NsZWFyX2R1bW15 bmV0KGRuc29jaywgb3B0cyk7CisJCQlicmVhazsKIAkJY2FzZSAncyc6CiAJCQlwZmN0bF9jbGVh cl9zdGF0ZXMoZGV2LCBpZmFjZW9wdCwgb3B0cyk7CiAJCQlicmVhazsKQEAgLTIyODMsNiArMjM1 OCw3IEBACiAJCQlwZmN0bF9jbGVhcl90YWJsZXMoYW5jaG9ybmFtZSwgb3B0cyk7CiAJCQlpZiAo ISphbmNob3JuYW1lKSB7CiAJCQkJcGZjdGxfY2xlYXJfYWx0cShkZXYsIG9wdHMpOworCQkJCXBm Y3RsX2NsZWFyX2R1bW15bmV0KGRuc29jaywgb3B0cyk7CiAJCQkJcGZjdGxfY2xlYXJfc3RhdGVz KGRldiwgaWZhY2VvcHQsIG9wdHMpOwogCQkJCXBmY3RsX2NsZWFyX3NyY19ub2RlcyhkZXYsIG9w dHMpOwogCQkJCXBmY3RsX2NsZWFyX3N0YXRzKGRldiwgb3B0cyk7CkluZGV4OiBjb250cmliL3Bm L3BmY3RsL3BmY3RsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2hvbWUvZXJpL3JlcG8vY29udHJp Yi9wZi9wZmN0bC9wZmN0bC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEuMS4xCmRpZmYgLXUg LXIxLjEuMS4xIHBmY3RsLmgKLS0tIGNvbnRyaWIvcGYvcGZjdGwvcGZjdGwuaAkyMSBPY3QgMjAw NyAxMzo1MzoxNSAtMDAwMAkxLjEuMS4xCisrKyBjb250cmliL3BmL3BmY3RsL3BmY3RsLmgJMjEg T2N0IDIwMDcgMTk6MDM6NDkgLTAwMDAKQEAgLTg1LDYgKzg1LDcgQEAKIGludAkgcGZjdGxfY29t bWFuZF90YWJsZXMoaW50LCBjaGFyICpbXSwgY2hhciAqLCBjb25zdCBjaGFyICosIGNoYXIgKiwK IAkgICAgY29uc3QgY2hhciAqLCBpbnQpOwogaW50CSBwZmN0bF9zaG93X2FsdHEoaW50LCBjb25z dCBjaGFyICosIGludCwgaW50KTsKK2ludAkgcGZjdGxfc2hvd19kdW1teW5ldChpbnQsIGludCk7 CiB2b2lkCSB3YXJuX25hbWVzcGFjZV9jb2xsaXNpb24oY29uc3QgY2hhciAqKTsKIGludAkgcGZj dGxfc2hvd19pZmFjZXMoY29uc3QgY2hhciAqLCBpbnQpOwogRklMRQkqcGZjdGxfZm9wZW4oY29u c3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpJbmRleDogY29udHJpYi9wZi9wZmN0bC9wZmN0bF9k bi5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KUkNTIGZpbGU6IGNvbnRyaWIvcGYvcGZjdGwvcGZjdGxfZG4uYwpkaWZm IC1OIGNvbnRyaWIvcGYvcGZjdGwvcGZjdGxfZG4uYwotLS0gL2Rldi9udWxsCTEgSmFuIDE5NzAg MDA6MDA6MDAgLTAwMDAKKysrIGNvbnRyaWIvcGYvcGZjdGwvcGZjdGxfZG4uYwkyMSBPY3QgMjAw NyAxOTowMzozMiAtMDAwMApAQCAtMCwwICsxLDM5OSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykg MjAwNyBFcm1hbCBMdedpCisgKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwMyBMdWlnaSBSaXp6bwor ICogQ29weXJpZ2h0IChjKSAxOTk2IEFsZXggTmFzaCwgUGF1bCBUcmFpbmEsIFBvdWwtSGVubmlu ZyBLYW1wCisgKiBDb3B5cmlnaHQgKGMpIDE5OTQgVWdlbiBKLlMuQW50c2lsZXZpY2gKKyAqCisg KiBJZGVhIGFuZCBncmFtbWFyIHBhcnRpYWxseSBsZWZ0IGZyb206CisgKiBDb3B5cmlnaHQgKGMp IDE5OTMgRGFuaWVsIEJvdWxldAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291 cmNlIGZvcm1zLCB3aXRoIGFuZCB3aXRob3V0IG1vZGlmaWNhdGlvbiwKKyAqIGFyZSBwZXJtaXR0 ZWQgcHJvdmlkZWQgdGhhdCB0aGlzIGVudGlyZSBjb21tZW50IGFwcGVhcnMgaW50YWN0LgorICoK KyAqIFJlZGlzdHJpYnV0aW9uIGluIGJpbmFyeSBmb3JtIG1heSBvY2N1ciB3aXRob3V0IGFueSBy ZXN0cmljdGlvbnMuCisgKiBPYnZpb3VzbHksIGl0IHdvdWxkIGJlIG5pY2UgaWYgeW91IGdhdmUg Y3JlZGl0IHdoZXJlIGNyZWRpdCBpcyBkdWUKKyAqIGJ1dCByZXF1aXJpbmcgaXQgd291bGQgYmUg dG9vIG9uZXJvdXMuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBgYEFTIElTJycg d2l0aG91dCBhbnkgd2FycmFudGllcyBvZiBhbnkga2luZC4KKyAqCisgKiBORVcgY29tbWFuZCBs aW5lIGludGVyZmFjZSBmb3IgSVAgZmlyZXdhbGwgZmFjaWxpdHkKKyAqCisgKi8KKworLyoKKyAq IE1vc3Qgb2YgdGhpcyBpcyBkZXJpdmVkIGZyb20gaXBmdyg4KSBjb2RlLgorICovCisKKyNpbmNs dWRlIDxzeXMvY2RlZnMuaD4KKworI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5 cy9pb2N0bC5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMu aD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisKKyNp bmNsdWRlIDxuZXQvaWYuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8bmV0 L3BmdmFyLmg+CisKKyNpbmNsdWRlIDxlcnIuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1 ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2lu Y2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5o PgorI2luY2x1ZGUgPG5ldGRiLmg+CisKKyNpbmNsdWRlIDxuZXRpbmV0L2lwX2Z3Lmg+CisjaW5j bHVkZSA8bmV0aW5ldC9pcF9kdW1teW5ldC5oPgorCisjaW5jbHVkZSAicGZjdGxfcGFyc2VyLmgi CisjaW5jbHVkZSAicGZjdGwuaCIKKworc3RhdGljIGludCBkb19zb3J0LAorCSAgIHZlcmJvc2U7 CisKK3N0YXRpYyBpbnQgc29ydF9xKGNvbnN0IHZvaWQgKiwgY29uc3Qgdm9pZCAqKTsKK3N0YXRp YyB2b2lkCitsaXN0X3F1ZXVlcyhzdHJ1Y3QgZG5fZmxvd19zZXQgKiwgc3RydWN0IGRuX2Zsb3df cXVldWUgKik7CitzdGF0aWMgdm9pZAorcHJpbnRfZmxvd3NldF9wYXJtcyhzdHJ1Y3QgZG5fZmxv d19zZXQgKiwgY2hhciAqKTsKK3N0YXRpYyB2b2lkCitsaXN0X3BpcGVzKHZvaWQgKiwgdWludCAp OworCitzdGF0aWMgaW50Citzb3J0X3EoY29uc3Qgdm9pZCAqcGEsIGNvbnN0IHZvaWQgKnBiKQor eworICAgICAgICBpbnQgcmV2ID0gKDApOworICAgICAgICBpbnQgZmllbGQgPSByZXYgPyAtZG9f c29ydCA6IGRvX3NvcnQ7CisgICAgICAgIGxvbmcgbG9uZyByZXMgPSAwOworICAgICAgICBjb25z dCBzdHJ1Y3QgZG5fZmxvd19xdWV1ZSAqYSA9IHBhOworICAgICAgICBjb25zdCBzdHJ1Y3QgZG5f Zmxvd19xdWV1ZSAqYiA9IHBiOworCisgICAgICAgIHN3aXRjaCAoZmllbGQpIHsKKyAgICAgICAg Y2FzZSAxOiAvKiBwa3RzICovCisgICAgICAgICAgICAgICAgcmVzID0gYS0+bGVuIC0gYi0+bGVu OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDI6IC8qIGJ5dGVzICovCisg ICAgICAgICAgICAgICAgcmVzID0gYS0+bGVuX2J5dGVzIC0gYi0+bGVuX2J5dGVzOworICAgICAg ICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgMzogLyogdG90IHBrdHMgKi8KKyAgICAg ICAgICAgICAgICByZXMgPSBhLT50b3RfcGt0cyAtIGItPnRvdF9wa3RzOworICAgICAgICAgICAg ICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgNDogLyogdG90IGJ5dGVzICovCisgICAgICAgICAg ICAgICAgcmVzID0gYS0+dG90X2J5dGVzIC0gYi0+dG90X2J5dGVzOworICAgICAgICAgICAgICAg IGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChyZXMgPCAwKQorICAgICAgICAgICAgICAg IHJlcyA9IC0xOworICAgICAgICBpZiAocmVzID4gMCkKKyAgICAgICAgICAgICAgICByZXMgPSAx OworICAgICAgICByZXR1cm4gKGludCkocmV2ID8gcmVzIDogLXJlcyk7Cit9CisKK3N0YXRpYyB2 b2lkCitsaXN0X3F1ZXVlcyhzdHJ1Y3QgZG5fZmxvd19zZXQgKmZzLCBzdHJ1Y3QgZG5fZmxvd19x dWV1ZSAqcSkKK3sKKyAgICAgICAgaW50IGw7CisgICAgICAgIGludCBpbmRleF9wcmludGVkLCBp bmRleGVzID0gMDsKKyAgICAgICAgY2hhciBidWZmWzI1NV07CisgICAgICAgIHN0cnVjdCBwcm90 b2VudCAqcGU7CisKKyAgICAgICAgaWYgKGZzLT5ycV9lbGVtZW50cyA9PSAwKQorICAgICAgICAg ICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAoZG9fc29ydCAhPSAwKQorICAgICAgICAgICAg ICAgIGhlYXBzb3J0KHEsIGZzLT5ycV9lbGVtZW50cywgc2l6ZW9mICpxLCBzb3J0X3EpOworCisg ICAgICAgIC8qIFByaW50IElQdjQgZmxvd3MgKi8KKyAgICAgICAgaW5kZXhfcHJpbnRlZCA9IDA7 CisgICAgICAgIGZvciAobCA9IDA7IGwgPCBmcy0+cnFfZWxlbWVudHM7IGwrKykgeworICAgICAg ICAgICAgICAgIHN0cnVjdCBpbl9hZGRyIGluYTsKKworICAgICAgICAgICAgICAgIC8qIFhYWDog U2hvdWxkIGNoZWNrIGZvciBJUHY0IGZsb3dzICovCisgICAgICAgICAgICAgICAgaWYgKElTX0lQ Nl9GTE9XX0lEKCYocVtsXS5pZCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7 CisKKyAgICAgICAgICAgICAgICBpZiAoIWluZGV4X3ByaW50ZWQpIHsKKyAgICAgICAgICAgICAg ICAgICAgICAgIGluZGV4X3ByaW50ZWQgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgaWYg KGluZGV4ZXMgPiAwKSAgICAgICAgLyogY3VycmVudGx5IGEgbm8tb3AgKi8KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJcbiIpOworICAgICAgICAgICAgICAgICAgICAg ICAgaW5kZXhlcysrOworICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIgICAgIgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJtYXNrOiAweCUwMnggMHglMDh4LzB4JTA0eCAtPiAw eCUwOHgvMHglMDR4XG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZzLT5mbG93X21h c2sucHJvdG8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnMtPmZsb3dfbWFzay5zcmNf aXAsIGZzLT5mbG93X21hc2suc3JjX3BvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZnMtPmZsb3dfbWFzay5kc3RfaXAsIGZzLT5mbG93X21hc2suZHN0X3BvcnQpOworCisgICAgICAg ICAgICAgICAgICAgICAgICBwcmludGYoIkJLVCBQcm90IF9fX1NvdXJjZSBJUC9wb3J0X19fXyAi CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl9fX19EZXN0LiBJUC9wb3J0X19fXyAiCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRvdF9wa3QvYnl0ZXMgUGt0L0J5dGUgRHJwXG4i KTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBwcmludGYoIiUzZCAiLCBx W2xdLmhhc2hfc2xvdCk7CisgICAgICAgICAgICAgICAgcGUgPSBnZXRwcm90b2J5bnVtYmVyKHFb bF0uaWQucHJvdG8pOworICAgICAgICAgICAgICAgIGlmIChwZSkKKyAgICAgICAgICAgICAgICAg ICAgICAgIHByaW50ZigiJS00cyAiLCBwZS0+cF9uYW1lKTsKKyAgICAgICAgICAgICAgICBlbHNl CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIiU0dSAiLCBxW2xdLmlkLnByb3RvKTsK KyAgICAgICAgICAgICAgICBpbmEuc19hZGRyID0gaHRvbmwocVtsXS5pZC5zcmNfaXApOworICAg ICAgICAgICAgICAgIHByaW50ZigiJTE1cy8lLTVkICIsCisgICAgICAgICAgICAgICAgICAgIGlu ZXRfbnRvYShpbmEpLCBxW2xdLmlkLnNyY19wb3J0KTsKKyAgICAgICAgICAgICAgICBpbmEuc19h ZGRyID0gaHRvbmwocVtsXS5pZC5kc3RfaXApOworICAgICAgICAgICAgICAgIHByaW50ZigiJTE1 cy8lLTVkICIsCisgICAgICAgICAgICAgICAgICAgIGluZXRfbnRvYShpbmEpLCBxW2xdLmlkLmRz dF9wb3J0KTsKKyAgICAgICAgICAgICAgICBwcmludGYoIiU0cXUgJThxdSAlMnUgJTR1ICUzdVxu IiwKKyAgICAgICAgICAgICAgICAgICAgcVtsXS50b3RfcGt0cywgcVtsXS50b3RfYnl0ZXMsCisg ICAgICAgICAgICAgICAgICAgIHFbbF0ubGVuLCBxW2xdLmxlbl9ieXRlcywgcVtsXS5kcm9wcyk7 CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgICAgICBw cmludGYoIiAgIFMgJTIwcWQgIEYgJTIwcWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcVtsXS5TLCBxW2xdLkYpOworICAgICAgICB9CisKKyAgICAgICAgLyogUHJpbnQgSVB2NiBm bG93cyAqLworICAgICAgICBpbmRleF9wcmludGVkID0gMDsKKyAgICAgICAgZm9yIChsID0gMDsg bCA8IGZzLT5ycV9lbGVtZW50czsgbCsrKSB7CisgICAgICAgICAgICAgICAgaWYgKCFJU19JUDZf RkxPV19JRCgmKHFbbF0uaWQpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor CisgICAgICAgICAgICAgICAgaWYgKCFpbmRleF9wcmludGVkKSB7CisgICAgICAgICAgICAgICAg ICAgICAgICBpbmRleF9wcmludGVkID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChp bmRleGVzID4gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJcbiIp OworICAgICAgICAgICAgICAgICAgICAgICBpbmRleGVzKys7CisgICAgICAgICAgICAgICAgICAg ICAgICBwcmludGYoIlxuICAgICAgICBtYXNrOiBwcm90bzogMHglMDJ4LCBmbG93X2lkOiAweCUw OHgsICAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZzLT5mbG93X21hc2sucHJvdG8s IGZzLT5mbG93X21hc2suZmxvd19pZDYpOworICAgICAgICAgICAgICAgICAgICAgICAgaW5ldF9u dG9wKEFGX0lORVQ2LCAmKGZzLT5mbG93X21hc2suc3JjX2lwNiksCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgYnVmZiwgc2l6ZW9mKGJ1ZmYpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg IHByaW50ZigiJXMvMHglMDR4IC0+ICIsIGJ1ZmYsIGZzLT5mbG93X21hc2suc3JjX3BvcnQpOwor ICAgICAgICAgICAgICAgICAgICAgICAgaW5ldF9udG9wKCBBRl9JTkVUNiwgJihmcy0+Zmxvd19t YXNrLmRzdF9pcDYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmYsIHNpemVvZihi dWZmKSApOworICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIlcy8weCUwNHhcbiIsIGJ1 ZmYsIGZzLT5mbG93X21hc2suZHN0X3BvcnQpOworCisgICAgICAgICAgICAgICAgICAgICAgICBw cmludGYoIkJLVCBfX19Qcm90X19fIF9mbG93LWlkXyAiCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIl9fX19fX19fX19fX19fU291cmNlIElQdjYvcG9ydF9fX19fX19fX19fX19fXyAiCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIl9fX19fX19fX19fX19fX0Rlc3QuIElQdjYvcG9y dF9fX19fX19fX19fX19fXyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRvdF9wa3Qv Ynl0ZXMgUGt0L0J5dGUgRHJwXG4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg ICAgcHJpbnRmKCIlM2QgIiwgcVtsXS5oYXNoX3Nsb3QpOworICAgICAgICAgICAgICAgIHBlID0g Z2V0cHJvdG9ieW51bWJlcihxW2xdLmlkLnByb3RvKTsKKyAgICAgICAgICAgICAgICBpZiAocGUg IT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiJTlzICIsIHBlLT5wX25h bWUpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50 ZigiJTl1ICIsIHFbbF0uaWQucHJvdG8pOworICAgICAgICAgICAgICAgIHByaW50ZigiJTdkICAl MzlzLyUtNWQgIiwgcVtsXS5pZC5mbG93X2lkNiwKKyAgICAgICAgICAgICAgICAgICAgaW5ldF9u dG9wKEFGX0lORVQ2LCAmKHFbbF0uaWQuc3JjX2lwNiksIGJ1ZmYsIHNpemVvZihidWZmKSksCisg ICAgICAgICAgICAgICAgICAgIHFbbF0uaWQuc3JjX3BvcnQpOworICAgICAgICAgICAgICAgIHBy aW50ZigiICUzOXMvJS01ZCAiLAorICAgICAgICAgICAgICAgICAgICBpbmV0X250b3AoQUZfSU5F VDYsICYocVtsXS5pZC5kc3RfaXA2KSwgYnVmZiwgc2l6ZW9mKGJ1ZmYpKSwKKyAgICAgICAgICAg ICAgICAgICAgcVtsXS5pZC5kc3RfcG9ydCk7CisgICAgICAgICAgICAgICAgcHJpbnRmKCIgJTRx dSAlOHF1ICUydSAlNHUgJTN1XG4iLAorICAgICAgICAgICAgICAgICAgICBxW2xdLnRvdF9wa3Rz LCBxW2xdLnRvdF9ieXRlcywKKyAgICAgICAgICAgICAgICAgICAgcVtsXS5sZW4sIHFbbF0ubGVu X2J5dGVzLCBxW2xdLmRyb3BzKTsKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAg ICAgICAgICAgICAgICAgICAgIHByaW50ZigiICAgUyAlMjBxZCAgRiAlMjBxZFxuIiwgcVtsXS5T LCBxW2xdLkYpOworICAgICAgICB9Cit9CisKK3N0YXRpYyB2b2lkCitwcmludF9mbG93c2V0X3Bh cm1zKHN0cnVjdCBkbl9mbG93X3NldCAqZnMsIGNoYXIgKnByZWZpeCkKK3sKKyAgICAgICAgaW50 IGw7CisgICAgICAgIGNoYXIgcXNbMzBdOworICAgICAgICBjaGFyIHBsclszMF07CisgICAgICAg IGNoYXIgcmVkWzkwXTsgICAvKiBEaXNwbGF5IFJFRCBwYXJhbWV0ZXJzICovCisKKyAgICAgICAg bCA9IGZzLT5xc2l6ZTsKKyAgICAgICAgaWYgKGZzLT5mbGFnc19mcyAmIEROX1FTSVpFX0lTX0JZ VEVTKSB7CisgICAgICAgICAgICAgICAgaWYgKGwgPj0gODE5MikKKyAgICAgICAgICAgICAgICAg ICAgICAgIHNwcmludGYocXMsICIlZCBLQiIsIGwgLyAxMDI0KTsKKyAgICAgICAgICAgICAgICBl bHNlCisgICAgICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKHFzLCAiJWQgQiIsIGwpOworICAg ICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBzcHJpbnRmKHFzLCAiJTNkIHNsLiIsIGwpOwor ICAgICAgICBpZiAoZnMtPnBscikKKyAgICAgICAgICAgICAgICBzcHJpbnRmKHBsciwgInBsciAl ZiIsIDEuMCAqIGZzLT5wbHIgLyAoZG91YmxlKSgweDdmZmZmZmZmKSk7CisgICAgICAgIGVsc2UK KyAgICAgICAgICAgICAgICBwbHJbMF0gPSAnXDAnOworICAgICAgICBpZiAoZnMtPmZsYWdzX2Zz ICYgRE5fSVNfUkVEKSAgIC8qIFJFRCBwYXJhbWV0ZXJzICovCisgICAgICAgICAgICAgICAgc3By aW50ZihyZWQsCisgICAgICAgICAgICAgICAgICAgICJcblx0ICAlY1JFRCB3X3EgJWYgbWluX3Ro ICVkIG1heF90aCAlZCBtYXhfcCAlZiIsCisgICAgICAgICAgICAgICAgICAgIChmcy0+ZmxhZ3Nf ZnMgJiBETl9JU19HRU5UTEVfUkVEKSA/ICdHJyA6ICcgJywKKyAgICAgICAgICAgICAgICAgICAg MS4wICogZnMtPndfcSAvIChkb3VibGUpKDEgPDwgU0NBTEVfUkVEKSwKKyAgICAgICAgICAgICAg ICAgICAgU0NBTEVfVkFMKGZzLT5taW5fdGgpLAorICAgICAgICAgICAgICAgICAgICBTQ0FMRV9W QUwoZnMtPm1heF90aCksCisgICAgICAgICAgICAgICAgICAgIDEuMCAqIGZzLT5tYXhfcCAvIChk b3VibGUpKDEgPDwgU0NBTEVfUkVEKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBz cHJpbnRmKHJlZCwgImRyb3B0YWlsIik7CisKKyAgICAgICAgcHJpbnRmKCIlcyAlcyVzICVkIHF1 ZXVlcyAoJWQgYnVja2V0cykgJXNcbiIsCisgICAgICAgICAgICBwcmVmaXgsIHFzLCBwbHIsIGZz LT5ycV9lbGVtZW50cywgZnMtPnJxX3NpemUsIHJlZCk7Cit9CisKKworc3RhdGljIHZvaWQKK2xp c3RfcGlwZXModm9pZCAqZGF0YSwgdWludCBuYnl0ZXMpCit7CisgICAgICAgIHZvaWQgKm5leHQg PSBkYXRhOworICAgICAgICBzdHJ1Y3QgZG5fcGlwZSAqcCA9IChzdHJ1Y3QgZG5fcGlwZSAqKSBk YXRhOworICAgICAgICBzdHJ1Y3QgZG5fZmxvd19zZXQgKmZzOworICAgICAgICBzdHJ1Y3QgZG5f Zmxvd19xdWV1ZSAqcTsKKyAgICAgICAgaW50IGw7CisKKyAgICAgICAgZm9yICg7IG5ieXRlcyA+ PSBzaXplb2YgKnA7IHAgPSAoc3RydWN0IGRuX3BpcGUgKiluZXh0KSB7CisgICAgICAgICAgICAg ICAgZG91YmxlIGIgPSBwLT5iYW5kd2lkdGg7CisgICAgICAgICAgICAgICAgY2hhciBidWZbMzBd OworICAgICAgICAgICAgICAgIGNoYXIgcHJlZml4WzgwXTsKKworICAgICAgICAgICAgICAgIGlm IChTTElTVF9ORVhUKHAsIG5leHQpICE9IChzdHJ1Y3QgZG5fcGlwZSAqKUROX0lTX1BJUEUpCisg ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgIC8qIGRvbmUgd2l0aCBwaXBlcywgbm93IHF1 ZXVlcyAqLworCisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBjb21wdXRl IGxlbmd0aCwgYXMgcGlwZSBoYXZlIHZhcmlhYmxlIHNpemUKKyAgICAgICAgICAgICAgICAgKi8K KyAgICAgICAgICAgICAgICBsID0gc2l6ZW9mKCpwKSArIHAtPmZzLnJxX2VsZW1lbnRzICogc2l6 ZW9mKCpxKTsKKyAgICAgICAgICAgICAgICBuZXh0ID0gKGNoYXIgKilwICsgbDsKKyAgICAgICAg ICAgICAgICBuYnl0ZXMgLT0gbDsKKworICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAg ICAgICogUHJpbnQgcmF0ZSAob3IgY2xvY2tpbmcgaW50ZXJmYWNlKQorICAgICAgICAgICAgICAg ICAqLworICAgICAgICAgICAgICAgIGlmIChwLT5pZl9uYW1lWzBdICE9ICdcMCcpCisgICAgICAg ICAgICAgICAgICAgICAgIHNwcmludGYoYnVmLCAiJXMiLCBwLT5pZl9uYW1lKTsKKyAgICAgICAg ICAgICAgICBlbHNlIGlmIChiID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICBzcHJpbnRm KGJ1ZiwgInVubGltaXRlZCIpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGIgPj0gMTAwMDAw MCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNwcmludGYoYnVmLCAiJTcuM2YgTWJpdC9zIiwg Yi8xMDAwMDAwKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChiID49IDEwMDApCisgICAgICAg ICAgICAgICAgICAgICAgICBzcHJpbnRmKGJ1ZiwgIiU3LjNmIEtiaXQvcyIsIGIvMTAwMCk7Cisg ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgc3ByaW50ZihidWYs ICIlNy4zZiBiaXQvcyAiLCBiKTsKKworICAgICAgICAgICAgICAgIHNwcmludGYocHJlZml4LCAi JTA1ZDogJXMgJTRkIG1zICIsCisgICAgICAgICAgICAgICAgICAgIHAtPnBpcGVfbnIsIGJ1Ziwg cC0+ZGVsYXkpOworICAgICAgICAgICAgICAgIHByaW50X2Zsb3dzZXRfcGFybXMoJihwLT5mcyks IHByZWZpeCk7CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAg ICAgICAgICBwcmludGYoIiAgIFYgJTIwcWRcbiIsIHAtPlYgPj4gTVlfTSk7CisKKyAgICAgICAg ICAgICAgICBxID0gKHN0cnVjdCBkbl9mbG93X3F1ZXVlICopKHArMSk7CisgICAgICAgICAgICAg ICAgbGlzdF9xdWV1ZXMoJihwLT5mcyksIHEpOworICAgICAgICB9CisgICAgICAgIGZvciAoZnMg PSBuZXh0OyBuYnl0ZXMgPj0gc2l6ZW9mICpmczsgZnMgPSBuZXh0KSB7CisgICAgICAgICAgICAg ICAgY2hhciBwcmVmaXhbODBdOworCisgICAgICAgICAgICAgICAgaWYgKFNMSVNUX05FWFQoZnMs IG5leHQpICE9IChzdHJ1Y3QgZG5fZmxvd19zZXQgKilETl9JU19RVUVVRSkKKyAgICAgICAgICAg ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGwgPSBzaXplb2YoKmZzKSArIGZz LT5ycV9lbGVtZW50cyAqIHNpemVvZigqcSk7CisgICAgICAgICAgICAgICAgbmV4dCA9IChjaGFy ICopZnMgKyBsOworICAgICAgICAgICAgICAgIG5ieXRlcyAtPSBsOworI2lmIDAKKyAgICAgICAg ICAgICAgICBpZiAocnVsZW51bSAhPSAwICYmICgocnVsZW51bSAhPSBmcy0+ZnNfbnIgJiYgZG9f cGlwZSA9PSAyKSB8fAorICAgICAgICAgICAgICAgICAgICAocnVsZW51bSAhPSBmcy0+cGFyZW50 X25yICYmIGRvX3BpcGUgPT0gMSkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51 ZTsKKyAgICAgICAgICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgICAgICAgICBxID0gKHN0cnVj dCBkbl9mbG93X3F1ZXVlICopKGZzKzEpOworICAgICAgICAgICAgICAgIHNwcmludGYocHJlZml4 LCAicSUwNWQ6IHdlaWdodCAlZCBwaXBlICVkICIsCisgICAgICAgICAgICAgICAgICAgIGZzLT5m c19uciwgZnMtPndlaWdodCwgZnMtPnBhcmVudF9ucik7CisgICAgICAgICAgICAgICAgcHJpbnRf Zmxvd3NldF9wYXJtcyhmcywgcHJlZml4KTsKKyAgICAgICAgICAgICAgICBsaXN0X3F1ZXVlcyhm cywgcSk7CisgICAgICAgIH0KK30KKwordm9pZAorcHJpbnRfZHVtbXluZXQoc3RydWN0IGRuX3Bp cGUgKnApCit7CisJY2hhciBidWZmWzI1NV07CisKKwlpZiAocC0+cGlwZV9uciAhPSAwKSB7IC8q IFRoaXMgaXMgYSBwaXBlICovCisJCXByaW50ZigiZG5waXBlICVkIiwgcC0+cGlwZV9ucik7CisJ CWlmIChwLT5iYW5kd2lkdGgpIAorCQkJcHJpbnRmKCIgYmFuZHdpZHRoICVkTWIiLCBwLT5iYW5k d2lkdGgvMTAwMDAwMCk7CisJICAgICAgICBlbHNlIGlmIChwLT5iYW5kd2lkdGggPj0gMTAwMCkK KyAgICAgICAgIAkgICAgICAgIHByaW50ZigiIGJhbmR3aWR0aCAlZEtiIiwgcC0+YmFuZHdpZHRo LzEwMDApOworCSAgICAgICAgZWxzZSAKKyAgICAgICAgICAgICAgICAgICAgICAgCXByaW50Zigi IGJhbmR3aWR0aCAlZGIgIiwgcC0+YmFuZHdpZHRoKTsKKwkJaWYgKHAtPmRlbGF5ID4gMCkKKwkJ CXByaW50ZigiIGRlbGF5ICVkIiwgcC0+ZGVsYXkpOworCX0gZWxzZSB7CisJCXByaW50ZigiZG5x dWV1ZSAlZCBkbnBpcGUgJWQiLCBwLT5mcy5mc19uciwgcC0+ZnMucGFyZW50X25yKTsKKwkJaWYg KHAtPmZzLndlaWdodCkKKwkJCXByaW50ZigiIHdlaWdodCAlZCIsIHAtPmZzLndlaWdodCk7CisJ fQorCisJaWYgKHAtPmZzLnJxX3NpemUgPiAxNSkKKwkJcHJpbnRmKCIgYnVja2V0cyAlZCIsIHAt PmZzLnJxX3NpemUpOworCWlmIChwLT5mcy5mbGFnc19mcyAmIEROX1FTSVpFX0lTX0JZVEVTKSB7 CisgICAgICAgICAgICAgICAgaWYgKHAtPmZzLnFzaXplID49IDgxOTIpCisgICAgICAgICAgICAg ICAgICAgICAgICBwcmludGYoIiBxdWV1ZSAlZEtCIiwgIHAtPmZzLnFzaXplIC8gMTAyNCk7Cisg ICAgICAgICAgICAgICAgZWxzZSBpZiAocC0+ZnMucXNpemUgPiAwKQorICAgICAgICAgICAgICAg ICAgICAgICAgcHJpbnRmKCIgcXVldWUgJWRCIiwgcC0+ZnMucXNpemUpOworICAgICAgICB9IGVs c2UKKwkJaWYgKHAtPmZzLnFzaXplID4gMCkKKwkgICAgICAgICAgICAgICAgcHJpbnRmKCIgcXVl dWUgJTNkIiwgcC0+ZnMucXNpemUpOworICAgICAgICBpZiAocC0+ZnMucGxyID4gMCkKKyAgICAg ICAgICAgICAgICBwcmludGYoIiBwbHIgJWYiLCAxLjAgKiBwLT5mcy5wbHIgLyAoZG91YmxlKSgw eDdmZmZmZmZmKSk7CisKKwlpZiAocC0+ZnMuZmxvd19tYXNrLnByb3RvICYmIHAtPmZzLmZsb3df bWFzay5kc3RfaXAgJiYgCisJCXAtPmZzLmZsb3dfbWFzay5zcmNfaXAgJiYgcC0+ZnMuZmxvd19t YXNrLmRzdF9wb3J0ICYmIAorCQlwLT5mcy5mbG93X21hc2suc3JjX3BvcnQgJiYKKwkJcC0+ZnMu Zmxvd19tYXNrLmZsb3dfaWQ2KQorCQlwcmludGYoIiBtYXNrIGFsbCIpOworCWVsc2UgIGlmIChw LT5mcy5mbG93X21hc2sucHJvdG8gfHwgcC0+ZnMuZmxvd19tYXNrLmRzdF9pcCB8fCAKKwkJcC0+ ZnMuZmxvd19tYXNrLnNyY19pcCB8fCBwLT5mcy5mbG93X21hc2suZHN0X3BvcnQgfHwgCisJCXAt PmZzLmZsb3dfbWFzay5zcmNfcG9ydCB8fAorCQlwLT5mcy5mbG93X21hc2suZmxvd19pZDYpIHsK KwkJcHJpbnRmKCJcblx0IG1hc2s6ICIpOworCWlmIChwLT5mcy5mbG93X21hc2sucHJvdG8pCisJ CXByaW50ZigiIHByb3RvIDB4JTAyeCIsIHAtPmZzLmZsb3dfbWFzay5wcm90byk7CisJaWYgKHAt PmZzLmZsb3dfbWFzay5zcmNfaXApCisJCXByaW50ZigiIHNyYy1pcCAweCUwOHgiLCBwLT5mcy5m bG93X21hc2suc3JjX2lwKTsKKwlpZiAocC0+ZnMuZmxvd19tYXNrLnNyY19wb3J0KQorCQlwcmlu dGYoIiBzcmMtcG9ydCAweCUwNHgiLCBwLT5mcy5mbG93X21hc2suc3JjX3BvcnQpOworCWlmIChw LT5mcy5mbG93X21hc2suZHN0X2lwKQorCQlwcmludGYoIiBkc3QtaXAgMHglMDh4IiwgcC0+ZnMu Zmxvd19tYXNrLmRzdF9pcCk7CisJaWYgKHAtPmZzLmZsb3dfbWFzay5kc3RfcG9ydCkKKwkJcHJp bnRmKCIgZHN0LXBvcnQgMHglMDR4IiwgcC0+ZnMuZmxvd19tYXNrLmRzdF9wb3J0KTsKKwlpZiAo cC0+ZnMuZmxvd19tYXNrLmZsb3dfaWQ2KQorCQlwcmludGYoIiBkc3QtcG9ydCAweCUwOHgiLCBw LT5mcy5mbG93X21hc2suZmxvd19pZDYpOworCX0KKwlpZiAocC0+ZnMuZmxhZ3NfZnMgJiBETl9O T0VSUk9SKQorCQlwcmludGYoIiBub2Vycm9yIik7CisKKwlwcmludGYoIlxuIik7CQorfQorCitp bnQKK3BmY3RsX3Nob3dfZHVtbXluZXQoaW50IGRuc29jaywgaW50IG9wdHMpCit7CisgICAgICAg IHZvaWQgKmRhdGEgPSBOVUxMOworICAgICAgICBpbnQgbmJ5dGVzLCBuYWxsb2MgPSAxMDI0Owor CisJaWYgKG9wdHMgJiBQRl9PUFRfVkVSQk9TRSkKKwkJdmVyYm9zZSA9IDE7CisJZWxzZSAKKwkJ dmVyYm9zZSA9IDA7CisJCisJbmJ5dGVzID0gbmFsbG9jOworICAgICAgICB3aGlsZSAobmJ5dGVz ID49IG5hbGxvYykgeworICAgICAgICAgICAgICAgIG5hbGxvYyA9IG5hbGxvYyAqIDIgKyAyMDA7 CisgICAgICAgICAgICAgICAgbmJ5dGVzID0gbmFsbG9jOworICAgICAgICAgICAgICAgIGlmICgo ZGF0YSA9IHJlYWxsb2MoZGF0YSwgbmJ5dGVzKSkgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAg ICAgICAgIGVycigxLCAicmVhbGxvYyIpOworICAgICAgICAgICAgICAgIGlmIChnZXRzb2Nrb3B0 KGRuc29jaywgSVBQUk9UT19JUCwgSVBfRFVNTVlORVRfR0VULCBkYXRhLAorICAgICAgICAgICAg ICAgICAgICAgICAgKHNvY2tsZW5fdCAqKSZuYnl0ZXMpIDwgMCkgeworICAgICAgICAgICAgICAg ICAgICAgICAgZnJlZShkYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycigxLCAiZ2V0 c29ja29wdChJUF9EVU1NWU5FVF9HRVQpIik7CisJCX0KKyAgICAgICAgfQorCQorICAgICAgICBs aXN0X3BpcGVzKGRhdGEsIG5ieXRlcyk7CisJCisJcmV0dXJuICgwKTsKKworfQpJbmRleDogY29u dHJpYi9wZi9wZmN0bC9wZmN0bF9wYXJzZXIuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9l cmkvcmVwby9jb250cmliL3BmL3BmY3RsL3BmY3RsX3BhcnNlci5jLHYKcmV0cmlldmluZyByZXZp c2lvbiAxLjEuMS4xCmRpZmYgLXUgLXIxLjEuMS4xIHBmY3RsX3BhcnNlci5jCi0tLSBjb250cmli L3BmL3BmY3RsL3BmY3RsX3BhcnNlci5jCTIxIE9jdCAyMDA3IDEzOjUzOjE1IC0wMDAwCTEuMS4x LjEKKysrIGNvbnRyaWIvcGYvcGZjdGwvcGZjdGxfcGFyc2VyLmMJMjEgT2N0IDIwMDcgMTk6MDM6 NDkgLTAwMDAKQEAgLTQ4LDYgKzQ4LDkgQEAKICNpbmNsdWRlIDxuZXQvcGZ2YXIuaD4KICNpbmNs dWRlIDxhcnBhL2luZXQuaD4KIAorI2luY2x1ZGUgPG5ldGluZXQvaXBfZncuaD4KKyNpbmNsdWRl IDxuZXRpbmV0L2lwX2R1bW15bmV0Lmg+CisKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUg PHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgpAQCAtOTgxLDYgKzk4NCwxMiBAQAogCX0K IAlpZiAoci0+bGFiZWxbMF0pCiAJCXByaW50ZigiIGxhYmVsIFwiJXNcIiIsIHItPmxhYmVsKTsK KwlpZiAoci0+ZG5waXBlICYmIHItPnBkbnBpcGUpCisJICAgICAgIHByaW50ZigiIGRucXVldWUo JWQsICVkKSIsIHItPmRucGlwZSwgci0+cGRucGlwZSk7CisJZWxzZSBpZiAoci0+ZG5waXBlKQkK KwkJcHJpbnRmKCIgJXMgJWQiLCAKKwkJCXItPmRudHlwZSA9PSBETl9JU19QSVBFID8gImRucGlw ZSIgOiAiZG5xdWV1ZSIsCisJCQlyLT5kbnBpcGUpOwogCWlmIChyLT5xbmFtZVswXSAmJiByLT5w cW5hbWVbMF0pCiAJCXByaW50ZigiIHF1ZXVlKCVzLCAlcykiLCByLT5xbmFtZSwgci0+cHFuYW1l KTsKIAllbHNlIGlmIChyLT5xbmFtZVswXSkKSW5kZXg6IGNvbnRyaWIvcGYvcGZjdGwvcGZjdGxf cGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2hvbWUvZXJpL3JlcG8vY29udHJpYi9wZi9w ZmN0bC9wZmN0bF9wYXJzZXIuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xLjEuMQpkaWZmIC11 IC1yMS4xLjEuMSBwZmN0bF9wYXJzZXIuaAotLS0gY29udHJpYi9wZi9wZmN0bC9wZmN0bF9wYXJz ZXIuaAkyMSBPY3QgMjAwNyAxMzo1MzoxNSAtMDAwMAkxLjEuMS4xCisrKyBjb250cmliL3BmL3Bm Y3RsL3BmY3RsX3BhcnNlci5oCTIxIE9jdCAyMDA3IDE5OjAzOjQ5IC0wMDAwCkBAIC02Nyw2ICs2 Nyw3IEBACiB9CiAKIHN0cnVjdCBwZnJfYnVmZmVyOwkvKiBmb3J3YXJkIGRlZmluaXRpb24gKi8K K3N0cnVjdCBkbl9waXBlOwogCiAKIHN0cnVjdCBwZmN0bCB7CkBAIC0yMTcsNiArMjE4LDcgQEAK IAogaW50CXBmY3RsX2FkZF9ydWxlKHN0cnVjdCBwZmN0bCAqLCBzdHJ1Y3QgcGZfcnVsZSAqLCBj b25zdCBjaGFyICopOwogaW50CXBmY3RsX2FkZF9hbHRxKHN0cnVjdCBwZmN0bCAqLCBzdHJ1Y3Qg cGZfYWx0cSAqKTsKK2ludCAJcGZjdGxfYWRkX2R1bW15bmV0KHN0cnVjdCBwZmN0bCAqLCBzdHJ1 Y3QgZG5fcGlwZSAqKTsKIGludAlwZmN0bF9hZGRfcG9vbChzdHJ1Y3QgcGZjdGwgKiwgc3RydWN0 IHBmX3Bvb2wgKiwgc2FfZmFtaWx5X3QpOwogdm9pZAlwZmN0bF9tb3ZlX3Bvb2woc3RydWN0IHBm X3Bvb2wgKiwgc3RydWN0IHBmX3Bvb2wgKik7CiB2b2lkCXBmY3RsX2NsZWFyX3Bvb2woc3RydWN0 IHBmX3Bvb2wgKik7CkBAIC0yNDQsNiArMjQ2LDggQEAKIGludAlldmFsX3BmcXVldWUoc3RydWN0 IHBmY3RsICosIHN0cnVjdCBwZl9hbHRxICosIHN0cnVjdCBub2RlX3F1ZXVlX2J3ICosCiAJICAg IHN0cnVjdCBub2RlX3F1ZXVlX29wdCAqKTsKIAordm9pZAlwcmludF9kdW1teW5ldChzdHJ1Y3Qg ZG5fcGlwZSAqKTsKKwogdm9pZAkgcHJpbnRfYWx0cShjb25zdCBzdHJ1Y3QgcGZfYWx0cSAqLCB1 bnNpZ25lZCwgc3RydWN0IG5vZGVfcXVldWVfYncgKiwKIAkgICAgc3RydWN0IG5vZGVfcXVldWVf b3B0ICopOwogdm9pZAkgcHJpbnRfcXVldWUoY29uc3Qgc3RydWN0IHBmX2FsdHEgKiwgdW5zaWdu ZWQsIHN0cnVjdCBub2RlX3F1ZXVlX2J3ICosCkBAIC0yODYsNiArMjkwLDcgQEAKICNkZWZpbmUg UEZDVExfRkxBR19PUFRJT04JMHgwOAogI2RlZmluZSBQRkNUTF9GTEFHX0FMVFEJCTB4MTAKICNk ZWZpbmUgUEZDVExfRkxBR19UQUJMRQkweDIwCisjZGVmaW5lCVBGQ1RMX0ZMQUdfRFVNTVlORVQJ MHg0MAogCiBleHRlcm4gY29uc3Qgc3RydWN0IHBmX3RpbWVvdXQgcGZfdGltZW91dHNbXTsKIApJ bmRleDogc2Jpbi9wZmN0bC9NYWtlZmlsZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9lcmkv cmVwby9zYmluL3BmY3RsL01ha2VmaWxlLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEuMS4xCmRp ZmYgLXUgLXIxLjEuMS4xIE1ha2VmaWxlCi0tLSBzYmluL3BmY3RsL01ha2VmaWxlCTIxIE9jdCAy MDA3IDEzOjU0OjE2IC0wMDAwCTEuMS4xLjEKKysrIHNiaW4vcGZjdGwvTWFrZWZpbGUJMjEgT2N0 IDIwMDcgMTk6MDM6NDkgLTAwMDAKQEAgLTExLDYgKzExLDcgQEAKIFNSQ1MrPSBwZmN0bF9vc2Zw LmMgcGZjdGxfcmFkaXguYyBwZmN0bF90YWJsZS5jIHBmY3RsX3FzdGF0cy5jCiBTUkNTKz0gcGZj dGxfb3B0aW1pemUuYwogU1JDUys9IHBmX3J1bGVzZXQuYworU1JDUys9IHBmY3RsX2RuLmMKIAog Q0ZMQUdTKz0gLVdhbGwgLVdtaXNzaW5nLXByb3RvdHlwZXMgLVduby11bmluaXRpYWxpemVkCiBD RkxBR1MrPSAtV3N0cmljdC1wcm90b3R5cGVzIC1JJHsuQ1VSRElSfS8uLi8uLi9jb250cmliL3Bm L3BmY3RsCkluZGV4OiBzeXMvY29udHJpYi9wZi9uZXQvcGYuYwo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl OiAvaG9tZS9lcmkvcmVwby9zeXMvY29udHJpYi9wZi9uZXQvcGYuYyx2CnJldHJpZXZpbmcgcmV2 aXNpb24gMS4xLjEuMQpkaWZmIC11IC1yMS4xLjEuMSBwZi5jCi0tLSBzeXMvY29udHJpYi9wZi9u ZXQvcGYuYwkyMSBPY3QgMjAwNyAxMzo1NDo1NiAtMDAwMAkxLjEuMS4xCisrKyBzeXMvY29udHJp Yi9wZi9uZXQvcGYuYwkyMSBPY3QgMjAwNyAxOTowMzo0OSAtMDAwMApAQCAtNjcxOCw2ICs2NzE5 LDcgQEAKIAlpbnQJCQkgb2ZmLCBkaXJuZHgsIHBxaWQgPSAwOwogCiAjaWZkZWYgX19GcmVlQlNE X18KKwlzdHJ1Y3QgaXBfZndfYXJncwkgZG5mbG93OwogCVBGX0xPQ0soKTsKICNlbmRpZgogCWlm ICghcGZfc3RhdHVzLnJ1bm5pbmcpCkBAIC02NzQ0LDYgKzY3NDYsNyBAQAogCQlQRl9VTkxPQ0so KTsKIAkJcmV0dXJuIChQRl9QQVNTKTsKIAl9CisJCiAjZWxzZQogCWlmIChwZC5wZl9tdGFnLT5m bGFncyAmIFBGX1RBR19HRU5FUkFURUQpCiAJCXJldHVybiAoUEZfUEFTUyk7CkBAIC02ODI3LDYg KzY4MzAsMTMgQEAKIAkJc3RydWN0IHRjcGhkcgl0aDsKIAogCQlwZC5oZHIudGNwID0gJnRoOwor CisjaWZkZWYgX19GcmVlQlNEX18KKyAgICAgICAgICAgICAgICBkbmZsb3cuZl9pZC5mbGFncyA9 IHRoLnRoX2ZsYWdzOworICAgICAgICAgICAgICAgIGRuZmxvdy5mX2lkLmRzdF9wb3J0ID0gdGgu dGhfZHBvcnQ7CisgICAgICAgICAgICAgICAgZG5mbG93LmZfaWQuc3JjX3BvcnQgPSB0aC50aF9z cG9ydDsKKyNlbmRpZgorCiAJCWlmICghcGZfcHVsbF9oZHIobSwgb2ZmLCAmdGgsIHNpemVvZih0 aCksCiAJCSAgICAmYWN0aW9uLCAmcmVhc29uLCBBRl9JTkVUKSkgewogCQkJbG9nID0gYWN0aW9u ICE9IFBGX1BBU1M7CkBAIC02ODY4LDYgKzY4NzgsMTIgQEAKIAkJc3RydWN0IHVkcGhkcgl1aDsK IAogCQlwZC5oZHIudWRwID0gJnVoOworCisjaWZkZWYgX19GcmVlQlNEX18KKyAgICAgICAgICAg ICAgICBkbmZsb3cuZl9pZC5kc3RfcG9ydCA9IHVoLnVoX2Rwb3J0OworICAgICAgICAgICAgICAg IGRuZmxvdy5mX2lkLnNyY19wb3J0ID0gdWgudWhfc3BvcnQ7CisjZW5kaWYKKwogCQlpZiAoIXBm X3B1bGxfaGRyKG0sIG9mZiwgJnVoLCBzaXplb2YodWgpLAogCQkgICAgJmFjdGlvbiwgJnJlYXNv biwgQUZfSU5FVCkpIHsKIAkJCWxvZyA9IGFjdGlvbiAhPSBQRl9QQVNTOwpAQCAtNjkwOSw2ICs2 OTI1LDcgQEAKIAkJc3RydWN0IGljbXAJaWg7CiAKIAkJcGQuaGRyLmljbXAgPSAmaWg7CisKIAkJ aWYgKCFwZl9wdWxsX2hkcihtLCBvZmYsICZpaCwgSUNNUF9NSU5MRU4sCiAJCSAgICAmYWN0aW9u LCAmcmVhc29uLCBBRl9JTkVUKSkgewogCQkJbG9nID0gYWN0aW9uICE9IFBGX1BBU1M7CkBAIC03 MDgzLDYgKzcxMDAsMzMgQEAKIAkJcGZfcm91dGUobTAsIHIsIGRpciwgaWZwLCBzLCAmcGQpOwog CiAjaWZkZWYgX19GcmVlQlNEX18KKwlpZiAoci0+ZG5waXBlICYmIGlwX2RuX2lvX3B0ciAhPSBO VUxMKSB7CisJCQlzdHJ1Y3QgaXBfZncgZHVtbXlydWxlOworCisgICAgICAJCQlkdW1teXJ1bGUu Y21kLT5vcGNvZGUgPSAKKwkJCQlyLT5kbnR5cGUgPT0gRE5fSVNfUElQRSA/IE9fUElQRSA6IE9f UVVFVUU7CisJCQlkdW1teXJ1bGUuYWN0X29mcyA9IDA7CisJCQlkdW1teXJ1bGUuY21kX2xlbiA9 IDE7CisJCQlpZiAoYWN0aW9uID09IFBGX1BBU1MgJiYgKAorCQkJCXBxaWQgfHwgKHBkLnRvcyAm IElQVE9TX0xPV0RFTEFZKSkpIAorCQkJCWRuZmxvdy5jb29raWUgPSByLT5wZG5waXBlOworCQkJ ZWxzZSAKKwkJCQlkbmZsb3cuY29va2llID0gci0+ZG5waXBlOworICAgICAgICAgICAgICAgIAlk bmZsb3cucnVsZSA9ICZkdW1teXJ1bGU7CisgICAgICAgICAgICAgICAgCWRuZmxvdy5mX2lkLmFk ZHJfdHlwZSA9IDQ7IC8qIElQdjQgdHlwZSAqLworICAgICAgICAgICAgICAgIAlkbmZsb3cuZl9p ZC5wcm90byA9IHBkLnByb3RvOworCQkJUEZfVU5MT0NLKCk7CisJCQkKKwkJCWggPSBtdG9kKCpt MCwgc3RydWN0IGlwICopOworCQkJTlRPSFMoaC0+aXBfbGVuKTsKKwkJCU5UT0hTKGgtPmlwX29m Zik7CisJCQlpcF9kbl9pb19wdHIoKm0wLCAKKwkJCQlkaXIgPT0gUEZfSU4gPyBETl9UT19JUF9J TiA6IEROX1RPX0lQX09VVCwgCisJCQkJJmRuZmxvdyk7CisJCQkqbTAgPSBOVUxMOworCQkJcmV0 dXJuIChhY3Rpb24pOworCQl9CisJCiAJUEZfVU5MT0NLKCk7CiAjZW5kaWYKIApAQCAtNzExMSw2 ICs3MTU1LDcgQEAKIAlpbnQJCQkgb2ZmLCB0ZXJtaW5hbCA9IDAsIGRpcm5keCwgcmhfY250ID0g MDsKIAogI2lmZGVmIF9fRnJlZUJTRF9fCisJc3RydWN0IGlwX2Z3X2FyZ3MJIGRuZmxvdzsKIAlQ Rl9MT0NLKCk7CiAjZW5kaWYKIApAQCAtNzI4Niw2ICs3MzMxLDEyIEBACiAJCXN0cnVjdCB0Y3Bo ZHIJdGg7CiAKIAkJcGQuaGRyLnRjcCA9ICZ0aDsKKyNpZmRlZiBfX0ZyZWVCU0RfXworICAgICAg ICAgICAgICAgIGRuZmxvdy5mX2lkLmZsYWdzID0gdGgudGhfZmxhZ3M7CisgICAgICAgICAgICAg ICAgZG5mbG93LmZfaWQuZHN0X3BvcnQgPSB0aC50aF9kcG9ydDsKKyAgICAgICAgICAgICAgICBk bmZsb3cuZl9pZC5zcmNfcG9ydCA9IHRoLnRoX3Nwb3J0OworI2VuZGlmCisKIAkJaWYgKCFwZl9w dWxsX2hkcihtLCBvZmYsICZ0aCwgc2l6ZW9mKHRoKSwKIAkJICAgICZhY3Rpb24sICZyZWFzb24s IEFGX0lORVQ2KSkgewogCQkJbG9nID0gYWN0aW9uICE9IFBGX1BBU1M7CkBAIC03MzI2LDYgKzcz NzcsMTEgQEAKIAkJc3RydWN0IHVkcGhkcgl1aDsKIAogCQlwZC5oZHIudWRwID0gJnVoOworI2lm ZGVmIF9fRnJlZUJTRF9fCisgICAgICAgICAgICAgICAgZG5mbG93LmZfaWQuZHN0X3BvcnQgPSB1 aC51aF9kcG9ydDsKKyAgICAgICAgICAgICAgICBkbmZsb3cuZl9pZC5zcmNfcG9ydCA9IHVoLnVo X3Nwb3J0OworI2VuZGlmCisKIAkJaWYgKCFwZl9wdWxsX2hkcihtLCBvZmYsICZ1aCwgc2l6ZW9m KHVoKSwKIAkJICAgICZhY3Rpb24sICZyZWFzb24sIEFGX0lORVQ2KSkgewogCQkJbG9nID0gYWN0 aW9uICE9IFBGX1BBU1M7CkBAIC03NTM5LDggKzc1OTUsMzMgQEAKIAkJcGZfcm91dGU2KG0wLCBy LCBkaXIsIGlmcCwgcywgJnBkKTsKIAogI2lmZGVmIF9fRnJlZUJTRF9fCisJaWYgKHItPmRucGlw ZSAmJiBpcF9kbl9pb19wdHIgIT0gTlVMTCkgeworCQkJc3RydWN0IGlwX2Z3IGR1bW15cnVsZTsK KworICAgICAgCQkJZHVtbXlydWxlLmNtZC0+b3Bjb2RlID0gCisJCQkJci0+ZG50eXBlID09IERO X0lTX1BJUEUgPyBPX1BJUEUgOiBPX1FVRVVFOworCQkJZHVtbXlydWxlLmFjdF9vZnMgPSAwOwor CQkJZHVtbXlydWxlLmNtZF9sZW4gPSAxOworCQkJaWYgKGFjdGlvbiA9PSBQRl9QQVNTICYmICgK KwkJCQlwZC50b3MgJiBJUFRPU19MT1dERUxBWSkpIAorCQkJCWRuZmxvdy5jb29raWUgPSByLT5w ZG5waXBlOworCQkJZWxzZSAKKwkJCQlkbmZsb3cuY29va2llID0gci0+ZG5waXBlOworICAgICAg ICAgICAgICAgIAlkbmZsb3cucnVsZSA9ICZkdW1teXJ1bGU7CisgICAgICAgICAgICAgICAgCWRu Zmxvdy5mX2lkLmFkZHJfdHlwZSA9IDY7IC8qIElQdjQgdHlwZSAqLworICAgICAgICAgICAgICAg IAlkbmZsb3cuZl9pZC5wcm90byA9IHBkLnByb3RvOworCQkJUEZfVU5MT0NLKCk7CisJCQkKKwkJ CWlwX2RuX2lvX3B0cigqbTAsIAorCQkJCWRpciA9PSBQRl9JTiA/IEROX1RPX0lQNl9JTiA6IERO X1RPX0lQNl9PVVQsIAorCQkJCSZkbmZsb3cpOworCQkJKm0wID0gTlVMTDsKKwkJCXJldHVybiAo YWN0aW9uKTsKKwkJfQorCQogCVBGX1VOTE9DSygpOwogI2VuZGlmCisKIAlyZXR1cm4gKGFjdGlv bik7CiB9CiAjZW5kaWYgLyogSU5FVDYgKi8KSW5kZXg6IHN5cy9jb250cmliL3BmL25ldC9wZl9p b2N0bC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9ob21lL2VyaS9yZXBvL3N5cy9jb250cmliL3Bm L25ldC9wZl9pb2N0bC5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEuMS4xCmRpZmYgLXUgLXIx LjEuMS4xIHBmX2lvY3RsLmMKLS0tIHN5cy9jb250cmliL3BmL25ldC9wZl9pb2N0bC5jCTIxIE9j dCAyMDA3IDEzOjU0OjU2IC0wMDAwCTEuMS4xLjEKKysrIHN5cy9jb250cmliL3BmL25ldC9wZl9p b2N0bC5jCTIxIE9jdCAyMDA3IDE5OjAzOjQ5IC0wMDAwCkBAIC0zNTIyLDggKzM1MjIsMTYgQEAK IAkgKiBieXRlIG9yZGVyLiAKIAkgKi8KIAlzdHJ1Y3QgaXAgKmggPSBOVUxMOworCXN0cnVjdCBt X3RhZyAqZG5fdGFnOwogCWludCBjaGs7CiAKKyAgICAgICAgZG5fdGFnID0gbV90YWdfZmluZCgq bSwgUEFDS0VUX1RBR19EVU1NWU5FVCwgTlVMTCk7CisJaWYgKGRuX3RhZyAhPSBOVUxMICYmIAor CQkoKHN0cnVjdCBkbl9wa3RfdGFnICopKGRuX3RhZysxKSktPmRuX2RpciA9PSBETl9UT19JUF9J TikgeworCQltX3RhZ19kZWxldGUoKm0sIGRuX3RhZyk7CisgICAgICAgICAgICAgICAgcmV0dXJu IChQRl9QQVNTKTsKKyAgICAgICAgfQorCiAJaWYgKCgqbSktPm1fcGt0aGRyLmxlbiA+PSAoaW50 KXNpemVvZihzdHJ1Y3QgaXApKSB7CiAJCS8qIGlmIG1fcGt0aGRyLmxlbiBpcyBsZXNzIHRoYW4g aXAgaGVhZGVyLCBwZiB3aWxsIGhhbmRsZS4gKi8KIAkJaCA9IG10b2QoKm0sIHN0cnVjdCBpcCAq KTsKQEAgLTM1NTcsNiArMzU2NSw3IEBACiAJICogYnl0ZSBvcmRlci4gCiAJICovCiAJc3RydWN0 IGlwICpoID0gTlVMTDsKKwlzdHJ1Y3QgbV90YWcgKmRuX3RhZzsKIAlpbnQgY2hrOwogCiAJLyog V2UgbmVlZCBhIHByb3BlciBDU1VNIGJlZm9yIHdlIHN0YXJ0IChzLiBPcGVuQlNEIGlwX291dHB1 dCkgKi8KQEAgLTM1NjQsNiArMzU3MywxNCBAQAogCQlpbl9kZWxheWVkX2Nrc3VtKCptKTsKIAkJ KCptKS0+bV9wa3RoZHIuY3N1bV9mbGFncyAmPSB+Q1NVTV9ERUxBWV9EQVRBOwogCX0KKwkKKwlk bl90YWcgPSBtX3RhZ19maW5kKCptLCBQQUNLRVRfVEFHX0RVTU1ZTkVULCBOVUxMKTsKKwlpZiAo ZG5fdGFnICE9IE5VTEwgJiYgCisJCSgoc3RydWN0IGRuX3BrdF90YWcgKikoZG5fdGFnKzEpKS0+ ZG5fZGlyID09IEROX1RPX0lQX09VVCkgeworCQltX3RhZ19kZWxldGUoKm0sIGRuX3RhZyk7Cisg ICAgICAgICAgICAgICAgcmV0dXJuIChQRl9QQVNTKTsKKyAgICAgICAgfQorCQogCWlmICgoKm0p LT5tX3BrdGhkci5sZW4gPj0gKGludClzaXplb2YoKmgpKSB7CiAJCS8qIGlmIG1fcGt0aGRyLmxl biBpcyBsZXNzIHRoYW4gaXAgaGVhZGVyLCBwZiB3aWxsIGhhbmRsZS4gKi8KIAkJaCA9IG10b2Qo Km0sIHN0cnVjdCBpcCAqKTsKQEAgLTM1OTMsNiArMzYxMCwxNCBAQAogCSAqIElQdjYgaXMgbm90 IGFmZmVjdGVkIGJ5IGlwX2xlbi9pcF9vZmYgYnl0ZSBvcmRlciBjaGFuZ2VzLgogCSAqLwogCWlu dCBjaGs7CisJc3RydWN0IG1fdGFnICpkbl90YWc7CisJCisJZG5fdGFnID0gbV90YWdfZmluZCgq bSwgUEFDS0VUX1RBR19EVU1NWU5FVCwgTlVMTCk7CisJaWYgKGRuX3RhZyAhPSBOVUxMICYmIAor CQkoKHN0cnVjdCBkbl9wa3RfdGFnICopKGRuX3RhZysxKSktPmRuX2RpciA9PSBETl9UT19JUDZf SU4pIHsKKwkJbV90YWdfZGVsZXRlKCptLCBkbl90YWcpOworICAgICAgICAgICAgICAgIHJldHVy biAoUEZfUEFTUyk7CisgICAgICAgIH0KIAogCS8qCiAJICogSW4gY2FzZSBvZiBsb29wYmFjayB0 cmFmZmljIElQdjYgdXNlcyB0aGUgcmVhbCBpbnRlcmZhY2UgaW4KQEAgLTM2MTYsNiArMzY0MSwx NCBAQAogCSAqIElQdjYgZG9lcyBub3QgYWZmZWN0ZWQgaXBfbGVuL2lwX29mZiBieXRlIG9yZGVy IGNoYW5nZXMuCiAJICovCiAJaW50IGNoazsKKwlzdHJ1Y3QgbV90YWcgKmRuX3RhZzsKKworCWRu X3RhZyA9IG1fdGFnX2ZpbmQoKm0sIFBBQ0tFVF9UQUdfRFVNTVlORVQsIE5VTEwpOworCWlmIChk bl90YWcgIT0gTlVMTCAmJiAKKwkJKChzdHJ1Y3QgZG5fcGt0X3RhZyAqKShkbl90YWcrMSkpLT5k bl9kaXIgPT0gRE5fVE9fSVA2X09VVCkgeworCQltX3RhZ19kZWxldGUoKm0sIGRuX3RhZyk7Cisg ICAgICAgICAgICAgICAgcmV0dXJuIChQRl9QQVNTKTsKKyAgICAgICAgfQogCiAJLyogV2UgbmVl ZCBhIHByb3BlciBDU1VNIGJlZm9yIHdlIHN0YXJ0IChzLiBPcGVuQlNEIGlwX291dHB1dCkgKi8K IAlpZiAoKCptKS0+bV9wa3RoZHIuY3N1bV9mbGFncyAmIENTVU1fREVMQVlfREFUQSkgewpJbmRl eDogc3lzL2NvbnRyaWIvcGYvbmV0L3BmdmFyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2hvbWUv ZXJpL3JlcG8vc3lzL2NvbnRyaWIvcGYvbmV0L3BmdmFyLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9u IDEuMS4xLjEKZGlmZiAtdSAtcjEuMS4xLjEgcGZ2YXIuaAotLS0gc3lzL2NvbnRyaWIvcGYvbmV0 L3BmdmFyLmgJMjEgT2N0IDIwMDcgMTM6NTQ6NTYgLTAwMDAJMS4xLjEuMQorKysgc3lzL2NvbnRy aWIvcGYvbmV0L3BmdmFyLmgJMjEgT2N0IDIwMDcgMTk6MDM6NDkgLTAwMDAKQEAgLTU3LDYgKzU3 LDkgQEAKIAogI2lmZGVmIF9fRnJlZUJTRF9fCiAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorCisj aW5jbHVkZSA8bmV0aW5ldC9pcF9mdy5oPgorI2luY2x1ZGUgPG5ldGluZXQvaXBfZHVtbXluZXQu aD4KICNlbmRpZgogCiAjaW5jbHVkZSA8bmV0aW5ldC90Y3BfZnNtLmg+CkBAIC02MzIsNiArNjM1 LDkgQEAKIAl9CQkJIG1heF9zcmNfY29ubl9yYXRlOwogCXVfaW50MzJfdAkJIHFpZDsKIAl1X2lu dDMyX3QJCSBwcWlkOworCXVfaW50MzJfdAkJIGRucGlwZTsKKwl1X2ludDMyX3QJCSBwZG5waXBl OworCXVfaW50MzJfdAkJIGRudHlwZTsKIAl1X2ludDMyX3QJCSBydF9saXN0aWQ7CiAJdV9pbnQz Ml90CQkgbnI7CiAJdV9pbnQzMl90CQkgcHJvYjsKSW5kZXg6IHN5cy9uZXRpbmV0L2lwX2R1bW15 bmV0LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2hvbWUvZXJpL3JlcG8vc3lzL25ldGluZXQvaXBf ZHVtbXluZXQuYyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xLjEuMQpkaWZmIC11IC1yMS4xLjEu MSBpcF9kdW1teW5ldC5jCi0tLSBzeXMvbmV0aW5ldC9pcF9kdW1teW5ldC5jCTIxIE9jdCAyMDA3 IDEzOjU1OjM2IC0wMDAwCTEuMS4xLjEKKysrIHN5cy9uZXRpbmV0L2lwX2R1bW15bmV0LmMJMjEg T2N0IDIwMDcgMTk6MDM6NDkgLTAwMDAKQEAgLTg0LDYgKzg0LDkgQEAKICNpbmNsdWRlIDxuZXRp bmV0L2lwNi5oPiAgICAgICAvKiBmb3IgaXA2X2lucHV0LCBpcDZfb3V0cHV0IHByb3RvdHlwZXMg Ki8KICNpbmNsdWRlIDxuZXRpbmV0Ni9pcDZfdmFyLmg+CiAKKworc3RhdGljIHN0cnVjdCBpcF9m dyBkZWZhdWx0X3J1bGUgOworCiAvKgogICogV2Uga2VlcCBhIHByaXZhdGUgdmFyaWFibGUgZm9y IHRoZSBzaW11bGF0aW9uIHRpbWUsIGJ1dCB3ZSBjb3VsZAogICogcHJvYmFibHkgdXNlIGFuIGV4 aXN0aW5nIG9uZSAoInNvZnR0aWNrcyIgaW4gc3lzL2tlcm4va2Vybl90aW1lb3V0LmMpCkBAIC0y MTQsNyArMjE3LDYgQEAKIHN0YXRpYyB2b2lkIGR1bW15bmV0X3NlbmQoc3RydWN0IG1idWYgKik7 CiB2b2lkIGR1bW15bmV0X2RyYWluKHZvaWQpOwogc3RhdGljIGlwX2RuX2lvX3QgZHVtbXluZXRf aW87Ci1zdGF0aWMgdm9pZCBkbl9ydWxlX2RlbGV0ZSh2b2lkICopOwogCiAvKgogICogSGVhcCBt YW5hZ2VtZW50IGZ1bmN0aW9ucy4KQEAgLTE0OTAsNyArMTQ5Miw2IEBACiAJRFVNTVlORVRfVU5M T0NLKCk7CiB9CiAKLWV4dGVybiBzdHJ1Y3QgaXBfZncgKmlwX2Z3X2RlZmF1bHRfcnVsZSA7CiBz dGF0aWMgdm9pZAogZG5fcnVsZV9kZWxldGVfZnMoc3RydWN0IGRuX2Zsb3dfc2V0ICpmcywgdm9p ZCAqcikKIHsKQEAgLTE1MDMsNyArMTUwNCw3IEBACiAJICAgIGZvciAobSA9IHEtPmhlYWQgOyBt IDsgbSA9IG0tPm1fbmV4dHBrdCApIHsKIAkJc3RydWN0IGRuX3BrdF90YWcgKnBrdCA9IGRuX3Rh Z19nZXQobSkgOwogCQlpZiAocGt0LT5ydWxlID09IHIpCi0JCSAgICBwa3QtPnJ1bGUgPSBpcF9m d19kZWZhdWx0X3J1bGUgOworCQkgICAgcGt0LT5ydWxlID0gJmRlZmF1bHRfcnVsZSA7CiAJICAg IH0KIH0KIC8qCkBAIC0xNTM2LDcgKzE1MzcsNyBAQAogCQlmb3IgKG0gPSBwaXBlLT5oZWFkIDsg bSA7IG0gPSBtLT5tX25leHRwa3QgKSB7CiAJCQlwa3QgPSBkbl90YWdfZ2V0KG0pOwogCQkJaWYg KHBrdC0+cnVsZSA9PSByKQotCQkJCXBrdC0+cnVsZSA9IGlwX2Z3X2RlZmF1bHRfcnVsZTsKKwkJ CQlwa3QtPnJ1bGUgPSAmZGVmYXVsdF9ydWxlOwogCQl9CiAJfQogICAgIERVTU1ZTkVUX1VOTE9D SygpOwpAQCAtMjEyOSw3ICsyMTMwLDIwIEBACiAKIAlpcF9kbl9jdGxfcHRyID0gaXBfZG5fY3Rs OwogCWlwX2RuX2lvX3B0ciA9IGR1bW15bmV0X2lvOwotCWlwX2RuX3J1bGVkZWxfcHRyID0gZG5f cnVsZV9kZWxldGU7CisKKwliemVybygmZGVmYXVsdF9ydWxlLCBzaXplb2YgZGVmYXVsdF9ydWxl KTsKKworICAgICAgICBkZWZhdWx0X3J1bGUuYWN0X29mcyA9IDA7CisgICAgICAgIGRlZmF1bHRf cnVsZS5ydWxlbnVtID0gSVBGV19ERUZBVUxUX1JVTEU7CisgICAgICAgIGRlZmF1bHRfcnVsZS5j bWRfbGVuID0gMTsKKyAgICAgICAgZGVmYXVsdF9ydWxlLnNldCA9IFJFU1ZEX1NFVDsKKworICAg ICAgICBkZWZhdWx0X3J1bGUuY21kWzBdLmxlbiA9IDE7CisgICAgICAgIGRlZmF1bHRfcnVsZS5j bWRbMF0ub3Bjb2RlID0KKyNpZmRlZiBJUEZJUkVXQUxMX0RFRkFVTFRfVE9fQUNDRVBUCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgPyBPX0FDQ0VQVCA6CisjZW5kaWYKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgT19ERU5ZOwogCiAJVEFTS19JTklUKCZkbl90YXNr LCAwLCBkdW1teW5ldF90YXNrLCBOVUxMKTsKIAlkbl90cSA9IHRhc2txdWV1ZV9jcmVhdGVfZmFz dCgiZHVtbXluZXQiLCBNX05PV0FJVCwKQEAgLTIxNDksNyArMjE2Myw2IEBACiB7CiAJaXBfZG5f Y3RsX3B0ciA9IE5VTEw7CiAJaXBfZG5faW9fcHRyID0gTlVMTDsKLQlpcF9kbl9ydWxlZGVsX3B0 ciA9IE5VTEw7CiAKIAlEVU1NWU5FVF9MT0NLKCk7CiAJY2FsbG91dF9zdG9wKCZkbl90aW1lb3V0 KTsKQEAgLTIxOTcsNSArMjIxMCw0IEBACiAJTlVMTAogfTsKIERFQ0xBUkVfTU9EVUxFKGR1bW15 bmV0LCBkdW1teW5ldF9tb2QsIFNJX1NVQl9QUk9UT19JRkFUVEFDSERPTUFJTiwgU0lfT1JERVJf QU5ZKTsKLU1PRFVMRV9ERVBFTkQoZHVtbXluZXQsIGlwZncsIDIsIDIsIDIpOwogTU9EVUxFX1ZF UlNJT04oZHVtbXluZXQsIDEpOwpJbmRleDogc3lzL25ldGluZXQvaXBfZHVtbXluZXQuaAo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09ClJDUyBmaWxlOiAvaG9tZS9lcmkvcmVwby9zeXMvbmV0aW5ldC9pcF9kdW1teW5ldC5o LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEuMS4xCmRpZmYgLXUgLXIxLjEuMS4xIGlwX2R1bW15 bmV0LmgKLS0tIHN5cy9uZXRpbmV0L2lwX2R1bW15bmV0LmgJMjEgT2N0IDIwMDcgMTM6NTU6MzYg LTAwMDAJMS4xLjEuMQorKysgc3lzL25ldGluZXQvaXBfZHVtbXluZXQuaAkyMSBPY3QgMjAwNyAx OTowMzo0OSAtMDAwMApAQCAtMzQyLDEzICszNDIsMTMgQEAKIAogI2lmZGVmIF9LRVJORUwKIHR5 cGVkZWYJaW50IGlwX2RuX2N0bF90KHN0cnVjdCBzb2Nrb3B0ICopOyAvKiByYXdfaXAuYyAqLwot dHlwZWRlZgl2b2lkIGlwX2RuX3J1bGVkZWxfdCh2b2lkICopOyAvKiBpcF9mdy5jICovCiB0eXBl ZGVmCWludCBpcF9kbl9pb190KHN0cnVjdCBtYnVmICptLCBpbnQgZGlyLCBzdHJ1Y3QgaXBfZndf YXJncyAqZndhKTsKIGV4dGVybglpcF9kbl9jdGxfdCAqaXBfZG5fY3RsX3B0cjsKLWV4dGVybglp cF9kbl9ydWxlZGVsX3QgKmlwX2RuX3J1bGVkZWxfcHRyOwogZXh0ZXJuCWlwX2RuX2lvX3QgKmlw X2RuX2lvX3B0cjsKICNkZWZpbmUJRFVNTVlORVRfTE9BREVECShpcF9kbl9pb19wdHIgIT0gTlVM TCkKIAordm9pZCBkbl9ydWxlX2RlbGV0ZSh2b2lkICopOworCiAvKgogICogUmV0dXJuIHRoZSBJ UEZXIHJ1bGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBkdW1teW5ldCB0YWc7IGlmIGFueS4KICAqIE1h a2Ugc3VyZSB0aGF0IHRoZSBkdW1teW5ldCB0YWcgaXMgbm90IHJldXNlZCBieSBsb3dlciBsYXll cnMuCkluZGV4OiBzeXMvbmV0aW5ldC9pcF9mdy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9ob21l L2VyaS9yZXBvL3N5cy9uZXRpbmV0L2lwX2Z3LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMS4x LjEKZGlmZiAtdSAtcjEuMS4xLjEgaXBfZncuaAotLS0gc3lzL25ldGluZXQvaXBfZncuaAkyMSBP Y3QgMjAwNyAxMzo1NTozNiAtMDAwMAkxLjEuMS4xCisrKyBzeXMvbmV0aW5ldC9pcF9mdy5oCTIx IE9jdCAyMDA3IDE5OjAzOjQ5IC0wMDAwCkBAIC02MTUsNSArNjE1LDcgQEAKIGV4dGVybglpcF9m d19jaGtfdAkqaXBfZndfY2hrX3B0cjsKICNkZWZpbmUJSVBGV19MT0FERUQJKGlwX2Z3X2Noa19w dHIgIT0gTlVMTCkKIAorI2RlZmluZSBJUEZXX0RFRkFVTFRfUlVMRSAgICAgICA2NTUzNQorCiAj ZW5kaWYgLyogX0tFUk5FTCAqLwogI2VuZGlmIC8qIF9JUEZXMl9IICovCkluZGV4OiBzeXMvbmV0 aW5ldC9pcF9mdzIuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvaG9tZS9lcmkvcmVwby9zeXMvbmV0 aW5ldC9pcF9mdzIuYyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xLjEuMQpkaWZmIC11IC1yMS4x LjEuMSBpcF9mdzIuYwotLS0gc3lzL25ldGluZXQvaXBfZncyLmMJMjEgT2N0IDIwMDcgMTM6NTU6 MzYgLTAwMDAJMS4xLjEuMQorKysgc3lzL25ldGluZXQvaXBfZncyLmMJMjEgT2N0IDIwMDcgMTk6 MDM6NDkgLTAwMDAKQEAgLTEyMiw3ICsxMjIsNiBAQAogCiBzdGF0aWMgc3RydWN0IGNhbGxvdXQg aXBmd190aW1lb3V0Owogc3RhdGljIHVtYV96b25lX3QgaXBmd19keW5fcnVsZV96b25lOwotI2Rl ZmluZQlJUEZXX0RFRkFVTFRfUlVMRQk2NTUzNQogCiAvKgogICogRGF0YSBzdHJ1Y3R1cmUgdG8g Y2FjaGUgb3VyIHVjcmVkIHJlbGF0ZWQKQEAgLTM4MjgsNyArMzgyNyw3IEBACiAJd2hpbGUgKChy dWxlID0gaGVhZCkgIT0gTlVMTCkgewogCQloZWFkID0gaGVhZC0+bmV4dDsKIAkJaWYgKERVTU1Z TkVUX0xPQURFRCkKLQkJCWlwX2RuX3J1bGVkZWxfcHRyKHJ1bGUpOworCQkJZG5fcnVsZV9kZWxl dGUocnVsZSk7CiAJCWZyZWUocnVsZSwgTV9JUEZXKTsKIAl9CiB9CkluZGV4OiBzeXMvbmV0aW5l dC9pcF9md19wZmlsLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2hvbWUvZXJpL3JlcG8vc3lzL25l dGluZXQvaXBfZndfcGZpbC5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEuMS4xCmRpZmYgLXUg LXIxLjEuMS4xIGlwX2Z3X3BmaWwuYwotLS0gc3lzL25ldGluZXQvaXBfZndfcGZpbC5jCTIxIE9j dCAyMDA3IDEzOjU1OjM2IC0wMDAwCTEuMS4xLjEKKysrIHN5cy9uZXRpbmV0L2lwX2Z3X3BmaWwu YwkyMSBPY3QgMjAwNyAxOTowMzo0OSAtMDAwMApAQCAtNzIsOSArNzIsNiBAQAogCiBpbnQgaXBm d19jaGdfaG9vayhTWVNDVExfSEFORExFUl9BUkdTKTsKIAotLyogRHVtbXluZXQgaG9va3MuICov Ci1pcF9kbl9ydWxlZGVsX3QJKmlwX2RuX3J1bGVkZWxfcHRyID0gTlVMTDsKLQogLyogRGl2ZXJ0 IGhvb2tzLiAqLwogaXBfZGl2ZXJ0X3BhY2tldF90ICppcF9kaXZlcnRfcHRyID0gTlVMTDsKIAo= ------=_Part_14170_30775547.1193591593935--