From owner-freebsd-current@FreeBSD.ORG Sat Jun 18 19:09:31 2005 Return-Path: X-Original-To: freebsd-current@freebsd.org Delivered-To: freebsd-current@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id A6C7616A41F for ; Sat, 18 Jun 2005 19:09:31 +0000 (GMT) (envelope-from polachok@narod.ru) Received: from camay.yandex.ru (camay.yandex.ru [213.180.200.33]) by mx1.FreeBSD.org (Postfix) with ESMTP id 886EF43D48 for ; Sat, 18 Jun 2005 19:09:30 +0000 (GMT) (envelope-from polachok@narod.ru) Received: from YAMAIL (camay.yandex.ru) by mail.yandex.ru id ; Sat, 18 Jun 2005 23:09:12 +0400 Date: Sat, 18 Jun 2005 23:09:11 +0400 (MSD) From: "Polakov Alexander" Sender: polachok@narod.ru Message-Id: <42B47157.000001.26107@camay.yandex.ru> MIME-Version: 1.0 X-Mailer: Yamail [ http://yandex.ru ] Errors-To: polachok@narod.ru To: freebsd-current@freebsd.org In-Reply-To: <0II8003FRENI4G60@store.etat.lu> References: <0II8003FRENI4G60@store.etat.lu> X-Source-Ip: 213.158.3.127 Content-Type: Multipart/Mixed; boundary="------------Boundary-00=_BVNA40MWKGMMYJ0CCJD0" Subject: Re: applying the vesa patch to stable for high console resolution X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: polachok@narod.ru List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 18 Jun 2005 19:09:31 -0000 --------------Boundary-00=_BVNA40MWKGMMYJ0CCJD0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit >Hi, >Sorry but I don't know. >You should ask the freebsd-current list. >Regards >Didier > >-----Original Message----- >From: Remington L [mailto:mrl0lz@gmail.com] >Sent: Thursday, June 16, 2005 21:06 >To: Didier Wiroth; freebsd-stable@freebsd.org; >freebsd-questions@freebsd.org >Subject: [SPAM-PAL] Re: applying the vesa patch to stable for high >console resolution I hacked vidcontrol patch a bit, so it worked for me fine just a few weeks ago. The kernel part doesn't need any modifications. -- Alexander Polakov --------------Boundary-00=_BVNA40MWKGMMYJ0CCJD0 Content-Disposition: attachment; Filename="vcc.diff.txt" Content-Type: text/plain; name="vcc.diff.txt" Content-Transfer-Encoding: base64 LS0tIC4vdmlkY29udHJvbC5jLm9yaWcJTW9uIE1heSAgOSAwMDowMjo0MiAyMDA1CisrKyAuL3Zp ZGNvbnRyb2wuYwlNb24gTWF5ICA5IDAwOjA5OjMxIDIwMDUKQEAgLTI2LDYgKzI2LDcgQEAKICAq IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD SCBEQU1BR0UuCiAgKi8KIAorCiAjaWZuZGVmIGxpbnQKIHN0YXRpYyBjb25zdCBjaGFyIHJjc2lk W10gPQogICAiJEZyZWVCU0Q6IHNyYy91c3Iuc2Jpbi92aWRjb250cm9sL3ZpZGNvbnRyb2wuYyx2 IDEuNDcgMjAwMy8wOS8xOCAxNjoyMDozMiBlaXZpbmQgRXhwICQiOwpAQCAtNDksNyArNTAsNyBA QAogI2RlZmluZSBfVkVTQV84MDB4NjAwX0RGTF9DT0xTIDgwCiAjZGVmaW5lIF9WRVNBXzgwMHg2 MDBfREZMX1JPV1MgMjUKICNkZWZpbmUgX1ZFU0FfODAweDYwMF9ERkxfRk5TWiAxNgotCisjZGVm aW5lCURBVEFTSVpFKHgpCSgoeCkudyAqICh4KS5oICogMjU2IC8gOCkKIC8qIFNjcmVlbiBkdW1w IG1vZGVzICovCiAjZGVmaW5lIERVTVBfRk1UX1JBVwkxCiAjZGVmaW5lIERVTVBfRk1UX1RYVAky CkBAIC02NSwxMyArNjYsMTE5IEBACiAJImdyZXkiLCAibGlnaHRibHVlIiwgImxpZ2h0Z3JlZW4i LCAibGlnaHRjeWFuIiwKIAkibGlnaHRyZWQiLCAibGlnaHRtYWdlbnRhIiwgInllbGxvdyIsICJs aWdodHdoaXRlIgogfTsKLWludCAJaGV4ID0gMDsKLWludCAJbnVtYmVyOwotaW50CXZlc2FfY29s cyA9IF9WRVNBXzgwMHg2MDBfREZMX0NPTFM7Ci1pbnQJdmVzYV9yb3dzID0gX1ZFU0FfODAweDYw MF9ERkxfUk9XUzsKLWNoYXIgCWxldHRlcjsKLXN0cnVjdCAJdmlkX2luZm8gaW5mbzsKKy8vaW50 IAloZXggPSAwOworLy9pbnQgCW51bWJlcjsKKy8vaW50CXZlc2FfY29scyA9IF9WRVNBXzgwMHg2 MDBfREZMX0NPTFM7CisvL2ludAl2ZXNhX3Jvd3MgPSBfVkVTQV84MDB4NjAwX0RGTF9ST1dTOwor Ly9jaGFyIAlsZXR0ZXI7CisvL3N0cnVjdCAJdmlkX2luZm8gaW5mbzsKK3N0cnVjdCB7CisJaW50 CQkJYWN0aXZlX3Z0eTsKKwl2aWRfaW5mb190CQljb25zb2xlX2luZm87CisJdW5zaWduZWQgY2hh cgkJc2NyZWVuX21hcFsyNTZdOworCWludAkJCXZpZGVvX21vZGVfbnVtYmVyOworCXN0cnVjdCB2 aWRlb19pbmZvCXZpZGVvX21vZGVfaW5mbzsKK30gY3VyX2luZm87CisKK2ludAloZXggPSAwOwor aW50CW51bWJlcjsKK2ludAl2ZXNhX2NvbHM7CitpbnQJdmVzYV9yb3dzOworaW50CWZvbnRfaGVp Z2h0OworaW50CWNvbG9yc19jaGFuZ2VkOworaW50CXZpZGVvX21vZGVfY2hhbmdlZDsKK2ludAlu b3JtYWxfZm9yZV9jb2xvciwgbm9ybWFsX2JhY2tfY29sb3I7CitpbnQJcmV2ZXJzX2ZvcmVfY29s b3IsIHJldmVyc19iYWNrX2NvbG9yOworY2hhcglsZXR0ZXI7CitzdHJ1Y3QJdmlkX2luZm8gaW5m bzsKK3N0cnVjdAl2aWRlb19pbmZvIG5ld19tb2RlX2luZm87CisKKworLyoKKyAqIEluaXRpYWxp emUgcmV2ZXJ0IGRhdGEuCisgKgorICogTk9URTogdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzIGFy ZSBub3QgeWV0IHNhdmVkL3Jlc3RvcmVkOgorICoKKyAqICAgc2NyZWVuIHNhdmVyIHRpbWVvdXQK KyAqICAgY3Vyc29yIHR5cGUKKyAqICAgbW91c2UgY2hhcmFjdGVyIGFuZCBtb3VzZSBzaG93L2hp ZGUgc3RhdGUKKyAqICAgdnR5IHN3aXRjaGluZyBvbi9vZmYgc3RhdGUKKyAqICAgaGlzdG9yeSBi dWZmZXIgc2l6ZQorICogICBoaXN0b3J5IGNvbnRlbnRzCisgKiAgIGZvbnQgbWFwcworICovCisK K3N0YXRpYyB2b2lkCitpbml0KHZvaWQpCit7CisJaWYgKGlvY3RsKDAsIFZUX0dFVEFDVElWRSwg JmN1cl9pbmZvLmFjdGl2ZV92dHkpID09IC0xKQorCQllcnJjKDEsIGVycm5vLCAiZ2V0dGluZyBh Y3RpdmUgdnR5Iik7CisKKwljdXJfaW5mby5jb25zb2xlX2luZm8uc2l6ZSA9IHNpemVvZihjdXJf aW5mby5jb25zb2xlX2luZm8pOworCisJaWYgKGlvY3RsKDAsIENPTlNfR0VUSU5GTywgJmN1cl9p bmZvLmNvbnNvbGVfaW5mbykgPT0gLTEpCisJCWVycmMoMSwgZXJybm8sICJnZXR0aW5nIGNvbnNv bGUgaW5mb3JtYXRpb24iKTsKKworCWlmIChpb2N0bCgwLCBHSU9fU0NSTk1BUCwgJmN1cl9pbmZv LnNjcmVlbl9tYXApID09IC0xKQorCQllcnJjKDEsIGVycm5vLCAiZ2V0dGluZyBzY3JlZW4gbWFw Iik7CisKKwlpZiAoaW9jdGwoMCwgQ09OU19HRVQsICZjdXJfaW5mby52aWRlb19tb2RlX251bWJl cikgPT0gLTEpCisJCWVycmMoMSwgZXJybm8sICJnZXR0aW5nIHZpZGVvIG1vZGUgbnVtYmVyIik7 CisKKwljdXJfaW5mby52aWRlb19tb2RlX2luZm8udmlfbW9kZSA9IGN1cl9pbmZvLnZpZGVvX21v ZGVfbnVtYmVyOworCisJaWYgKGlvY3RsKDAsIENPTlNfTU9ERUlORk8sICZjdXJfaW5mby52aWRl b19tb2RlX2luZm8pID09IC0xKQorCQllcnJjKDEsIGVycm5vLCAiZ2V0dGluZyB2aWRlbyBtb2Rl IHBhcmFtZXRlcnMiKTsKKworCW5vcm1hbF9mb3JlX2NvbG9yID0gY3VyX2luZm8uY29uc29sZV9p bmZvLm12X25vcm0uZm9yZTsKKwlub3JtYWxfYmFja19jb2xvciA9IGN1cl9pbmZvLmNvbnNvbGVf aW5mby5tdl9ub3JtLmJhY2s7CisJcmV2ZXJzX2ZvcmVfY29sb3IgPSBjdXJfaW5mby5jb25zb2xl X2luZm8ubXZfcmV2LmZvcmU7CisJcmV2ZXJzX2JhY2tfY29sb3IgPSBjdXJfaW5mby5jb25zb2xl X2luZm8ubXZfcmV2LmJhY2s7Cit9CisKKworLyoKKyAqIElmIHNvbWV0aGluZyBnb2VzIHdyb25n IGFsb25nIHRoZSB3YXkgd2UgY2FsbCByZXZlcnQoKSB0byBnbyBiYWNrIHRvIHRoZQorICogY29u c29sZSBzdGF0ZSB3ZSBjYW1lIGZyb20gKHdoaWNoIGlzIGFzc3VtZWQgdG8gYmUgd29ya2luZyku CisgKgorICogTk9URTogcGxlYXNlIGFsc28gcmVhZCB0aGUgY29tbWVudHMgb2YgaW5pdCgpLgor ICovCisKK3N0YXRpYyB2b2lkCityZXZlcnQodm9pZCkKK3sKKwlpbnQgc2l6ZVszXTsKIAorCWlv Y3RsKDAsIFZUX0FDVElWQVRFLCAoY2FkZHJfdCkgKGxvbmcpIGN1cl9pbmZvLmFjdGl2ZV92dHkp OworCisJZnByaW50ZihzdGRlcnIsICIbWz0lZEEiLCBjdXJfaW5mby5jb25zb2xlX2luZm8ubXZf b3ZzY2FuKTsKKwlmcHJpbnRmKHN0ZGVyciwgIhtbPSVkRiIsIGN1cl9pbmZvLmNvbnNvbGVfaW5m by5tdl9ub3JtLmZvcmUpOworZnByaW50ZihzdGRlcnIsICIbWz0lZEciLCBjdXJfaW5mby5jb25z b2xlX2luZm8ubXZfbm9ybS5iYWNrKTsKKwlmcHJpbnRmKHN0ZGVyciwgIhtbPSVkSCIsIGN1cl9p bmZvLmNvbnNvbGVfaW5mby5tdl9yZXYuZm9yZSk7CisJZnByaW50ZihzdGRlcnIsICIbWz0lZEki LCBjdXJfaW5mby5jb25zb2xlX2luZm8ubXZfcmV2LmJhY2spOworCisJaW9jdGwoMCwgUElPX1ND Uk5NQVAsICZjdXJfaW5mby5zY3JlZW5fbWFwKTsKKworCWlmIChjdXJfaW5mby52aWRlb19tb2Rl X251bWJlciA+PSBNX1ZFU0FfQkFTRSkKKwkJaW9jdGwoMCwgX0lPKCdWJywgY3VyX2luZm8udmlk ZW9fbW9kZV9udW1iZXIgLSBNX1ZFU0FfQkFTRSksCisJCSAgICAgIE5VTEwpOworCWVsc2UKKwkJ aW9jdGwoMCwgX0lPKCdTJywgY3VyX2luZm8udmlkZW9fbW9kZV9udW1iZXIpLCBOVUxMKTsKKwor CWlmIChjdXJfaW5mby52aWRlb19tb2RlX2luZm8udmlfZmxhZ3MgJiBWX0lORk9fR1JBUEhJQ1Mp IHsKKwkJc2l6ZVswXSA9IGN1cl9pbmZvLnZpZGVvX21vZGVfaW5mby52aV93aWR0aCAvIDg7CisJ CXNpemVbMV0gPSBjdXJfaW5mby52aWRlb19tb2RlX2luZm8udmlfaGVpZ2h0IC8KKwkJCSAgY3Vy X2luZm8uY29uc29sZV9pbmZvLmZvbnRfc2l6ZTsKKwkJc2l6ZVsyXSA9IGN1cl9pbmZvLmNvbnNv bGVfaW5mby5mb250X3NpemU7CisKKwkJaW9jdGwoMCwgS0RSQVNURVIsIHNpemUpOworCX0KK30K KworCisvKgorICogUHJpbnQgYSBzaG9ydCB1c2FnZSBzdHJpbmcgZGVzY3JpYmluZyBhbGwgb3B0 aW9ucywgdGhlbiBleGl0LgorICovCiAKIHN0YXRpYyB2b2lkCiB1c2FnZSgpCkBAIC04NSwxNiAr MTkyLDMxIEBACiAJZXhpdCgxKTsKIH0KIAorLyoKKyAqIFJldHJpZXZlIHRoZSBuZXh0IGFyZ3Vt ZW50IGZyb20gdGhlIGNvbW1hbmQgbGluZSAoZm9yIG9wdGlvbnMgdGhhdCByZXF1aXJlCisgKiBt b3JlIHRoYW4gb25lIGFyZ3VtZW50KS4KKyAqLworCiBjaGFyICoKIG5leHRhcmcoaW50IGFjLCBj aGFyICoqYXYsIGludCAqaW5kcCwgaW50IG9jLCBpbnQgc3RyaWN0KQogewogCWlmICgqaW5kcCA8 IGFjKQogCQlyZXR1cm4oYXZbKCppbmRwKSsrXSk7Ci0JaWYgKHN0cmljdCAhPSAwKQorLy8JaWYg KHN0cmljdCAhPSAwKQorCWlmIChzdHJpY3QgIT0gMCkgeworCQlyZXZlcnQoKTsKIAkJZXJyeCgx LCAib3B0aW9uIHJlcXVpcmVzIHR3byBhcmd1bWVudHMgLS0gJWMiLCBvYyk7Cit9CisKIAlyZXR1 cm4oTlVMTCk7CiB9CiAKKworLyoKKyAqIEd1ZXNzIHdoaWNoIGZpbGUgdG8gb3Blbi4gVHJ5IHRv IG9wZW4gZWFjaCBjb21iaW5hdGlvbiBvZiBhIHNwZWNpZmllZCBzZXQKKyAqIG9mIGZpbGUgbmFt ZSBjb21wb25lbnRzLgorICovCisKIEZJTEUgKgogb3Blbmd1ZXNzKGNoYXIgKmFbXSwgY2hhciAq YltdLCBjaGFyICpjW10sIGNoYXIgKmRbXSwgY2hhciAqKm5hbWUpCiB7CkBAIC0xMDUsMTEgKzIy NywxNSBAQAogCQlmb3IgKGogPSAwOyBiW2pdICE9IE5VTEw7IGorKykgewogCQkJZm9yIChrID0g MDsgY1trXSAhPSBOVUxMOyBrKyspIHsKIAkJCQlmb3IgKGwgPSAwOyBkW2xdICE9IE5VTEw7IGwr KykgewotCQkJCQlhc3ByaW50ZihuYW1lLCAiJXMlcyVzJXMiLCBhW2ldLCBiW2pdLAotCQkJCQkg ICAgY1trXSwgZFtsXSk7CisJLy8JCQkJYXNwcmludGYobmFtZSwgIiVzJXMlcyVzIiwgYVtpXSwg YltqXSwKKwkvLwkJCQkgICAgY1trXSwgZFtsXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGFzcHJpbnRmKG5hbWUsICIlcyVzJXMlcyIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhW2ldLCBiW2pdLCBjW2tdLCBk W2xdKTsKIAkJCQkJZiA9IGZvcGVuKCpuYW1lLCAiciIpOworCiAJCQkJCWlmIChmICE9IE5VTEwp CiAJCQkJCQlyZXR1cm4gKGYpOworCiAJCQkJCWZyZWUoKm5hbWUpOwogCQkJCX0KIAkJCX0KQEAg LTExOCw2ICsyNDQsMTAgQEAKIAlyZXR1cm4gKE5VTEwpOwogfQogCisvKgorICogTG9hZCBhIHNj cmVlbm1hcCBmcm9tIGEgZmlsZSBhbmQgc2V0IGl0LgorICovCisKIHZvaWQKIGxvYWRfc2Nybm1h cChjaGFyICpmaWxlbmFtZSkKIHsKQEAgLTEzMSwyNCArMjYxLDM4IEBACiAJY2hhciAqZFtdID0g eyIiLCBOVUxMfTsKIAogCWZkID0gb3Blbmd1ZXNzKGEsIGIsIGMsIGQsICZuYW1lKTsKKwogCWlm IChmZCA9PSBOVUxMKSB7Ci0JCXdhcm4oInNjcmVlbm1hcCBmaWxlIG5vdCBmb3VuZCIpOwotCQly ZXR1cm47CisvLwkJd2Fybigic2NyZWVubWFwIGZpbGUgbm90IGZvdW5kIik7CisvLwkJcmV0dXJu OworCQlyZXZlcnQoKTsKKwkJZXJyeCgxLCAic2NyZWVubWFwIGZpbGUgbm90IGZvdW5kIik7CiAJ fQorCiAJc2l6ZSA9IHNpemVvZihzY3JubWFwKTsKIAlpZiAoZGVjb2RlKGZkLCAoY2hhciAqKSZz Y3JubWFwLCBzaXplKSAhPSBzaXplKSB7CiAJCXJld2luZChmZCk7Ci0JCWlmIChmcmVhZCgmc2Ny bm1hcCwgMSwgc2l6ZSwgZmQpICE9IHNpemUpIHsKKy8vCQlpZiAoZnJlYWQoJnNjcm5tYXAsIDEs IHNpemUsIGZkKSAhPSBzaXplKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChmcmVhZCgmc2Ny bm1hcCwgMSwgc2l6ZSwgZmQpICE9IChzaXplX3Qpc2l6ZSkgewogCQkJd2FybngoImJhZCBzY3Jl ZW5tYXAgZmlsZSIpOwogCQkJZmNsb3NlKGZkKTsKLQkJCXJldHVybjsKKy8vCQkJcmV0dXJuOwor CQkJcmV2ZXJ0KCk7CisJCQllcnJ4KDEsICJiYWQgc2NyZWVubWFwIGZpbGUiKTsKIAkJfQogCX0K LQlpZiAoaW9jdGwoMCwgUElPX1NDUk5NQVAsICZzY3JubWFwKSA8IDApCi0JCXdhcm4oImNhbid0 IGxvYWQgc2NyZWVubWFwIik7CisJaWYgKGlvY3RsKDAsIFBJT19TQ1JOTUFQLCAmc2Nybm1hcCkg PT0gLTEpCit7CisgICAgICAgICAgICAgcmV2ZXJ0KCk7CisJCWVycmMoMSwgZXJybm8sICJjYW4n dCBsb2FkIHNjcmVlbm1hcCIpOworfQogCWZjbG9zZShmZCk7CiB9CiAKKy8qCisgKiBTZXQgdGhl IGRlZmF1bHQgc2NyZWVubWFwLgorICovCisKIHZvaWQKIGxvYWRfZGVmYXVsdF9zY3JubWFwKCkK IHsKQEAgLTE1NywyNCArMzAxLDM2IEBACiAKIAlmb3IgKGk9MDsgaTwyNTY7IGkrKykKIAkJKigo Y2hhciopJnNjcm5tYXAgKyBpKSA9IGk7Ci0JaWYgKGlvY3RsKDAsIFBJT19TQ1JOTUFQLCAmc2Ny bm1hcCkgPCAwKQotCQl3YXJuKCJjYW4ndCBsb2FkIGRlZmF1bHQgc2NyZWVubWFwIik7CisvLwlp ZiAoaW9jdGwoMCwgUElPX1NDUk5NQVAsICZzY3JubWFwKSA8IDApCisvLwkJd2FybigiY2FuJ3Qg bG9hZCBkZWZhdWx0IHNjcmVlbm1hcCIpOworCisJaWYgKGlvY3RsKDAsIFBJT19TQ1JOTUFQLCAm c2Nybm1hcCkgPT0gLTEpIHsKKwkJcmV2ZXJ0KCk7CisJCWVycmMoMSwgZXJybm8sICJsb2FkaW5n IGRlZmF1bHQgc2NyZWVubWFwIik7CisJfQogfQogCisvKgorICogUHJpbnQgdGhlIGN1cnJlbnQg c2NyZWVubWFwIHRvIHN0ZG91dC4KKyAqLworCiB2b2lkCiBwcmludF9zY3JubWFwKCkKIHsKIAl1 bnNpZ25lZCBjaGFyIG1hcFsyNTZdOwogCWludCBpOwogCi0JaWYgKGlvY3RsKDAsIEdJT19TQ1JO TUFQLCAmbWFwKSA8IDApIHsKLQkJd2FybigiZ2V0dGluZyBzY3JlZW5tYXAiKTsKLQkJcmV0dXJu OworLy8JaWYgKGlvY3RsKDAsIEdJT19TQ1JOTUFQLCAmbWFwKSA8IDApIHsKKy8vCQl3YXJuKCJn ZXR0aW5nIHNjcmVlbm1hcCIpOworLy8JCXJldHVybjsKKwlpZiAoaW9jdGwoMCwgR0lPX1NDUk5N QVAsICZtYXApID09IC0xKSB7CisJCXJldmVydCgpOworCQllcnJjKDEsIGVycm5vLCAiZ2V0dGlu ZyBzY3JlZW5tYXAiKTsKIAl9CiAJZm9yIChpPTA7IGk8c2l6ZW9mKG1hcCk7IGkrKykgewogCQlp ZiAoaSA+IDAgJiYgaSAlIDE2ID09IDApCiAJCQlmcHJpbnRmKHN0ZG91dCwgIlxuIik7Ci0JCWlm IChoZXgpCisJCWlmIChoZXggIT0gMCkKIAkJCWZwcmludGYoc3Rkb3V0LCAiICUwMngiLCBtYXBb aV0pOwogCQllbHNlCiAJCQlmcHJpbnRmKHN0ZG91dCwgIiAlMDNkIiwgbWFwW2ldKTsKQEAgLTE4 Myw2ICszMzksMTAgQEAKIAogfQogCisvKgorICogRGV0ZXJtaW5lIGEgZmlsZSdzIHNpemUuCisg Ki8KKwogaW50CiBmc2l6ZShGSUxFICpmaWxlKQogewpAQCAtMTk0LDcgKzM1NCwxMCBAQAogCQly ZXR1cm4gLTE7CiB9CiAKLSNkZWZpbmUgREFUQVNJWkUoeCkgKCh4KS53ICogKHgpLmggKiAyNTYg LyA4KQorLy8jZGVmaW5lIERBVEFTSVpFKHgpICgoeCkudyAqICh4KS5oICogMjU2IC8gOCkKKy8q CisgKiBMb2FkIGEgZm9udCBmcm9tIGZpbGUgYW5kIHNldCBpdC4KKyAqLwogCiB2b2lkCiBsb2Fk X2ZvbnQoY2hhciAqdHlwZSwgY2hhciAqZmlsZW5hbWUpCkBAIC0yMjAsMjggKzM4MywzOSBAQAog CiAJaW5mby5zaXplID0gc2l6ZW9mKGluZm8pOwogCWlmIChpb2N0bCgwLCBDT05TX0dFVElORk8s ICZpbmZvKSA9PSAtMSkgeworICAgICAgICAgICAgICAgICAgICByZXZlcnQoKTsKIAkJd2Fybigi ZmFpbGVkIHRvIG9idGFpbiBjdXJyZW50IHZpZGVvIG1vZGUgcGFyYW1ldGVycyIpOwogCQlyZXR1 cm47CiAJfQorCiAJc25wcmludGYoc2l6ZV9zdWZ4LCBzaXplb2Yoc2l6ZV9zdWZ4KSwgIi04eCVk IiwgaW5mby5mb250X3NpemUpOwogCWZkID0gb3Blbmd1ZXNzKGEsIGIsIGMsIGQsICZuYW1lKTsK IAlpZiAoZmQgPT0gTlVMTCkgewotCQl3YXJuKCIlczogY2FuJ3QgbG9hZCBmb250IGZpbGUiLCBm aWxlbmFtZSk7Ci0JCXJldHVybjsKKy8vCQl3YXJuKCIlczogY2FuJ3QgbG9hZCBmb250IGZpbGUi LCBmaWxlbmFtZSk7CisvLwkJcmV0dXJuOworCQlyZXZlcnQoKTsKKwkJZXJyeCgxLCAiJXM6IGNh bid0IGxvYWQgZm9udCBmaWxlIiwgZmlsZW5hbWUpOwogCX0KKwogCWlmICh0eXBlICE9IE5VTEwp IHsKIAkJc2l6ZSA9IDA7Ci0JCWlmIChzc2NhbmYodHlwZSwgIiVkeCVkIiwgJncsICZoKSA9PSAy KQotCQkJZm9yIChpID0gMDsgc2l6ZXNbaV0udyAhPSAwOyBpKyspCisvLwkJaWYgKHNzY2FuZih0 eXBlLCAiJWR4JWQiLCAmdywgJmgpID09IDIpCisvLwkJCWZvciAoaSA9IDA7IHNpemVzW2ldLncg IT0gMDsgaSsrKQorCQlpZiAoc3NjYW5mKHR5cGUsICIlZHglZCIsICZ3LCAmaCkgPT0gMikgewor CQkJZm9yIChpID0gMDsgc2l6ZXNbaV0udyAhPSAwOyBpKyspIHsKIAkJCQlpZiAoc2l6ZXNbaV0u dyA9PSB3ICYmIHNpemVzW2ldLmggPT0gaCkgewogCQkJCQlzaXplID0gREFUQVNJWkUoc2l6ZXNb aV0pOwogCQkJCQlpbyA9IHNpemVzW2ldLmlvOworCQkJCQlmb250X2hlaWdodCA9IHNpemVzW2ld Lmg7CiAJCQkJfQotCit9Cit9CiAJCWlmIChzaXplID09IDApIHsKLQkJCXdhcm54KCIlczogYmFk IGZvbnQgc2l6ZSBzcGVjaWZpY2F0aW9uIiwgdHlwZSk7CisvLwkJCXdhcm54KCIlczogYmFkIGZv bnQgc2l6ZSBzcGVjaWZpY2F0aW9uIiwgdHlwZSk7CiAJCQlmY2xvc2UoZmQpOwotCQkJcmV0dXJu OworLy8JCQlyZXR1cm47CisJCQlyZXZlcnQoKTsKKwkJZXJyeCgxLCAiJXM6IGJhZCBmb250IHNp emUgc3BlY2lmaWNhdGlvbiIsIHR5cGUpOwogCQl9CiAJfSBlbHNlIHsKIAkJLyogQXBwbHkgaGV1 cmlzdGljcyAqLwpAQCAtMjU1LDE5ICs0MjksMjUgQEAKIAkJZnJlZShmb250bWFwKTsKIAogCQlz aXplID0gMDsKLQkJZm9yIChqID0gMDsgaiA8IDI7IGorKykKLQkJCWZvciAoaSA9IDA7IHNpemVz W2ldLncgIT0gMDsgaSsrKQorLy8JCWZvciAoaiA9IDA7IGogPCAyOyBqKyspCisvLwkJCWZvciAo aSA9IDA7IHNpemVzW2ldLncgIT0gMDsgaSsrKQorCQlmb3IgKGogPSAwOyBqIDwgMjsgaisrKSB7 CisJCQlmb3IgKGkgPSAwOyBzaXplc1tpXS53ICE9IDA7IGkrKykgewogCQkJCWlmIChEQVRBU0la RShzaXplc1tpXSkgPT0gZHNpemVbal0pIHsKIAkJCQkJc2l6ZSA9IGRzaXplW2pdOwogCQkJCQlp byA9IHNpemVzW2ldLmlvOworCQkJCQlmb250X2hlaWdodCA9IHNpemVzW2ldLmg7CiAJCQkJCWog PSAyOwkvKiBYWFggKi8KIAkJCQkJYnJlYWs7CiAJCQkJfQotCit9Cit9CiAJCWlmIChzaXplID09 IDApIHsKLQkJCXdhcm54KCIlczogY2FuJ3QgZ3Vlc3MgZm9udCBzaXplIiwgZmlsZW5hbWUpOwor CS8vCQl3YXJueCgiJXM6IGNhbid0IGd1ZXNzIGZvbnQgc2l6ZSIsIGZpbGVuYW1lKTsKIAkJCWZj bG9zZShmZCk7Ci0JCQlyZXR1cm47CisJLy8JCXJldHVybjsKKwkJCXJldmVydCgpOworCQkJZXJy eCgxLCAiJXM6IGNhbid0IGd1ZXNzIGZvbnQgc2l6ZSIsIGZpbGVuYW1lKTsKIAkJfQogCQlyZXdp bmQoZmQpOwogCX0KQEAgLTI3NSwzNyArNDU1LDYwIEBACiAJZm9udG1hcCA9IChjaGFyKikgbWFs bG9jKHNpemUpOwogCWlmIChkZWNvZGUoZmQsIGZvbnRtYXAsIHNpemUpICE9IHNpemUpIHsKIAkJ cmV3aW5kKGZkKTsKLQkJaWYgKGZzaXplKGZkKSAhPSBzaXplIHx8IGZyZWFkKGZvbnRtYXAsIDEs IHNpemUsIGZkKSAhPSBzaXplKSB7CisvLwkJaWYgKGZzaXplKGZkKSAhPSBzaXplIHx8IGZyZWFk KGZvbnRtYXAsIDEsIHNpemUsIGZkKSAhPSBzaXplKSB7CisJCWlmIChmc2l6ZShmZCkgIT0gc2l6 ZSB8fAorCQkgICAgZnJlYWQoZm9udG1hcCwgMSwgc2l6ZSwgZmQpICE9IChzaXplX3Qpc2l6ZSkg ewogCQkJd2FybngoIiVzOiBiYWQgZm9udCBmaWxlIiwgZmlsZW5hbWUpOwogCQkJZmNsb3NlKGZk KTsKIAkJCWZyZWUoZm9udG1hcCk7Ci0JCQlyZXR1cm47CisvLwkJCXJldHVybjsKKwkJCXJldmVy dCgpOworCQkJZXJyeCgxLCAiJXM6IGJhZCBmb250IGZpbGUiLCBmaWxlbmFtZSk7CiAJCX0KIAl9 Ci0JaWYgKGlvY3RsKDAsIGlvLCBmb250bWFwKSA8IDApCi0JCXdhcm4oImNhbid0IGxvYWQgZm9u dCIpOworLy8JaWYgKGlvY3RsKDAsIGlvLCBmb250bWFwKSA8IDApCisvLwkJd2FybigiY2FuJ3Qg bG9hZCBmb250Iik7CisKKwlpZiAoaW9jdGwoMCwgaW8sIGZvbnRtYXApID09IC0xKSB7CisJCXJl dmVydCgpOworCQllcnJjKDEsIGVycm5vLCAibG9hZGluZyBmb250Iik7CisJfQogCWZjbG9zZShm ZCk7CiAJZnJlZShmb250bWFwKTsKIH0KIAorLyoKKyAqIFNldCB0aGUgdGltZW91dCBmb3IgdGhl IHNjcmVlbnNhdmVyLgorICovCisKIHZvaWQKIHNldF9zY3JlZW5zYXZlcl90aW1lb3V0KGNoYXIg KmFyZykKIHsKIAlpbnQgbnNlYzsKIAotCWlmICghc3RyY21wKGFyZywgIm9mZiIpKQorCWlmICgh c3RyY21wKGFyZywgIm9mZiIpKSB7CiAJCW5zZWMgPSAwOwotCWVsc2UgeworCX0gZWxzZSB7CiAJ CW5zZWMgPSBhdG9pKGFyZyk7CiAJCWlmICgoKmFyZyA9PSAnXDAnKSB8fCAobnNlYyA8IDEpKSB7 Ci0JCQl3YXJueCgiYXJndW1lbnQgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlciIpOwotCQkJcmV0 dXJuOworLy8JCQl3YXJueCgiYXJndW1lbnQgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlciIpOwor Ly8JCQlyZXR1cm47CisJCQlyZXZlcnQoKTsKKwkJCWVycngoMSwgImFyZ3VtZW50IG11c3QgYmUg YSBwb3NpdGl2ZSBudW1iZXIiKTsKIAkJfQogCX0KLQlpZiAoaW9jdGwoMCwgQ09OU19CTEFOS1RJ TUUsICZuc2VjKSA9PSAtMSkKLQkJd2Fybigic2V0dGluZyBzY3JlZW5zYXZlciBwZXJpb2QiKTsK Ky8vCWlmIChpb2N0bCgwLCBDT05TX0JMQU5LVElNRSwgJm5zZWMpID09IC0xKQorLy8JCXdhcm4o InNldHRpbmcgc2NyZWVuc2F2ZXIgcGVyaW9kIik7CisJaWYgKGlvY3RsKDAsIENPTlNfQkxBTktU SU1FLCAmbnNlYykgPT0gLTEpIHsKKwkJcmV2ZXJ0KCk7CisJCWVycmMoMSwgZXJybm8sICJzZXR0 aW5nIHNjcmVlbnNhdmVyIHBlcmlvZCIpOworCX0KIH0KIAorLyoKKyAqIFNldCB0aGUgY3Vyc29y J3Mgc2hhcGUvdHlwZS4KKyAqLworCiB2b2lkCiBzZXRfY3Vyc29yX3R5cGUoY2hhciAqYXBwZWFy ZW5jZSkKIHsKQEAgLTMxOCw1MSArNTIxLDY0IEBACiAJZWxzZSBpZiAoIXN0cmNtcChhcHBlYXJl bmNlLCAiZGVzdHJ1Y3RpdmUiKSkKIAkJdHlwZSA9IDM7CiAJZWxzZSB7Ci0JCXdhcm54KCJhcmd1 bWVudCB0byAtYyBtdXN0IGJlIG5vcm1hbCwgYmxpbmsgb3IgZGVzdHJ1Y3RpdmUiKTsKLQkJcmV0 dXJuOwotCX0KLQlpb2N0bCgwLCBDT05TX0NVUlNPUlRZUEUsICZ0eXBlKTsKKy8vCQl3YXJueCgi YXJndW1lbnQgdG8gLWMgbXVzdCBiZSBub3JtYWwsIGJsaW5rIG9yIGRlc3RydWN0aXZlIik7Cisv LwkJcmV0dXJuOworCQlyZXZlcnQoKTsKKwkJZXJyeCgxLCAiYXJndW1lbnQgdG8gLWMgbXVzdCBi ZSBub3JtYWwsIGJsaW5rIG9yIGRlc3RydWN0aXZlIik7CisJfQorCQlpZiAoaW9jdGwoMCwgQ09O U19DVVJTT1JUWVBFLCAmdHlwZSkgPT0gLTEpIHsKKwlyZXZlcnQoKTsKKwllcnJjKDEsIGVycm5v LCAic2V0dGluZyBjdXJzb3IgdHlwZSIpOwogfQorLy8JaW9jdGwoMCwgQ09OU19DVVJTT1JUWVBF LCAmdHlwZSk7Cit9CisKKy8qCisgKiBTZXQgdGhlIHZpZGVvIG1vZGUuCisgKi8KIAogaW50Ci12 aWRlb19tb2RlKGludCBhcmdjLCBjaGFyICoqYXJndiwgaW50ICppbmRleCkKK3ZpZGVvX21vZGUo aW50IGFyZ2MsIGNoYXIgKiphcmd2LCBpbnQgKm1vZGVfaW5kZXgpCiB7CiAJc3RhdGljIHN0cnVj dCB7CiAJCWNoYXIgKm5hbWU7CiAJCXVuc2lnbmVkIGxvbmcgbW9kZTsKKwkJdW5zaWduZWQgbG9u ZyBtb2RlX251bTsKIAl9IG1vZGVzW10gPSB7Ci0JCXsgIjgweDI1IiwJCVNXX1RFWFRfODB4MjUg fSwKLQkJeyAiODB4MzAiLAkJU1dfVEVYVF84MHgzMCB9LAotCQl7ICI4MHg0MyIsCQlTV19URVhU XzgweDQzIH0sCi0JCXsgIjgweDUwIiwJCVNXX1RFWFRfODB4NTAgfSwKLQkJeyAiODB4NjAiLAkJ U1dfVEVYVF84MHg2MCB9LAotCQl7ICIxMzJ4MjUiLAkJU1dfVEVYVF8xMzJ4MjUgfSwKLQkJeyAi MTMyeDMwIiwJCVNXX1RFWFRfMTMyeDMwIH0sCi0JCXsgIjEzMng0MyIsCQlTV19URVhUXzEzMng0 MyB9LAotCQl7ICIxMzJ4NTAiLAkJU1dfVEVYVF8xMzJ4NTAgfSwKLQkJeyAiMTMyeDYwIiwJCVNX X1RFWFRfMTMyeDYwIH0sCi0JCXsgIlZHQV80MHgyNSIsCQlTV19WR0FfQzQweDI1IH0sCi0JCXsg IlZHQV84MHgyNSIsCQlTV19WR0FfQzgweDI1IH0sCi0JCXsgIlZHQV84MHgzMCIsCQlTV19WR0Ff QzgweDMwIH0sCi0JCXsgIlZHQV84MHg1MCIsCQlTV19WR0FfQzgweDUwIH0sCi0JCXsgIlZHQV84 MHg2MCIsCQlTV19WR0FfQzgweDYwIH0sCisJCXsgIjgweDI1IiwgICAgICAgIFNXX1RFWFRfODB4 MjUsICAgTV9URVhUXzgweDI1IH0sCisJCXsgIjgweDMwIiwgICAgICAgIFNXX1RFWFRfODB4MzAs ICAgTV9URVhUXzgweDMwIH0sCisJCXsgIjgweDQzIiwgICAgICAgIFNXX1RFWFRfODB4NDMsICAg TV9URVhUXzgweDQzIH0sCisJCXsgIjgweDUwIiwgICAgICAgIFNXX1RFWFRfODB4NTAsICAgTV9U RVhUXzgweDUwIH0sCisJCXsgIjgweDYwIiwgICAgICAgIFNXX1RFWFRfODB4NjAsICAgTV9URVhU XzgweDYwIH0sCisJCXsgIjEzMngyNSIsICAgICAgIFNXX1RFWFRfMTMyeDI1LCAgTV9URVhUXzEz MngyNSB9LAorCQl7ICIxMzJ4MzAiLCAgICAgICBTV19URVhUXzEzMngzMCwgIE1fVEVYVF8xMzJ4 MzAgfSwKKwkJeyAiMTMyeDQzIiwgICAgICAgU1dfVEVYVF8xMzJ4NDMsICBNX1RFWFRfMTMyeDQz IH0sCisJCXsgIjEzMng1MCIsICAgICAgIFNXX1RFWFRfMTMyeDUwLCAgTV9URVhUXzEzMng1MCB9 LAorCQl7ICIxMzJ4NjAiLCAgICAgICBTV19URVhUXzEzMng2MCwgIE1fVEVYVF8xMzJ4NjAgfSwK KwkJeyAiVkdBXzQweDI1IiwgICAgU1dfVkdBX0M0MHgyNSwgICBNX1ZHQV9DNDB4MjUgfSwKKwkJ eyAiVkdBXzgweDI1IiwgICAgU1dfVkdBX0M4MHgyNSwgICBNX1ZHQV9DODB4MjUgfSwKKwkJeyAi VkdBXzgweDMwIiwgICAgU1dfVkdBX0M4MHgzMCwgICBNX1ZHQV9DODB4MzAgfSwKKwkJeyAiVkdB XzgweDUwIiwgICAgU1dfVkdBX0M4MHg1MCwgICBNX1ZHQV9DODB4NTAgfSwKKwkJeyAiVkdBXzgw eDYwIiwgICAgU1dfVkdBX0M4MHg2MCwgICBNX1ZHQV9DODB4NjAgfSwKICNpZmRlZiBTV19WR0Ff QzkweDI1Ci0JCXsgIlZHQV85MHgyNSIsCQlTV19WR0FfQzkweDI1IH0sCi0JCXsgIlZHQV85MHgz MCIsCQlTV19WR0FfQzkweDMwIH0sCi0JCXsgIlZHQV85MHg0MyIsCQlTV19WR0FfQzkweDQzIH0s Ci0JCXsgIlZHQV85MHg1MCIsCQlTV19WR0FfQzkweDUwIH0sCi0JCXsgIlZHQV85MHg2MCIsCQlT V19WR0FfQzkweDYwIH0sCisJCXsgIlZHQV85MHgyNSIsICAgIFNXX1ZHQV9DOTB4MjUsICAgTV9W R0FfQzkweDI1IH0sCisJCXsgIlZHQV85MHgzMCIsICAgIFNXX1ZHQV9DOTB4MzAsICAgTV9WR0Ff QzkweDMwIH0sCisJCXsgIlZHQV85MHg0MyIsICAgIFNXX1ZHQV9DOTB4NDMsICAgTV9WR0FfQzkw eDQzIH0sCisJCXsgIlZHQV85MHg1MCIsICAgIFNXX1ZHQV9DOTB4NTAsICAgTV9WR0FfQzkweDUw IH0sCisJCXsgIlZHQV85MHg2MCIsICAgIFNXX1ZHQV9DOTB4NjAsICAgTV9WR0FfQzkweDYwIH0s CiAjZW5kaWYKLQkJeyAiVkdBXzMyMHgyMDAiLAlTV19WR0FfQ0czMjAgfSwKLQkJeyAiRUdBXzgw eDI1IiwJCVNXX0VOSF9DODB4MjUgfSwKLQkJeyAiRUdBXzgweDQzIiwJCVNXX0VOSF9DODB4NDMg fSwKLQkJeyAiVkVTQV8xMzJ4MjUiLAlTV19WRVNBX0MxMzJ4MjUgfSwKLQkJeyAiVkVTQV8xMzJ4 NDMiLAlTV19WRVNBX0MxMzJ4NDMgfSwKLQkJeyAiVkVTQV8xMzJ4NTAiLAlTV19WRVNBX0MxMzJ4 NTAgfSwKLQkJeyAiVkVTQV8xMzJ4NjAiLAlTV19WRVNBX0MxMzJ4NjAgfSwKLQkJeyAiVkVTQV84 MDB4NjAwIiwJU1dfVkVTQV84MDB4NjAwIH0sCi0JCXsgTlVMTCB9LAorCQl7ICJWR0FfMzIweDIw MCIsCVNXX1ZHQV9DRzMyMCwJTV9DRzMyMCB9LAorCQl7ICJFR0FfODB4MjUiLAkJU1dfRU5IX0M4 MHgyNSwJTV9FTkhfQzgweDI1IH0sCisJCXsgIkVHQV84MHg0MyIsCQlTV19FTkhfQzgweDQzLAlN X0VOSF9DODB4NDMgfSwKKwkJeyAiVkVTQV8xMzJ4MjUiLAlTV19WRVNBX0MxMzJ4MjUsTV9WRVNB X0MxMzJ4MjUgfSwKKwkJeyAiVkVTQV8xMzJ4NDMiLAlTV19WRVNBX0MxMzJ4NDMsTV9WRVNBX0Mx MzJ4NDMgfSwKKwkJeyAiVkVTQV8xMzJ4NTAiLAlTV19WRVNBX0MxMzJ4NTAsTV9WRVNBX0MxMzJ4 NTAgfSwKKwkJeyAiVkVTQV8xMzJ4NjAiLAlTV19WRVNBX0MxMzJ4NjAsTV9WRVNBX0MxMzJ4NjAg fSwKKyAgICAgICAgICAJeyAiVkVTQV84MDB4NjAwIiwJU1dfVkVTQV84MDB4NjAwLE1fVkVTQV84 MDB4NjAwIH0sCisJCXsgTlVMTCwgMCwgMCB9LAogCX07CisKKyAgICAgICAgICBpbnQgbmV3X21v ZGVfbnVtID0gMDsKIAl1bnNpZ25lZCBsb25nIG1vZGUgPSAwOwogCWludCBjdXJfbW9kZTsgCiAJ aW50IGlvZXJyOwpAQCAtMzcxLDM5ICs1ODcsOTQgQEAKIAogCWlmIChpb2N0bCgwLCBDT05TX0dF VCwgJmN1cl9tb2RlKSA8IDApCiAJCWVycigxLCAiY2Fubm90IGdldCB0aGUgY3VycmVudCB2aWRl byBtb2RlIik7Ci0JaWYgKCppbmRleCA8IGFyZ2MpIHsKLQkJZm9yIChpID0gMDsgbW9kZXNbaV0u bmFtZSAhPSBOVUxMOyArK2kpIHsKLQkJCWlmICghc3RyY21wKGFyZ3ZbKmluZGV4XSwgbW9kZXNb aV0ubmFtZSkpIHsKLQkJCQltb2RlID0gbW9kZXNbaV0ubW9kZTsKLQkJCQlicmVhazsKKworCS8q CisJICogUGFyc2UgdGhlIHZpZGVvIG1vZGUgYXJndW1lbnQuLi4KKwkgKi8KKworCWlmICgqbW9k ZV9pbmRleCA8IGFyZ2MpIHsKKwkJaWYgKCFzdHJuY21wKGFyZ3ZbKm1vZGVfaW5kZXhdLCAiTU9E RV8iLCA1KSkgeworCQkJaWYgKCFpc251bWJlcihhcmd2Wyptb2RlX2luZGV4XVs1XSkpCisJCQkJ ZXJyeCgxLCAiaW52YWxpZCB2aWRlbyBtb2RlIG51bWJlciIpOworCisJCQluZXdfbW9kZV9udW0g PSBhdG9pKCZhcmd2Wyptb2RlX2luZGV4XVs1XSk7CisJfSBlbHNlIHsKKwkJCWZvciAoaSA9IDA7 IG1vZGVzW2ldLm5hbWUgIT0gTlVMTDsgKytpKSB7CisJCQkJaWYgKCFzdHJjbXAoYXJndlsqbW9k ZV9pbmRleF0sIG1vZGVzW2ldLm5hbWUpKSB7CisJCQkJCW1vZGUgPSBtb2Rlc1tpXS5tb2RlOwor CQkJCQluZXdfbW9kZV9udW0gPSBtb2Rlc1tpXS5tb2RlX251bTsKKwkJCQkJYnJlYWs7CisJCQkJ fQogCQkJfQorCisJCQlpZiAobW9kZXNbaV0ubmFtZSA9PSBOVUxMKQorCQkJCXJldHVybiBFWElU X0ZBSUxVUkU7CisJCQlpZiAoaW9jdGwoMCwgbW9kZSwgTlVMTCkgPCAwKSB7CisJCQkJd2Fybigi Y2Fubm90IHNldCB2aWRlb21vZGUiKTsKKwkJCQlyZXR1cm4gRVhJVF9GQUlMVVJFOworCQkJfQor CQl9CisKKwkJLyoKKwkJICogQ29sbGVjdCBlbm91Z2ggaW5mb3JtYXRpb24gYWJvdXQgdGhlIG5l dyB2aWRlbyBtb2RlLi4uCisJCSAqLworCisJCW5ld19tb2RlX2luZm8udmlfbW9kZSA9IG5ld19t b2RlX251bTsKKworCQlpZiAoaW9jdGwoMCwgQ09OU19NT0RFSU5GTywgJm5ld19tb2RlX2luZm8p ID09IC0xKSB7CisJCQlyZXZlcnQoKTsKKwkJCWVycmMoMSwgZXJybm8sICJvYnRhaW5pbmcgbmV3 IHZpZGVvIG1vZGUgcGFyYW1ldGVycyIpOwogCQl9Ci0JCWlmIChtb2Rlc1tpXS5uYW1lID09IE5V TEwpCi0JCQlyZXR1cm4gRVhJVF9GQUlMVVJFOwotCQlpZiAoaW9jdGwoMCwgbW9kZSwgTlVMTCkg PCAwKSB7Ci0JCQl3YXJuKCJjYW5ub3Qgc2V0IHZpZGVvbW9kZSIpOwotCQkJcmV0dXJuIEVYSVRf RkFJTFVSRTsKLQkJfQotCQlpZiAobW9kZSA9PSBTV19WRVNBXzgwMHg2MDApIHsKLQkJCS8qIGNv bHVtbnMgKi8KLQkJCWlmICgodmVzYV9jb2xzICogOCA+IDgwMCkgfHwgKHZlc2FfY29scyA8PSAw KSkgewotCQkJCXdhcm54KCJpbmNvcnJlY3QgbnVtYmVyIG9mIGNvbHVtbnM6ICVkIiwKLQkJCQkg ICAgICB2ZXNhX2NvbHMpOwotCQkJCXNpemVbMF0gPSBfVkVTQV84MDB4NjAwX0RGTF9DT0xTOwor CisJCWlmIChtb2RlID09IDApIHsKKwkJCWlmIChuZXdfbW9kZV9udW0gPj0gTV9WRVNBX0JBU0Up CisJCQkJbW9kZSA9IF9JTygnVicsIG5ld19tb2RlX251bSAtIE1fVkVTQV9CQVNFKTsKKwkJCWVs c2UKKwkJCQltb2RlID0gX0lPKCdTJywgbmV3X21vZGVfbnVtKTsKKwl9CisKKwkJLyoKKwkJICog VHJ5IHNldHRpbmcgdGhlIG5ldyBtb2RlLgorCQkgKi8KKworCQlpZiAoaW9jdGwoMCwgbW9kZSwg TlVMTCkgPT0gLTEpIHsKKwkJCXJldmVydCgpOworCQkJZXJyYygxLCBlcnJubywgInNldHRpbmcg dmlkZW8gbW9kZSIpOworCQl9CisKKwkJLyoKKwkJICogRm9yIHJhc3RlciBtb2RlcyBpdCdzIG5v dCBlbm91Z2ggdG8ganVzdCBzZXQgdGhlIG1vZGUuCisJCSAqIFdlIGFsc28gbmVlZCB0byBleHBs aWNpdGx5IHNldCB0aGUgcmFzdGVyIG1vZGUuCisJCSAqLworCisJCWlmIChuZXdfbW9kZV9pbmZv LnZpX2ZsYWdzICYgVl9JTkZPX0dSQVBISUNTKSB7CisJCQkvKiBmb250IHNpemUgKi8KKworCQkJ aWYgKGZvbnRfaGVpZ2h0ID09IDApCisJCQkJZm9udF9oZWlnaHQgPSBjdXJfaW5mby5jb25zb2xl X2luZm8uZm9udF9zaXplOworCisJCQlzaXplWzJdID0gZm9udF9oZWlnaHQ7CisKKwkJCS8qIGFk anVzdCBjb2x1bW5zICovCisKKwkJCWlmICgodmVzYV9jb2xzICogOCA+IG5ld19tb2RlX2luZm8u dmlfd2lkdGgpIHx8CisJCQkgICAgKHZlc2FfY29scyA8PSAwKSkgeworCQkJCXNpemVbMF0gPSBu ZXdfbW9kZV9pbmZvLnZpX3dpZHRoIC8gODsKIAkJCX0gZWxzZSB7CiAJCQkJc2l6ZVswXSA9IHZl c2FfY29sczsKIAkJCX0KLQkJCS8qIHJvd3MgKi8KLQkJCWlmICgodmVzYV9yb3dzICogX1ZFU0Ff ODAweDYwMF9ERkxfRk5TWiA+IDYwMCkgfHwKLQkJCSAgICAodmVzYV9yb3dzIDw9MCkpIHsKLQkJ CQl3YXJueCgiaW5jb3JyZWN0IG51bWJlciBvZiByb3dzOiAlZCIsCi0JCQkJICAgICAgdmVzYV9y b3dzKTsKLQkJCQlzaXplWzFdID0gX1ZFU0FfODAweDYwMF9ERkxfUk9XUzsKKwkJCS8qIGFkanVz dCByb3dzICovCisKKwkJCWlmICgodmVzYV9yb3dzICogZm9udF9oZWlnaHQgPiBuZXdfbW9kZV9p bmZvLnZpX2hlaWdodCkgfHwKKwkJCSAgICAodmVzYV9yb3dzIDw9IDApKSB7CisJCQkJc2l6ZVsx XSA9IG5ld19tb2RlX2luZm8udmlfaGVpZ2h0IC8KKwkJCQkJICBmb250X2hlaWdodDsKIAkJCX0g ZWxzZSB7CiAJCQkJc2l6ZVsxXSA9IHZlc2Ffcm93czsKIAkJCX0KLQkJCS8qIGZvbnQgc2l6ZSAq LwotCQkJc2l6ZVsyXSA9IF9WRVNBXzgwMHg2MDBfREZMX0ZOU1o7CisvLwkJCS8qIGZvbnQgc2l6 ZSAqLworLy8JCQlzaXplWzJdID0gX1ZFU0FfODAweDYwMF9ERkxfRk5TWjsKKy8qIHNldCByYXN0 ZXIgbW9kZSAqLwogCQkJaWYgKGlvY3RsKDAsIEtEUkFTVEVSLCBzaXplKSkgewogCQkJCWlvZXJy ID0gZXJybm87CiAJCQkJaWYgKGN1cl9tb2RlID49IE1fVkVTQV9CQVNFKQpAQCAtNDEyLDQ1ICs2 ODMsNjQgQEAKIAkJCQkJICAgIE5VTEwpOwogCQkJCWVsc2UKIAkJCQkJaW9jdGwoMCwgX0lPKCdT JywgY3VyX21vZGUpLCBOVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICByZXZlcnQoKTsKIAkJCQl3YXJuYyhpb2VyciwgImNhbm5vdCBhY3RpdmF0ZSByYXN0ZXIg ZGlzcGxheSIpOwogCQkJCXJldHVybiBFWElUX0ZBSUxVUkU7CiAJCQl9CiAJCX0KLQkJKCppbmRl eCkrKzsKKy8vCQkoKmluZGV4KSsrOworCisJCXZpZGVvX21vZGVfY2hhbmdlZCA9IDE7CisKKwkJ KCptb2RlX2luZGV4KSsrOwogCX0KIAlyZXR1cm4gRVhJVF9TVUNDRVNTOwogfQogCisvKgorICog UmV0dXJuIHRoZSBudW1iZXIgZm9yIGEgc3BlY2lmaWVkIGNvbG9yIG5hbWUuCisgKi8KKwogaW50 CiBnZXRfY29sb3JfbnVtYmVyKGNoYXIgKmNvbG9yKQogewogCWludCBpOwogCiAJZm9yIChpPTA7 IGk8MTY7IGkrKykKK3sKIAkJaWYgKCFzdHJjbXAoY29sb3IsIGxlZ2FsX2NvbG9yc1tpXSkpCiAJ CQlyZXR1cm4gaTsKK30KIAlyZXR1cm4gLTE7CiB9CiAKKy8qCisgKiBHZXQgbm9ybWFsIHRleHQg YW5kIGJhY2tncm91bmQgY29sb3JzLgorICovCisKIHZvaWQKLXNldF9ub3JtYWxfY29sb3JzKGlu dCBhcmdjLCBjaGFyICoqYXJndiwgaW50ICppbmRleCkKK2dldF9ub3JtYWxfY29sb3JzKGludCBh cmdjLCBjaGFyICoqYXJndiwgaW50ICpfaW5kZXgpCiB7CiAJaW50IGNvbG9yOwogCi0JaWYgKCpp bmRleCA8IGFyZ2MgJiYgKGNvbG9yID0gZ2V0X2NvbG9yX251bWJlcihhcmd2WyppbmRleF0pKSAh PSAtMSkgewotCQkoKmluZGV4KSsrOworCWlmICgqX2luZGV4IDwgYXJnYyAmJiAoY29sb3IgPSBn ZXRfY29sb3JfbnVtYmVyKGFyZ3ZbKl9pbmRleF0pKSAhPSAtMSkgeworCQkoKl9pbmRleCkrKzsK IAkJZnByaW50ZihzdGRlcnIsICIbWz0lZEYiLCBjb2xvcik7Ci0JCWlmICgqaW5kZXggPCBhcmdj Ci0JCSAgICAmJiAoY29sb3IgPSBnZXRfY29sb3JfbnVtYmVyKGFyZ3ZbKmluZGV4XSkpICE9IC0x CisJCWlmICgqX2luZGV4IDwgYXJnYworCQkgICAgJiYgKGNvbG9yID0gZ2V0X2NvbG9yX251bWJl cihhcmd2WypfaW5kZXhdKSkgIT0gLTEKIAkJICAgICYmIGNvbG9yIDwgOCkgewotCQkJKCppbmRl eCkrKzsKKwkJCSgqX2luZGV4KSsrOwogCQkJZnByaW50ZihzdGRlcnIsICIbWz0lZEciLCBjb2xv cik7CiAJCX0KIAl9CiB9CiAKKy8qCisgKiBHZXQgcmV2ZXJzZSB0ZXh0IGFuZCBiYWNrZ3JvdW5k IGNvbG9ycy4KKyAqLworCiB2b2lkCi1zZXRfcmV2ZXJzZV9jb2xvcnMoaW50IGFyZ2MsIGNoYXIg Kiphcmd2LCBpbnQgKmluZGV4KQorZ2V0X3JldmVyc2VfY29sb3JzKGludCBhcmdjLCBjaGFyICoq YXJndiwgaW50ICppbmRleCkKIHsKIAlpbnQgY29sb3I7CiAKQEAgLTQ2NSwyMyArNzU1LDUyIEBA CiAJfQogfQogCisvKgorICogU2V0IG5vcm1hbCBhbmQgcmV2ZXJzZSBmb3JlZ3JvdW5kIGFuZCBi YWNrZ3JvdW5kIGNvbG9ycy4KKyAqLworCitzdGF0aWMgdm9pZAorc2V0X2NvbG9ycyh2b2lkKQor eworCWZwcmludGYoc3RkZXJyLCAiG1s9JWRGIiwgbm9ybWFsX2ZvcmVfY29sb3IpOworCWZwcmlu dGYoc3RkZXJyLCAiG1s9JWRHIiwgbm9ybWFsX2JhY2tfY29sb3IpOworCWZwcmludGYoc3RkZXJy LCAiG1s9JWRIIiwgcmV2ZXJzX2ZvcmVfY29sb3IpOworCWZwcmludGYoc3RkZXJyLCAiG1s9JWRJ IiwgcmV2ZXJzX2JhY2tfY29sb3IpOworfQorCisKKy8qCisgKiBTd2l0Y2ggdG8gdmlydHVhbCB0 ZXJtaW5hbCAjYXJnLgorICovCisKIHZvaWQKIHNldF9jb25zb2xlKGNoYXIgKmFyZykKIHsKIAlp bnQgbjsKIAotCWlmKCAhYXJnIHx8IHN0cnNwbihhcmcsIjAxMjM0NTY3ODkiKSAhPSBzdHJsZW4o YXJnKSkgewotCQl3YXJueCgiYmFkIGNvbnNvbGUgbnVtYmVyIik7Ci0JCXJldHVybjsKKy8vCWlm KCAhYXJnIHx8IHN0cnNwbihhcmcsIjAxMjM0NTY3ODkiKSAhPSBzdHJsZW4oYXJnKSkgeworLy8J CXdhcm54KCJiYWQgY29uc29sZSBudW1iZXIiKTsKKy8vCQlyZXR1cm47CisJaWYoIWFyZyB8fCBz dHJzcG4oYXJnLCIwMTIzNDU2Nzg5IikgIT0gc3RybGVuKGFyZykpIHsKKwkJcmV2ZXJ0KCk7CisJ CWVycngoMSwgImJhZCBjb25zb2xlIG51bWJlciIpOwogCX0KIAogCW4gPSBhdG9pKGFyZyk7CiAJ aWYgKG4gPCAxIHx8IG4gPiAxNikgewotCQl3YXJueCgiY29uc29sZSBudW1iZXIgb3V0IG9mIHJh bmdlIik7Ci0JfSBlbHNlIGlmIChpb2N0bCgwLCBWVF9BQ1RJVkFURSwgKGNhZGRyX3QpIChsb25n KSBuKSA9PSAtMSkKLQkJd2FybigiaW9jdGwoVlRfQUNUSVZBVEUpIik7CisvLwkJd2FybngoImNv bnNvbGUgbnVtYmVyIG91dCBvZiByYW5nZSIpOworLy8JfSBlbHNlIGlmIChpb2N0bCgwLCBWVF9B Q1RJVkFURSwgKGNhZGRyX3QpIChsb25nKSBuKSA9PSAtMSkKKy8vCQl3YXJuKCJpb2N0bChWVF9B Q1RJVkFURSkiKTsKKwkJcmV2ZXJ0KCk7CisJCWVycngoMSwgImNvbnNvbGUgbnVtYmVyIG91dCBv ZiByYW5nZSIpOworCX0gZWxzZSBpZiAoaW9jdGwoMCwgVlRfQUNUSVZBVEUsIChjYWRkcl90KSAo bG9uZykgbikgPT0gLTEpIHsKKwkJcmV2ZXJ0KCk7CisJCWVycmMoMSwgZXJybm8sICJzd2l0Y2hp bmcgdnR5Iik7CisJfQogfQotCisvKgorICogU2V0cyB0aGUgYm9yZGVyIGNvbG9yLgorICovCiB2 b2lkCiBzZXRfYm9yZGVyX2NvbG9yKGNoYXIgKmFyZykKIHsKQEAgLTUwMiwxMiArODIxLDE3IEBA CiAKIAlsID0gc3RydG9sKGFyZywgTlVMTCwgMCk7CiAJaWYgKChsIDwgMCkgfHwgKGwgPiBVQ0hB Ul9NQVggLSAzKSkgeworICAgICAgICAgICAgICAgICAgICByZXZlcnQoKTsKIAkJd2FybngoImFy Z3VtZW50IHRvIC1NIG11c3QgYmUgMCB0aHJvdWdoICVkIiwgVUNIQVJfTUFYIC0gMyk7CiAJCXJl dHVybjsKIAl9CiAJbW91c2Uub3BlcmF0aW9uID0gTU9VU0VfTU9VU0VDSEFSOwogCW1vdXNlLnUu bW91c2VfY2hhciA9IChpbnQpbDsKLQlpb2N0bCgwLCBDT05TX01PVVNFQ1RMLCAmbW91c2UpOwor Ly8JaW9jdGwoMCwgQ09OU19NT1VTRUNUTCwgJm1vdXNlKTsKKwlpZiAoaW9jdGwoMCwgQ09OU19N T1VTRUNUTCwgJm1vdXNlKSA9PSAtMSkgeworCQlyZXZlcnQoKTsKKwkJZXJyYygxLCBlcnJubywg InNldHRpbmcgbW91c2UgY2hhcmFjdGVyIik7CisJfQogfQogCiB2b2lkCkBAIC01MTUsMTUgKzgz OSwyNSBAQAogewogCXN0cnVjdCBtb3VzZV9pbmZvIG1vdXNlOwogCi0JaWYgKCFzdHJjbXAoYXJn LCAib24iKSkKKwlpZiAoIXN0cmNtcChhcmcsICJvbiIpKSB7CiAJCW1vdXNlLm9wZXJhdGlvbiA9 IE1PVVNFX1NIT1c7Ci0JZWxzZSBpZiAoIXN0cmNtcChhcmcsICJvZmYiKSkKKwl9IGVsc2UgaWYg KCFzdHJjbXAoYXJnLCAib2ZmIikpIHsKIAkJbW91c2Uub3BlcmF0aW9uID0gTU9VU0VfSElERTsK LQllbHNlIHsKLQkJd2FybngoImFyZ3VtZW50IHRvIC1tIG11c3QgYmUgZWl0aGVyIG9uIG9yIG9m ZiIpOwotCQlyZXR1cm47CisvLwllbHNlIHsKKy8vCQl3YXJueCgiYXJndW1lbnQgdG8gLW0gbXVz dCBiZSBlaXRoZXIgb24gb3Igb2ZmIik7CisvLwkJcmV0dXJuOworCX0KKyAgICAgICAgICBlbHNl IHsKKwkJcmV2ZXJ0KCk7CisJCWVycngoMSwgImFyZ3VtZW50IHRvIC1tIG11c3QgYmUgZWl0aGVy IG9uIG9yIG9mZiIpOwogCX0KLQlpb2N0bCgwLCBDT05TX01PVVNFQ1RMLCAmbW91c2UpOworCisJ aWYgKGlvY3RsKDAsIENPTlNfTU9VU0VDVEwsICZtb3VzZSkgPT0gLTEpIHsKKwkJcmV2ZXJ0KCk7 CisJCWVycmMoMSwgZXJybm8sICIlc2luZyB0aGUgbW91c2UiLAorCQkgICAgIG1vdXNlLm9wZXJh dGlvbiA9PSBNT1VTRV9TSE9XID8gInNob3ciIDogImhpZCIpOworCX0KKy8vCWlvY3RsKDAsIENP TlNfTU9VU0VDVEwsICZtb3VzZSk7CiB9CiAKIHZvaWQKQEAgLTUzMSwxNiArODY1LDI1IEBACiB7 CiAJaW50IGRhdGE7CiAKLQlpZiAoIXN0cmNtcChhcmcsICJvZmYiKSkKKwlpZiAoIXN0cmNtcChh cmcsICJvZmYiKSkgewogCQlkYXRhID0gMHgwMTsKLQllbHNlIGlmICghc3RyY21wKGFyZywgIm9u IikpCisJfSBlbHNlIGlmICghc3RyY21wKGFyZywgIm9uIikpIHsKIAkJZGF0YSA9IDB4MDI7Ci0J ZWxzZSB7Ci0JCXdhcm54KCJhcmd1bWVudCB0byAtUyBtdXN0IGJlIGVpdGhlciBvbiBvciBvZmYi KTsKLQkJcmV0dXJuOworLy8JfSBlbHNlIHsKKy8vCQl3YXJueCgiYXJndW1lbnQgdG8gLVMgbXVz dCBiZSBlaXRoZXIgb24gb3Igb2ZmIik7CisvLwkJcmV0dXJuOworCX0gZWxzZSB7CisJCXJldmVy dCgpOworCQllcnJ4KDEsICJhcmd1bWVudCB0byAtUyBtdXN0IGJlIGVpdGhlciBvbiBvciBvZmYi KTsKIAl9Ci0JaWYgKGlvY3RsKDAsIFZUX0xPQ0tTV0lUQ0gsICZkYXRhKSA9PSAtMSkKLQkJd2Fy bigiaW9jdGwoVlRfTE9DS1NXSVRDSCkiKTsKKworaWYgKGlvY3RsKDAsIFZUX0xPQ0tTV0lUQ0gs ICZkYXRhKSA9PSAtMSkgeworCQlyZXZlcnQoKTsKKwkJZXJyYygxLCBlcnJubywgInR1cm5pbmcg JXMgdnR5IHN3aXRjaGluZyIsCisJCSAgICAgZGF0YSA9PSAweDAxID8gIm9mZiIgOiAib24iKTsK Kwl9CisvLwlpZiAoaW9jdGwoMCwgVlRfTE9DS1NXSVRDSCwgJmRhdGEpID09IC0xKQorLy8JCXdh cm4oImlvY3RsKFZUX0xPQ0tTV0lUQ0gpIik7CiB9CiAKIHN0YXRpYyBjaGFyCkBAIC01NjcsMTUg KzkxMCwyMiBAQAogICAgIHJldHVybiBuYW1lc1tpXS5uYW1lOwogfQogCisvKgorICogU2hvdyBn cmFwaGljcyBhZGFwdGVyIGluZm9ybWF0aW9uLgorICovCisKIHZvaWQKIHNob3dfYWRhcHRlcl9p bmZvKHZvaWQpCiB7CiAJc3RydWN0IHZpZGVvX2FkYXB0ZXJfaW5mbyBhZDsKIAogCWFkLnZhX2lu ZGV4ID0gMDsKLQlpZiAoaW9jdGwoMCwgQ09OU19BRFBJTkZPLCAmYWQpKSB7Ci0JCXdhcm4oImZh aWxlZCB0byBvYnRhaW4gYWRhcHRlciBpbmZvcm1hdGlvbiIpOwotCQlyZXR1cm47CisvLwlpZiAo aW9jdGwoMCwgQ09OU19BRFBJTkZPLCAmYWQpKSB7CisvLwkJd2FybigiZmFpbGVkIHRvIG9idGFp biBhZGFwdGVyIGluZm9ybWF0aW9uIik7CisvLwkJcmV0dXJuOworCWlmIChpb2N0bCgwLCBDT05T X0FEUElORk8sICZhZCkgPT0gLTEpIHsKKwkJcmV2ZXJ0KCk7CisJCWVycmMoMSwgZXJybm8sICJv YnRhaW5pbmcgYWRhcHRlciBpbmZvcm1hdGlvbiIpOwogCX0KIAogCXByaW50ZigiZmIlZDpcbiIs IGFkLnZhX2luZGV4KTsKQEAgLTU5Myw3ICs5NDMsOSBAQAogCSAgICAgICBhZC52YV9kaXNwX3N0 YXJ0LngsIGFkLnZhX2Rpc3Bfc3RhcnQueSwgYWQudmFfbGluZV93aWR0aCk7CiAJcHJpbnRmKCIg ICAgcmVzZXJ2ZWQ6MHgleFxuIiwgYWQudmFfdW51c2VkMCk7CiB9Ci0KKy8qCisgKiBTaG93IHZp ZGVvIG1vZGUgaW5mb3JtYXRpb24uCisgKi8KIHZvaWQKIHNob3dfbW9kZV9pbmZvKHZvaWQpCiB7 CkBAIC02NDUsOCArOTk3LDEwIEBACiAJZWxzZSBpZiAoIXN0cmNtcChhcmcsICJtb2RlIikpCiAJ CXNob3dfbW9kZV9pbmZvKCk7CiAJZWxzZSB7Ci0JCXdhcm54KCJhcmd1bWVudCB0byAtaSBtdXN0 IGJlIGVpdGhlciBhZGFwdGVyIG9yIG1vZGUiKTsKLQkJcmV0dXJuOworLy8JCXdhcm54KCJhcmd1 bWVudCB0byAtaSBtdXN0IGJlIGVpdGhlciBhZGFwdGVyIG9yIG1vZGUiKTsKKy8vCQlyZXR1cm47 CisJCXJldmVydCgpOworCQllcnJ4KDEsICJhcmd1bWVudCB0byAtaSBtdXN0IGJlIGVpdGhlciBh ZGFwdGVyIG9yIG1vZGUiKTsKIAl9CiB9CiAKQEAgLTY4Miw3ICsxMDM2LDkgQEAKIAogCWluZm8u c2l6ZSA9IHNpemVvZihpbmZvKTsKIAlpZiAoaW9jdGwoMCwgQ09OU19HRVRJTkZPLCAmaW5mbykg PT0gLTEpIHsKLQkJd2FybigiZmFpbGVkIHRvIG9idGFpbiBjdXJyZW50IHZpZGVvIG1vZGUgcGFy YW1ldGVycyIpOworLy8JCXdhcm4oImZhaWxlZCB0byBvYnRhaW4gY3VycmVudCB2aWRlbyBtb2Rl IHBhcmFtZXRlcnMiKTsKKwkJcmV2ZXJ0KCk7CisJCWVycmMoMSwgZXJybm8sICJvYnRhaW5pbmcg Y3VycmVudCB2aWRlbyBtb2RlIHBhcmFtZXRlcnMiKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtNjk0 LDEzICsxMDUwLDE3IEBACiAKIAlzaG90LmJ1ZiA9IGFsbG9jYShzaG90LnhzaXplICogc2hvdC55 c2l6ZSAqIHNpemVvZih1X2ludDE2X3QpKTsKIAlpZiAoc2hvdC5idWYgPT0gTlVMTCkgewotCQl3 YXJuKCJmYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBkdW1wIik7Ci0JCXJldHVybjsKKy8v CQl3YXJuKCJmYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBkdW1wIik7CisJCXJldmVydCgp OworCQllcnJ4KDEsICJmYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBkdW1wIik7CisvLwkJ cmV0dXJuOwogCX0KIAogCWlmIChpb2N0bCgwLCBDT05TX1NDUlNIT1QsICZzaG90KSA9PSAtMSkg ewotCQl3YXJuKCJmYWlsZWQgdG8gZ2V0IGR1bXAgb2YgdGhlIHNjcmVlbiIpOwotCQlyZXR1cm47 CisvLwkJd2FybigiZmFpbGVkIHRvIGdldCBkdW1wIG9mIHRoZSBzY3JlZW4iKTsKKy8vCQlyZXR1 cm47CisJCXJldmVydCgpOworCQllcnJjKDEsIGVycm5vLCAiZHVtcGluZyBzY3JlZW4iKTsKIAl9 CiAKIAlpZiAobW9kZSA9PSBEVU1QX0ZNVF9SQVcpIHsKQEAgLTcwOCw4ICsxMDY4LDEwIEBACiAJ CSAgICAgICBzaG90LnhzaXplLCBzaG90LnlzaXplKTsKIAkJZmZsdXNoKHN0ZG91dCk7CiAKLQkJ KHZvaWQpd3JpdGUoU1RET1VUX0ZJTEVOTywgc2hvdC5idWYsCi0JCQkgICAgc2hvdC54c2l6ZSAq IHNob3QueXNpemUgKiBzaXplb2YodV9pbnQxNl90KSk7CisvLwkJKHZvaWQpd3JpdGUoU1RET1VU X0ZJTEVOTywgc2hvdC5idWYsCisvLwkJCSAgICBzaG90LnhzaXplICogc2hvdC55c2l6ZSAqIHNp emVvZih1X2ludDE2X3QpKTsKKwkJd3JpdGUoU1RET1VUX0ZJTEVOTywgc2hvdC5idWYsCisJCSAg ICAgIHNob3QueHNpemUgKiBzaG90LnlzaXplICogc2l6ZW9mKHVfaW50MTZfdCkpOwogCX0gZWxz ZSB7CiAJCWNoYXIgKmxpbmU7CiAJCWludCB4LCB5OwpAQCAtNzE3LDggKzEwNzksMTAgQEAKIAog CQlsaW5lID0gYWxsb2NhKHNob3QueHNpemUgKyAxKTsKIAkJaWYgKGxpbmUgPT0gTlVMTCkgewot CQkJd2FybigiZmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgbGluZSBidWZmZXIiKTsKLQkJ CXJldHVybjsKKy8vCQkJd2FybigiZmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgbGluZSBi dWZmZXIiKTsKKy8vCQkJcmV0dXJuOworCQkJcmV2ZXJ0KCk7CisJCQllcnJ4KDEsICJmYWlsZWQg dG8gYWxsb2NhdGUgbWVtb3J5IGZvciBsaW5lIGJ1ZmZlciIpOwogCQl9CiAKIAkJZm9yICh5ID0g MDsgeSA8IHNob3QueXNpemU7IHkrKykgewpAQCAtNzQyLDcgKzExMDYsOSBAQAogCiAJcmV0dXJu OwogfQotCisvKgorICogU2V0IHRoZSBjb25zb2xlIGhpc3RvcnkgYnVmZmVyIHNpemUuCisgKi8K IHZvaWQKIHNldF9oaXN0b3J5KGNoYXIgKm9wdCkKIHsKQEAgLTc1MCwxOSArMTExNiwzMiBAQAog CiAJc2l6ZSA9IGF0b2kob3B0KTsKIAlpZiAoKCpvcHQgPT0gJ1wwJykgfHwgc2l6ZSA8IDApIHsK LQkJd2FybngoImFyZ3VtZW50IG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXIiKTsKLQkJcmV0dXJu OworLy8JCXdhcm54KCJhcmd1bWVudCBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyIik7CisvLwkJ cmV0dXJuOworCQlyZXZlcnQoKTsKKwkJZXJyeCgxLCAiYXJndW1lbnQgbXVzdCBiZSBhIHBvc2l0 aXZlIG51bWJlciIpOworCX0KKworCWlmIChpb2N0bCgwLCBDT05TX0hJU1RPUlksICZzaXplKSA9 PSAtMSkgeworCQlyZXZlcnQoKTsKKwkJZXJyYygxLCBlcnJubywgInNldHRpbmcgaGlzdG9yeSBi dWZmZXIgc2l6ZSIpOwogCX0KLQlpZiAoaW9jdGwoMCwgQ09OU19ISVNUT1JZLCAmc2l6ZSkgPT0g LTEpCi0JCXdhcm4oInNldHRpbmcgaGlzdG9yeSBidWZmZXIgc2l6ZSIpOwogfQogCisvKgorICog Q2xlYXIgdGhlIGNvbnNvbGUgaGlzdG9yeSBidWZmZXIuCisgKi8KKwogdm9pZAogY2xlYXJfaGlz dG9yeSgpCiB7CiAKLQlpZiAoaW9jdGwoMCwgQ09OU19DTFJISVNUKSA9PSAtMSkKLQkJd2Fybigi Y2xlYXIgaGlzdG9yeSBidWZmZXIiKTsKKy8vCWlmIChpb2N0bCgwLCBDT05TX0NMUkhJU1QpID09 IC0xKQorLy8JCXdhcm4oImNsZWFyIGhpc3RvcnkgYnVmZmVyIik7CisJaWYgKGlvY3RsKDAsIENP TlNfQ0xSSElTVCkgPT0gLTEpIHsKKwkJcmV2ZXJ0KCk7CisJCWVycmMoMSwgZXJybm8sICJjbGVh cmluZyBoaXN0b3J5IGJ1ZmZlciIpOworCX0KIH0KIAogaW50CkBAIC03NzEsMTIgKzExNTAsMTAg QEAKIAljaGFyCSpmb250LCAqdHlwZTsKIAlpbnQJZHVtcG1vZCwgZHVtcG9wdCwgb3B0OwogCWlu dAlyZXRlcnI7Ci0KKwlpbml0KCk7CiAJaW5mby5zaXplID0gc2l6ZW9mKGluZm8pOwotCWlmIChh cmdjID09IDEpCi0JCXVzYWdlKCk7Ci0JCS8qIE5vdCByZWFjaGVkICovCi0JaWYgKGlvY3RsKDAs IENPTlNfR0VUSU5GTywgJmluZm8pIDwgMCkKKworCWlmIChpb2N0bCgwLCBDT05TX0dFVElORk8s ICZpbmZvKSA9PSAtMSkKIAkJZXJyKDEsICJtdXN0IGJlIG9uIGEgdmlydHVhbCBjb25zb2xlIik7 CiAJZHVtcG1vZCA9IDA7CiAJZHVtcG9wdCA9IERVTVBfRkJGOwpAQCAtODA0LDkgKzExODEsMTIg QEAKIAkJCWxvYWRfZm9udCh0eXBlLCBmb250KTsKIAkJCWJyZWFrOwogCQljYXNlICdnJzoKLQkJ CWlmIChzc2NhbmYob3B0YXJnLCAiJWR4JWQiLCAmdmVzYV9jb2xzLAotCQkJICAgICZ2ZXNhX3Jv d3MpICE9IDIpIHsKLQkJCQl3YXJueCgiaW5jb3JyZWN0IGdlb21ldHJ5OiAlcyIsIG9wdGFyZyk7 CisvLwkJCWlmIChzc2NhbmYob3B0YXJnLCAiJWR4JWQiLCAmdmVzYV9jb2xzLAorLy8JCQkgICAg JnZlc2Ffcm93cykgIT0gMikgeworCisJCQkJaWYgKHNzY2FuZihvcHRhcmcsICIlZHglZCIsCisJ CQkgICAgJnZlc2FfY29scywgJnZlc2Ffcm93cykgIT0gMikgeworCQkJCXJldmVydCgpOwkJd2Fy bngoImluY29ycmVjdCBnZW9tZXRyeTogJXMiLCBvcHRhcmcpOwogCQkJCXVzYWdlKCk7CiAJCQl9 CiAJCQlicmVhazsKQEAgLTgzOCw3ICsxMjE4LDcgQEAKIAkJCWR1bXBtb2QgPSBEVU1QX0ZNVF9U WFQ7CiAJCQlicmVhazsKIAkJY2FzZSAncic6Ci0JCQlzZXRfcmV2ZXJzZV9jb2xvcnMoYXJnYywg YXJndiwgJm9wdGluZCk7CisJCQlnZXRfcmV2ZXJzZV9jb2xvcnMoYXJnYywgYXJndiwgJm9wdGlu ZCk7CiAJCQlicmVhazsKIAkJY2FzZSAnUyc6CiAJCQlzZXRfbG9ja3N3aXRjaChvcHRhcmcpOwpA QCAtODU4LDEzICsxMjM4LDMyIEBACiAJaWYgKGR1bXBtb2QgIT0gMCkKIAkJZHVtcF9zY3JlZW4o ZHVtcG1vZCwgZHVtcG9wdCk7CiAJcmV0ZXJyID0gdmlkZW9fbW9kZShhcmdjLCBhcmd2LCAmb3B0 aW5kKTsKLQlzZXRfbm9ybWFsX2NvbG9ycyhhcmdjLCBhcmd2LCAmb3B0aW5kKTsKKwlnZXRfbm9y bWFsX2NvbG9ycyhhcmdjLCBhcmd2LCAmb3B0aW5kKTsKIAlpZiAob3B0aW5kIDwgYXJnYyAmJiAh c3RyY21wKGFyZ3Zbb3B0aW5kXSwgInNob3ciKSkgewogCQl0ZXN0X2ZyYW1lKCk7CiAJCW9wdGlu ZCsrOwogCX0KKworCXZpZGVvX21vZGUoYXJnYywgYXJndiwgJm9wdGluZCk7CisKKwlnZXRfbm9y bWFsX2NvbG9ycyhhcmdjLCBhcmd2LCAmb3B0aW5kKTsKKworCWlmIChjb2xvcnNfY2hhbmdlZCB8 fCB2aWRlb19tb2RlX2NoYW5nZWQpIHsKKwkJaWYgKCEobmV3X21vZGVfaW5mby52aV9mbGFncyAm IFZfSU5GT19HUkFQSElDUykpIHsKKwkJCWlmICgobm9ybWFsX2JhY2tfY29sb3IgPCA4KSAmJiAo cmV2ZXJzX2JhY2tfY29sb3IgPCA4KSkgeworCQkJCXNldF9jb2xvcnMoKTsKKwkJCX0gZWxzZSB7 CisJCQkJcmV2ZXJ0KCk7CisJCQkJZXJyeCgxLCAiYmcgY29sb3IgZm9yIHRleHQgbW9kZXMgbXVz dCBiZSA8IDgiKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXNldF9jb2xvcnMoKTsKKwkJfQorCX0K KwogCWlmICgob3B0aW5kICE9IGFyZ2MpIHx8IChhcmdjID09IDEpKQogCQl1c2FnZSgpOwogCXJl dHVybiByZXRlcnI7CiB9CisKIAo= --------------Boundary-00=_BVNA40MWKGMMYJ0CCJD0--