From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932156AbWAEXDW (ORCPT ); Thu, 5 Jan 2006 18:03:22 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S932177AbWAEXDW (ORCPT ); Thu, 5 Jan 2006 18:03:22 -0500 Received: from web26909.mail.ukl.yahoo.com ([217.146.176.98]:39055 "HELO web26909.mail.ukl.yahoo.com") by vger.kernel.org with SMTP id S932156AbWAEXDT (ORCPT ); Thu, 5 Jan 2006 18:03:19 -0500 DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=s1024; d=yahoo.fr; h=Message-ID:Received:Date:From:Subject:To:Cc:MIME-Version:Content-Type:Content-Transfer-Encoding; b=F/xr5LCwqSla823HsMydfJmXNIOPt1I+0lULeAoH40PnmOUhLSKPn6daNYdVvJl6b39CNGkGII4Y3sUMYBHJL00EgjKlJ9FX6rd7WgGStqZnU/Qv/8Dfyqo9ksrdcnOAt+3Inc/mgUmC8VJPkqjupca5SHzboIiy8ZiyxcmvgPA= ; Message-ID: <20060105230312.32885.qmail@web26909.mail.ukl.yahoo.com> Date: Fri, 6 Jan 2006 00:03:12 +0100 (CET) From: Etienne Lorrain Subject: [PATCH 1/3] boot with Gujin: add script/{gzcopy.c,gzparam.c} to generate linux.kgz file format To: Andrew Morton Cc: linux-kernel@vger.kernel.org MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="0-1015933241-1136502192=:28489" Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org --0-1015933241-1136502192=:28489 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit Content-Id: Content-Disposition: inline Gujin is a GPL bootloader (homepage http://gujin.org) which can not only load the standard vmlinuz file format but also a simpler format, called Gujin native format, filename using the extension *.kgz. It is simply the standard ELF executable file vmlinux translated to binary image by OBJCOPY and compressed by GZIP. The GZIP format (rfc1952) define a way to add a comment to the GZIP file, it is used extensively to add information to the kernel, like the loading and running address, the processors supported, the 4 Kb memory parameter address, the text/video modes accepted at startup. This comment string is unlimited (finishes at the next '\0'). Unfortunately there isn't any tools around to display or manipulate this field, vi/emacs would work but are not the best tools. So this patch create a file script/gzcopy.c and Makefile rules to produce script/gzcopy which can be use to view, change (set/append/prepend) comment to GZIP files. Type "./script/gzcopy --help" for a list of switches. This first file (and only this one) is released under a BSD license to enable anybody else to add it in a "GZIP distribution" if needed, it follow special rules for indentation and a special way to define strings so that localisation should be simpler. This patch also contains the simple script/gzparam.c file and its Makefile rules - that is a simple standalone program to display a text line on stdout containing the base pattern to generate the GZIP comment itself for this configured kernel. It extract the Linux configuration using file ../include/linux/autoconf.h because that seems to be the easiest way when compilation time is not a problem. Just type "make script/gzparam && ./script/gzparam" to see the line produced after the kernel configuration. Signed-off-by: etienne_lorrain@yahoo.fr ___________________________________________________________________________ Nouveau : téléphonez moins cher avec Yahoo! Messenger ! Découvez les tarifs exceptionnels pour appeler la France et l'international. Téléchargez sur http://fr.messenger.yahoo.com --0-1015933241-1136502192=:28489 Content-Type: application/octet-stream; name="patch-2.6.15-mm1-1" Content-Transfer-Encoding: base64 Content-Description: 4104093663-patch-2.6.15-mm1-1 Content-Disposition: attachment; filename="patch-2.6.15-mm1-1" ZGlmZiAtdXByTiAtWCBsaW51eC0yLjYuMTUtbW0xL0RvY3VtZW50YXRpb24v ZG9udGRpZmYgbGludXgtMi42LjE1LW1tMS9NYWtlZmlsZSBsaW51eC0yLjYu MTUtbW0xLTEvTWFrZWZpbGUKLS0tIGxpbnV4LTIuNi4xNS1tbTEvTWFrZWZp bGUJMjAwNi0wMS0wNSAyMDozMDozOS4wMDAwMDAwMDAgKzAwMDAKKysrIGxp bnV4LTIuNi4xNS1tbTEtMS9NYWtlZmlsZQkyMDA2LTAxLTA1IDIwOjMxOjMw LjAwMDAwMDAwMCArMDAwMApAQCAtNzY5LDYgKzc2OSwxOSBAQCB2bWxpbnV4 OiAkKHZtbGludXgtbGRzKSAkKHZtbGludXgtaW5pdCkgCiAJJChjYWxsIGlm X2NoYW5nZWRfcnVsZSx2bWxpbnV4X18pCiAJJChRKXJtIC1mIC5vbGRfdmVy c2lvbgogCisjIFV0aWxpdHkgdG8gZGlzcGxheSB0aGUga2VybmVsIGNvbXBp bGUgdGltZSBwYXJhbWV0ZXJzCitxdWlldF9jbWRfZ3pwYXJhbSA9IEhPU1RD QyAgJEAKKyAgICAgIGNtZF9nenBhcmFtID0gJChIT1NUQ0MpICQoSE9TVENG TEFHUykgLVdsLCItdSBfX0VSUk9SIiAtbyAkQCAkPAorICAgICAgIyBOZWVk IHRvIHJlYnVpbGQgdGhpcyBpZiAiaW5jbHVkZS9saW51eC9hdXRvY29uZi5o IiBjaGFuZ2VkOgorc2NyaXB0cy9nenBhcmFtOiBzY3JpcHRzL2d6cGFyYW0u YyB2bWxpbnV4IEZPUkNFCisJJChjYWxsIGNtZCxnenBhcmFtKQorCisjIE1h eWJlIG1vdmUgYnVpbGRpbmcgdGhpcyB1dGlsaXR5IHNvbWV3aGVyZSBlbHNl PworcXVpZXRfY21kX2d6Y29weSA9IEhPU1RDQyAgJEAKKyAgICAgIGNtZF9n emNvcHkgPSAkKEhPU1RDQykgJChIT1NUQ0ZMQUdTKSAtcyAtbyAkQCAkPAor c2NyaXB0cy9nemNvcHk6IHNjcmlwdHMvZ3pjb3B5LmMKKwkkKGNhbGwgY21k LGd6Y29weSkKKwogIyBUaGUgYWN0dWFsIG9iamVjdHMgYXJlIGdlbmVyYXRl ZCB3aGVuIGRlc2NlbmRpbmcsIAogIyBtYWtlIHN1cmUgbm8gaW1wbGljaXQg cnVsZSBraWNrcyBpbgogJChzb3J0ICQodm1saW51eC1pbml0KSAkKHZtbGlu dXgtbWFpbikpICQodm1saW51eC1sZHMpOiAkKHZtbGludXgtZGlycykgOwpA QCAtOTgxLDYgKzk5NCw3IEBAIGVuZGlmICMgQ09ORklHX01PRFVMRVMKICMg RGlyZWN0b3JpZXMgJiBmaWxlcyByZW1vdmVkIHdpdGggJ21ha2UgY2xlYW4n CiBDTEVBTl9ESVJTICArPSAkKE1PRFZFUkRJUikKIENMRUFOX0ZJTEVTICs9 CXZtbGludXggU3lzdGVtLm1hcCBcCisgICAgICAgICAgICAgICAgc2NyaXB0 cy9nenBhcmFtIHNjcmlwdHMvZ3pjb3B5IFwKICAgICAgICAgICAgICAgICAu dG1wX2thbGxzeW1zKiAudG1wX3ZlcnNpb24gLnRtcF92bWxpbnV4KiAudG1w X1N5c3RlbS5tYXAKIAogIyBEaXJlY3RvcmllcyAmIGZpbGVzIHJlbW92ZWQg d2l0aCAnbWFrZSBtcnByb3BlcicKZGlmZiAtdXByTiAtWCBsaW51eC0yLjYu MTUtbW0xL0RvY3VtZW50YXRpb24vZG9udGRpZmYgbGludXgtMi42LjE1LW1t MS9zY3JpcHRzL2d6Y29weS5jIGxpbnV4LTIuNi4xNS1tbTEtMS9zY3JpcHRz L2d6Y29weS5jCi0tLSBsaW51eC0yLjYuMTUtbW0xL3NjcmlwdHMvZ3pjb3B5 LmMJMTk3MC0wMS0wMSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIGxp bnV4LTIuNi4xNS1tbTEtMS9zY3JpcHRzL2d6Y29weS5jCTIwMDYtMDEtMDUg MjA6MzE6MzAuMDAwMDAwMDAwICswMDAwCkBAIC0wLDAgKzEsMTAwNiBAQAor LyoKKyAqIGd6Y29weTogdXRpbGl0eSB0byBjb3B5IChvbmx5KSBHWmlwIGZp bGVzLCBwb3NzaWJseSBkaXNwbGF5aW5nIG9yCisgKiBtb2RpZnlpbmcgdGhl aXIgaGVhZGVyLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBFdGllbm5l IExvcnJhaW4sIGZpbmdlcnByaW50ICgyRDNBRjNFQSk6CisgKiAgIDI0NzEg REY2NCA5REVFIDQxRDQgQzhEQiA5NjY3IEU0NDggRkY4QyAyRDNBIEYzRUEK KyAqIEUtTWFpbDogZXRpZW5uZSBkb3QgbG9ycmFpbiBhdCBndWppbiBkb3Qg b3JnCisgKgorICogICBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcy1p cycsIHdpdGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZAorICogIHdhcnJh bnR5LiAgSW4gbm8gZXZlbnQgd2lsbCB0aGUgYXV0aG9ycyBiZSBoZWxkIGxp YWJsZSBmb3IgYW55IGRhbWFnZXMKKyAqICBhcmlzaW5nIGZyb20gdGhlIHVz ZSBvZiB0aGlzIHNvZnR3YXJlLgorICoKKyAqICBQZXJtaXNzaW9uIGlzIGdy YW50ZWQgdG8gYW55b25lIHRvIHVzZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkg cHVycG9zZSwKKyAqICBpbmNsdWRpbmcgY29tbWVyY2lhbCBhcHBsaWNhdGlv bnMsIGFuZCB0byBhbHRlciBpdCBhbmQgcmVkaXN0cmlidXRlIGl0CisgKiAg ZnJlZWx5LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25z OgorICoKKyAqICAxLiBUaGUgb3JpZ2luIG9mIHRoaXMgc29mdHdhcmUgbXVz dCBub3QgYmUgbWlzcmVwcmVzZW50ZWQ7IHlvdSBtdXN0IG5vdAorICogICAg IGNsYWltIHRoYXQgeW91IHdyb3RlIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4g SWYgeW91IHVzZSB0aGlzIHNvZnR3YXJlCisgKiAgICAgaW4gYSBwcm9kdWN0 LCBhbiBhY2tub3dsZWRnbWVudCBpbiB0aGUgcHJvZHVjdCBkb2N1bWVudGF0 aW9uIHdvdWxkIGJlCisgKiAgICAgYXBwcmVjaWF0ZWQgYnV0IGlzIG5vdCBy ZXF1aXJlZC4KKyAqICAyLiBBbHRlcmVkIHNvdXJjZSB2ZXJzaW9ucyBtdXN0 IGJlIHBsYWlubHkgbWFya2VkIGFzIHN1Y2gsIGFuZCBtdXN0IG5vdCBiZQor ICogICAgIG1pc3JlcHJlc2VudGVkIGFzIGJlaW5nIHRoZSBvcmlnaW5hbCBz b2Z0d2FyZS4KKyAqICAzLiBUaGlzIG5vdGljZSBtYXkgbm90IGJlIHJlbW92 ZWQgb3IgYWx0ZXJlZCBmcm9tIGFueSBzb3VyY2UgZGlzdHJpYnV0aW9uLgor ICoKKyAqICAgVGhlIGRhdGEgZm9ybWF0IHVzZWQgYnkgdGhlIHpsaWIgbGli cmFyeSBpcyBkZXNjcmliZWQgYnkgUkZDcyAoUmVxdWVzdCBmb3IKKyAqICBD b21tZW50cykgMTk1MCB0byAxOTUyIGluIHRoZSBmaWxlcyBodHRwOi8vd3d3 LmlldGYub3JnL3JmYy9yZmMxOTUwLnR4dAorICogICh6bGliIGZvcm1hdCks IHJmYzE5NTEudHh0IChkZWZsYXRlIGZvcm1hdCkgYW5kIHJmYzE5NTIudHh0 IChnemlwIGZvcm1hdCkuCisgKi8KKworLyoKKyAqIFRPRE86IE1hbmFnZSAo ZXh0cmFjdC9yZW1vdmUvaW5zZXJ0Li4uKSBjb25jYXRlbmF0ZWQgWklQIGZp bGVzLgorICoKKyAqIENoYW5nZWxvZzoKKyAqIDE1LzkvMjAwMTogRXRpZW5u ZSBMb3JyYWluLiBJbml0aWFsIHJlbGVhc2UgZm9yIHRoZSBHdWppbiBib290 bG9hZGVyLgorICogMjMvOC8yMDAyOiBFdGllbm5lIExvcnJhaW4uICctcycg LT4gJy1jJywgb25seSBvbmUgaW5wdXQvb3V0cHV0IGZpbGUKKyAqIDEwLzkv MjAwNDogRXRpZW5uZSBMb3JyYWluLiBGb3JtYWwgQlNELWxpa2UgbGljZW5z ZSByZWxlYXNlICYgY29ycmVjdCBtaW5pYnVnLgorICogMjgvOS8yMDA1OiBF dGllbm5lIExvcnJhaW4uIHJlbW92ZSB3YXJuaW5nIGxpbmUgODM4OiBbdW5z aWduZWRdIGNoYXIgKnB0ciA9IGZ1bGxfY29udGVudDsKKyAqCisgKi8KKwor I2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8bWFsbG9jLmg+CisjaW5j bHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgkJLyogc3Rh dCgpICovCisjaW5jbHVkZSA8dW5pc3RkLmg+CQkvKiBzdGF0KCkgKi8KKwor I2lmIDAKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNlbHNlCitzdGF0aWMgaW5s aW5lIHVuc2lnbmVkIHN0cmxlbihjb25zdCBjaGFyICpzdHIpCit7CisJY29u c3QgY2hhciAqcHRyID0gc3RyOworCXdoaWxlICgqcHRyKQorCQlwdHIrKzsK KwlyZXR1cm4gcHRyIC0gc3RyOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQg bXlfc3RyY3B5KGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjKQoreworCXdo aWxlICgqc3JjKQorCQkqZHN0KysgPSAqc3JjKys7CisJKmRzdCA9ICpzcmM7 CQkvKiBjb3B5IHRoZSB6ZXJvICovCit9CisjZGVmaW5lIHN0cmNweSBteV9z dHJjcHkKKworc3RhdGljIGlubGluZSB2b2lkIG15X3N0cmNhdChjaGFyICpk c3QsIGNvbnN0IGNoYXIgKnNyYykKK3sKKwlkc3QgKz0gc3RybGVuKGRzdCk7 CisJc3RyY3B5KGRzdCwgc3JjKTsKK30KKyNkZWZpbmUgc3RyY2F0IG15X3N0 cmNhdAorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHN0cmNtcChjb25zdCBj aGFyICpzMSwgY29uc3QgY2hhciAqczIpCit7CisJd2hpbGUgKCpzMSAmJiAq czEgPT0gKnMyKSB7CisJCXMxKys7CisJCXMyKys7CisJfQorCXJldHVybiAo KnMxICE9ICpzMik7Cit9CisjZW5kaWYKKworI2RlZmluZSBTVFIgc3RhdGlj IGNvbnN0IGNoYXIKKworU1RSIHVzYWdlW10gPSAiZ3pjb3B5OiB1dGlsaXR5 IHRvIGNvcHkgKG9ubHkpIEdaaXAgZmlsZXMsIHBvc3NpYmx5IGRpc3BsYXlp bmdcbiIKKwkgICAgICAiICAgICAgICBvciBtb2RpZnlpbmcgdGhlaXIgaGVh ZGVyLlxuIgorICAgICJDb3B5cmlnaHQgMjAwMyBFdGllbm5lIExvcnJhaW4s IEJTRC1saWtlIGxpY2Vuc2UuXG4iCisgICAgIlVTQUdFOlxuIgorICAgICIg ICAgZ3pjb3B5IC1oICAgICAgICAgICAgICAtPiBkaXNwbGF5IHRoaXMgaGVs cFxuIgorICAgICIgICAgZ3pjb3B5IC1WICAgICAgICAgICAgICAtPiBkaXNw bGF5IHRoZSB2ZXJzaW9uXG4iCisgICAgIiAgICBnemNvcHkgLXYgICAgICAg ICAgICAgIC0+IGJlIHZlcmJvc2VcbiIKKyAgICAiICAgIGd6Y29weSAtYyBp bmZpbGUuZ3ogICAgLT4gc2hvdyB0aGUgY29tbWVudC4gKC1jMCBmb3IgcmF3 IGZvcm0pXG4iCS8qIHdhcyAtcyAqLworICAgICIgICAgZ3pjb3B5IC1jPScn IGluZmlsZS5neiBvdXRmaWxlLmd6ICAgIC0+IHNldCAoY2xlYXIgaWYgJycp IHRoZSBjb21tZW50XG4iCisgICAgIiAgICBnemNvcHkgLWE9XCI8YSBjb21t ZW50PlwiIGluLmd6IG91dC5neiAtPiBhZGQvYXBwZW5kIGEgY29tbWVudFxu IgorICAgICIgICAgZ3pjb3B5IC1wPSc8YSBjb21tZW50PicgaW4uZ3ogb3V0 Lmd6IC0+IGFkZC9wcmVwZW5kIGEgY29tbWVudC5cbiIKKyAgICAiICAgIGd6 Y29weSAtayBpbmZpbGUuZ3ogICAgLT4gc2hvdyB0aGUgaGVhZGVyIENSQy4g KC1rMCBmb3IgcmF3IGZvcm0pXG4iCisgICAgIiAgICBnemNvcHkgLWs9ezAs MX0gaW5maWxlLmd6IG91dGZpbGUuZ3ogIC0+IChkZSlhY3RpdmF0ZSB0aGUg aGVhZGVyIENSQ1xuIgorICAgICIgICAgZ3pjb3B5IC1iIGluZmlsZS5neiAg ICAtPiBzaG93IHRoZSB0ZXh0L2JpbmFyeSBmbGFnXG4iCisgICAgIiAgICBn emNvcHkgLWI9ezAsMX0gaW5maWxlLmd6IG91dGZpbGUuZ3ogIC0+IHNldCB0 aGUgZmxhZzogYmluYXJ5PTAvdGV4dD0xXG4iCisgICAgIiAgICBnemNvcHkg LW4gaW5maWxlLmd6ICAgIC0+IHNob3cgdGhlIG9yaWdpbmFsIG5hbWUuICgt bjAgZm9yIHJhdyBmb3JtKVxuIgorICAgICIgICAgZ3pjb3B5IC1uPWZpbGVu YW1lIGluLmd6IG91dC5neiAgICAgICAtPiBzZXQgKGNsZWFyIGlmICcnKSBv cmlnaW5hbCBuYW1lXG4iCisgICAgIk5PVEU6XG4iCisgICAgIiBVc2UgbXVs dGlwbGUgY29tbWFuZDogZ3pjb3B5IC1jPSAtYT0nY29tJyAtYT0nbScgLXBs PSdlbnQnIGluLmd6IG91dC5neiAuXG4iCisgICAgIiBVc2Ugb3B0aW9uIC1h e3MsbCx0fSBvciAtcHtzLGwsdH0gdG8gY2hlY2svZm9yY2UgYSB7c3BhY2Us bGluZWZlZWQsdGFifVxuIgorICAgICIgIGluIGJldHdlZW4gY29tbWVudCBw YXJ0cy4gVXNlIGZpbGVuYW1lIFwiLVwiIGZvciBzdGRpbiBhbmQvb3Igc3Rk b3V0LlxuIgorICAgICIgVXNlIHRoZSAtZiBvcHRpb24gdG8gZm9yY2Ugb3Zl cndyaXRpbmcgb3V0cHV0IGZpbGUsIG9yIGlmIHlvdSB3YW50XG4iCisgICAg IiB0aGUgb3V0cHV0IGluIHRoZSBpbnB1dCBmaWxlIC0geW91IHRoZW4gbmVl ZCBhIGxvdCBvZiB2aXJ0dWFsIG1lbW9yeS5cbiI7CisKK1NUUiB2ZXJzaW9u W10gPSAiZ3pjb3B5IHZlcnNpb24gMS4yIChDKSAyMDAzIEV0aWVubmUgTG9y cmFpbiwgQlNELWxpa2UgbGljZW5zZS4iOworU1RSIHNob3dfdGV4dGZsYWdz X3RleHRfbXNnW10gPSAiXCIlc1wiIGlzIHByb2JhYmx5IGEgdGV4dCBmaWxl XG4iOworU1RSIHNob3dfdGV4dGZsYWdzX2JpbmFyeV9tc2dbXSA9ICJcIiVz XCIgaXMgcHJvYmFibHkgYSBiaW5hcnkgZmlsZVxuIjsKK1NUUiBzaG93X2hl YWRlcl9jcmNfbXNnW10gPSAiXCIlc1wiIGhlYWRlciBDUkMxNiBpcyAweCVY LlxuIjsKK1NUUiBub19DUkNfdG9fc2hvd19tc2dbXSA9ICJcIiVzXCIgZG9l cyBub3QgY29udGFpbiBhbnkgaGVhZGVyIENSQy5cbiI7CitTVFIgc2hvd19u YW1lX21zZ1tdID0gIlwiJXNcIiBvcmlnaW5hbCBuYW1lOiBcIiVzXCJcbiI7 CitTVFIgbm9fbmFtZV90b19zaG93X21zZ1tdID0gIlwiJXNcIiBkb2VzIG5v dCBjb250YWluIGFueSBvcmlnaW5hbCBuYW1lLlxuIjsKK1NUUiBzaG93X2Nv bW1lbnRfbXNnW10gPSAiXCIlc1wiIGNvbW1lbnQ6IFwiJXNcIlxuIjsKK1NU UiBub19jb21tZW50X3RvX3Nob3dfbXNnW10gPSAiXCIlc1wiIGRvZXMgbm90 IGNvbnRhaW4gYW55IGNvbW1lbnQuXG4iOworCisjZGVmaW5lIFBSSU5URVJS KGZvcm1hdCwgYXJncy4uLikgZG8geyBcCisJaWYgKGVycm5vKSBwZXJyb3Ig KCJnemNvcHkiKTsJCVwKKwlmcHJpbnRmIChzdGRlcnIsICJnemNvcHk6ICIp OwkJXAorCWZwcmludGYgKHN0ZGVyciwgZm9ybWF0ICwgIyMgYXJncyk7CVwK KwlmcHJpbnRmIChzdGRlcnIsICJcbiIpOwkJCVwKKwl9IHdoaWxlICgwKQor CisjZGVmaW5lIEVOREhMUAkiLCB0cnk6IGd6Y29weSAtaCIKKworU1RSIHVu a25vd25fYWN0aW9uW10gPSAidW5yZWNvZ25pc2VkIG9wdGlvbiAtJWMiIEVO REhMUDsKK1NUUiBtYWxmb3JtZWRfY3JjX3BhcmFtW10gPSAiaGVhZGVyIGNy YyBvcHRpb24gaXMgbmVpdGhlciAiCisJCQkJImVuYWJsZSAoLWs9MSkgbm9y IGRpc2FibGUgKC1rPTApIiBFTkRITFA7CitTVFIgbWFsZm9ybWVkX3BhcmFt W10gPSAibm8gcGFyYW1ldGVyIGFmdGVyIC0lYz0gb3B0aW9uIiBFTkRITFA7 CitTVFIgdG9vX21hbnlfcGFyYW1bXSA9ICJ0b28gbWFueSBwYXJhbWV0ZXJz OiBcIiVzXCIiIEVOREhMUDsKK1NUUiB1bmtub3duX2NvbW1lbnRbXSA9ICJu byBjb21tZW50IHRvIHByZS9hcHBlbmQiIEVOREhMUDsKK1NUUiBub19pbnB1 dF9maWxlW10gPSAibm8gaW5wdXQgZmlsZSIgRU5ESExQOworU1RSIG5vX291 dHB1dF9maWxlW10gPSAibm8gb3V0cHV0IGZpbGUiIEVOREhMUDsKK1NUUiBj YW5ub3Rfb3Blbl9pbnB1dF9maWxlW10gPSAiY2Fubm90IG9wZW4gaW5wdXQg ZmlsZSBcIiVzXCIuIjsKK1NUUiBub3RfZ3ppcF9maWxlW10gPSAiaW5wdXQg ZmlsZSBcIiVzXCIgaXMgbm90IGEgZ3ppcCBmaWxlLCAiCisJCQkic2lnbmF0 dXJlOiAweCVYLiI7CitTVFIgYmFkX2hlYWRlcl9jcmNbXSA9ICJiYWQgaGVh ZGVyIGNyYzMyOiBpcyAweCVYLCAiICJzaG91bGQgYmUgMHglWC4iOworU1RS IG5vdF9lbm91Z2hfbWVtb3J5W10gPSAibm90IGVub3VnaCBtZW1vcnkuIjsK K1NUUiBjYW5ub3Rfb3Blbl9vdXRwdXRfZmlsZVtdID0gImNhbm5vdCBvcGVu IGlucHV0IGZpbGUgXCIlc1wiLiI7CitTVFIgb3V0ZmlsZV9hbHJlYWR5X2V4 aXN0c1tdID0gIm91dHB1dCBmaWxlIFwiJXNcIiBhbHJlYWR5IGV4aXN0cyBh bmQgIgorCQkJCSJvcHRpb24gLWYgbm90IHNwZWNpZmllZC5cbiI7CitTVFIg Y2Fubm90X3dyaXRlX3RvX2ZpbGVbXSA9ICJjYW5ub3Qgd3JpdGUgdG8gZmls ZSBcIiVzXCIuIjsKK1NUUiByZWFkX2lucHV0X2ZpbGVfZXJyb3JbXSA9ICJl cnJvciByZWFkaW5nIGZyb20gZmlsZSBcIiVzXCIuIjsKK1NUUiBjYW5ub3Rf Y2xvc2VfaW5wdXRfZmlsZVtdID0gImNhbm5vdCBjbG9zZSBpbnB1dCBmaWxl IFwiJXNcIi4iOworU1RSIGNhbm5vdF9jbG9zZV9vdXRwdXRfZmlsZVtdID0g ImNhbm5vdCBjbG9zZSBvdXRwdXQgZmlsZSBcIiVzXCIuIjsKKworI2RlZmlu ZSBWRVJCT1NFKGZvcm1hdCwgYXJncy4uLikgZG8geyBcCisJaWYgKHZlcmJv c2UpCQkJCVwKKwkgICAgZnByaW50ZiAoc3RkZXJyLCBmb3JtYXQgLCAjIyBh cmdzKTsJXAorCX0gd2hpbGUgKDApCisKK1NUUiB0cmVhdGluZ19pbnRwdXRf ZmlsZVtdID0gInRyZWF0aW5nIFwiJXNcIiBhcyBpbnB1dCBmaWxlLlxuIjsK K1NUUiBzdGFuZGFydF9pbnB1dFtdID0gInN0YW5kYXJ0IGlucHV0IjsKK1NU UiBzdGFuZGFydF9vdXRwdXRbXSA9ICJzdGFuZGFydCBvdXRwdXQiOworU1RS IGV4dHJhX2ZpZWxkX3ByZXNlbnRbXSA9ICJleHRyYSBmaWVsZCBvZiAldSBi eXRlcyBwcmVzZW50LlxuIjsKK1NUUiBvcmlnaW5hbF9uYW1lW10gPSAib3Jp Z2luYWwgbmFtZTogXCIlc1wiLlxuIjsKK1NUUiBjb21tZW50X3ByZXNlbnRb XSA9ICJjb21tZW50OiBcIiVzXCIuXG4iOworU1RSIGhlYWRlcl9jcmNfcHJl c2VudFtdID0gImhlYWRlciBDUkMxNiBwcmVzZW50OiAweCVYLlxuIjsKK1NU UiB0cmVhdGluZ19vdXRwdXRfZmlsZVtdID0gInRyZWF0aW5nIFwiJXNcIiBh cyBvdXRwdXQgZmlsZS5cbiI7CitTVFIgZW5hYmxpbmdfaGVhZGVyX2NyY1td ID0gImVuYWJsaW5nIGhlYWRlciBDUkMuXG4iOworU1RSIGRpc2FibGluZ19o ZWFkZXJfY3JjW10gPSAiZGlzYWJsaW5nIGhlYWRlciBDUkMuXG4iOworU1RS IHJlbW92aW5nX2NvbW1lbnRbXSA9ICJyZW1vdmluZyBjb21tZW50LlxuIjsK K1NUUiByZXBsYWNpbmdfY29tbWVudFtdID0gInJlcGxhY2luZyBjb21tZW50 IHdpdGggXCIlc1wiLlxuIjsKK1NUUiBhZGRpbmdfY29tbWVudFtdID0gImFk ZGluZyBjb21tZW50IFwiJXNcIi5cbiI7CitTVFIgYXBwZW5kaW5nX2NvbW1l bnRbXSA9ICJhcHBlbmRpbmcgY29tbWVudCBcIiVzXCIuXG4iOworU1RSIHBy ZXBlbmRpbmdfY29tbWVudFtdID0gInByZXBlbmRpbmcgY29tbWVudCBcIiVz XCIuXG4iOworU1RSIG5ld19oZWFkZXJfY3JjW10gPSAibmV3IGhlYWRlciBD UkMxNjogMHglWC5cbiI7CitTVFIgcmVtb3ZpbmdfbmFtZVtdID0gInJlbW92 aW5nIHRoZSBvcmlnaW5hbCBuYW1lIGZpZWxkLlxuIjsKK1NUUiBjaGFuZ2lu Z19uYW1lW10gPSAiY2hhbmdpbmcgdGhlIG9yaWdpbmFsIG5hbWUgZmllbGQg dG8gXCIlc1wiLlxuIjsKK1NUUiBzZXRfcHJvYmFibHl0ZXh0X2ZsYWdbXSA9 ICJzZXQgdGhlIHByb2JhYmx5IEFTQ0lJL3RleHQgZmxhZ3MuXG4iOworU1RS IGNsZWFyX3Byb2JhYmx5dGV4dF9mbGFnW10gPSAiY2xlYXIgdGhlIHByb2Jh Ymx5IEFTQ0lJL3RleHQgZmxhZ3MuXG4iOworCisjdW5kZWYgU1RSCisKK2Vu dW0gbWFpbl9yZXR1cm5lZF9lbnVtIHsKKwl3YXJuX2VtcHR5X2NvbW1lbnQg PSAxLAorCXdhcm5fbm9fY29tbWVudCA9IDIsCisJZXJyX25vbmUgPSAwLAor CWVycl90b29fbWFueV9wYXJhbSA9IC0xLAorCWVycl91bmtub3duX2NvbW1l bnQgPSAtMiwKKwllcnJfdW5rbm93bl9hY3Rpb24gPSAtMywKKwllcnJfbWFs Zm9ybWVkX3BhcmFtID0gLTQsCisJZXJyX21hbGZvcm1lZF9jcmNfcGFyYW0g PSAtNSwKKwllcnJfbm9faW5wdXRfZmlsZSA9IC02LAorCWVycl9ub19vdXRw dXRfZmlsZSA9IC03LAorCWVycl9jYW5ub3Rfb3Blbl9pbnB1dF9maWxlID0g LTgsCisJZXJyX25vdF9nemlwX2ZpbGUgPSAtOSwKKwllcnJfYmFkX2hlYWRl cl9jcmMgPSAtMTAsCisJZXJyX25vdF9lbm91Z2hfbWVtb3J5ID0gLTExLAor CWVycl9jYW5ub3Rfb3Blbl9vdXRwdXRfZmlsZSA9IC0xMiwKKwllcnJfb3V0 ZmlsZV9hbHJlYWR5X2V4aXN0cyA9IC0xMywKKwllcnJfY2Fubm90X3dyaXRl X3RvX2ZpbGUgPSAtMTQsCisJZXJyX3JlYWRfaW5wdXRfZmlsZV9lcnJvciA9 IC0xNSwKKwllcnJfY2Fubm90X2Nsb3NlX2lucHV0X2ZpbGUgPSAtMTYsCisJ ZXJyX2Nhbm5vdF9jbG9zZV9vdXRwdXRfZmlsZSA9IC0xNworfTsKKworLyog VGhlIEd6aXAgaGVhZGVyICh3aXRoIHVuc2lnbmVkIGNoYXIgZmxhZ3MpOiAq Lworc3RydWN0IGd6aGVhZGVyX3N0ciB7CisJdW5zaWduZWQgc2hvcnQgc2ln bmF0dXJlXzB4OEIxRjsKKwl1bnNpZ25lZCBjaGFyIGNvbXByZXNzaW9uX21l dGhvZDsJLyogPVpfREVGTEFURUQgKi8KKwl1bnNpZ25lZCBjaGFyIGZsYWdz OworI2RlZmluZSBGTEFHU19hc2NpaQkJMHgwMQkvKiBmaWxlIHByb2JhYmx5 IGFzY2lpIHRleHQgKi8KKyNkZWZpbmUgRkxBR1NfaGVhZGVyX2NyYwkweDAy CS8qIGhlYWRlciBDUkMgcHJlc2VudCAqLworI2RlZmluZSBGTEFHU19leHRy YV9maWVsZAkweDA0CS8qIGV4dHJhIGZpZWxkIHByZXNlbnQgKi8KKyNkZWZp bmUgRkxBR1Nfb3JpZ19uYW1lCQkweDA4CS8qIG9yaWdpbmFsIGZpbGUgbmFt ZSBwcmVzZW50ICovCisjZGVmaW5lIEZMQUdTX2NvbW1lbnQJCTB4MTAJLyog ZmlsZSBjb21tZW50IHByZXNlbnQgKi8KKyNkZWZpbmUgRkxBR1NfdW5rbm93 bgkJMHhFMAkvKiByZXNlcnZlZCAqLworCXVuc2lnbmVkIG1vZGlmX3RpbWU7 CS8qIG5iIHNlY29uZCBzaW5jZSAxLzEvMTk3MCAqLworCXVuc2lnbmVkIGNo YXIgZXh0cmFmbGFnczsKKyNkZWZpbmUgRVhUUkFGTEFHU19tYXhfY29tcHJl c3MJMgorI2RlZmluZSBFWFRSQUZMQUdTX2Zhc3RfYWxnbwk0CisJdW5zaWdu ZWQgY2hhciBvcGVyYXRpbmdfc3lzdGVtOworfSBfX2F0dHJpYnV0ZV9fICgo cGFja2VkKSk7CisKKy8qIFRoZSBvbmx5IGNvbXByZXNzaW9uIG1ldGhvZCBy ZWNvZ25pc2VkIGJ5IEd6aXA6ICovCisjZGVmaW5lIFpfREVGTEFURUQJOAor CitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNyYzMyKHVuc2lnbmVkIGNyYywg Y29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBsZW4pCit7CisJ Y29uc3QgdW5zaWduZWQgY2hhciAqZW5kID0gYnVmICsgbGVuOworCisJaWYg KGJ1ZiA9PSAwKQorCQlyZXR1cm4gMEw7CisKKwljcmMgPSB+Y3JjOworCXdo aWxlIChidWYgPCBlbmQpIHsKKwkJdW5zaWduZWQgYyA9IChjcmMgXiAqYnVm KyspICYgMHhmZjsKKwkJdW5zaWduZWQgc2hvcnQgazsKKyNkZWZpbmUgUE9M WQkweGVkYjg4MzIwTAkvKiBwb2x5bm9taWFsIGV4Y2x1c2l2ZS1vciBwYXR0 ZXJuICovCisJCWZvciAoayA9IDg7IGsgIT0gMDsgay0tKQorCQkJYyA9IGMg JiAxID8gKGMgPj4gMSkgXiBQT0xZIDogYyA+PiAxOworCQljcmMgPSBjIF4g KGNyYyA+PiA4KTsKKwl9CisJcmV0dXJuIH5jcmM7Cit9CisKK3N0YXRpYyB1 bnNpZ25lZCBpbml0aGVhZGVyX2NyYzMyKHN0cnVjdCBnemhlYWRlcl9zdHIg KmhkcikKK3sKKwl1bnNpZ25lZCBjcmMgPSBjcmMzMigwLCAwLCAwKTsKKwly ZXR1cm4gY3JjMzIoY3JjLCAodW5zaWduZWQgY2hhciAqKWhkciwgc2l6ZW9m KHN0cnVjdCBnemhlYWRlcl9zdHIpKTsKK30KKworc3RhdGljIHVuc2lnbmVk IGFkZGJ5dGVfY3JjMzIodW5zaWduZWQgY3JjLCBpbnQgdmFsKQoreworCXVu c2lnbmVkIGNoYXIgdG1wID0gdmFsOworCisJcmV0dXJuIGNyYzMyKGNyYywg JnRtcCwgMSk7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJn dikKK3sKKwljaGFyIC8qICpwcm9nbmFtZSA9ICphcmd2LCAqLyBoZWxwX29w dGlvbltdID0gIi1oIiwgKmhlbHBfb3B0aW9uX3B0ciA9IGhlbHBfb3B0aW9u OworCisJZW51bSBtYWluX3JldHVybmVkX2VudW0gcmV0dXJuZWQgPSBlcnJf bm9uZTsKKworCWNoYXIgKmluZmlsZW5hbWUgPSAwLCAqb3V0ZmlsZW5hbWUg PSAwOworCUZJTEUgKmluZmlsZSA9IE5VTEwsICpvdXRmaWxlID0gTlVMTDsK KworCWludCB2ZXJib3NlID0gMCwgc2hvd19uYW1lID0gMCwgc2hvd19jb21t ZW50ID0gMCwgb3ZlcndyaXRlID0gMCwKKwkgICAgc2hvd19oZWFkZXJfY3Jj ID0gMCwgc2hvd190ZXh0X2ZsYWcgPSAwLAorCSAgICBzZXRfdGV4dF9mbGFn ID0gLTEsIGFjdGl2YXRlX2hlYWRlcl9jcmMgPSAtMTsKKworCXN0cnVjdCBn emhlYWRlcl9zdHIgaGVhZGVyOworCXVuc2lnbmVkIGhlYWRlcl9jcmMgPSAw LCBjYWxjdWxhdGVkX2hlYWRlcl9jcmM7CisJdW5zaWduZWQgc2hvcnQgZXh0 cmFmaWVsZF9sZW4gPSAwOworCWNoYXIgKmV4dHJhZmllbGQgPSAwOworCWNo YXIgKm5hbWUgPSAwLCAqY29tbWVudCA9IDA7CisKKwljaGFyICpuZXdjb21t ZW50ID0gMCwgKm5ld3ByZWNvbW1lbnQgPSAwLCAqbmV3cG9zdGNvbW1lbnQg PSAwLCAqbmV3bmFtZSA9IDA7CisJY2hhciBjaGVja3ByZXNwYyA9IDAsIGNo ZWNrcG9zdHNwYyA9IDA7CisJY2hhciAqcHRyOworCWludCBjcHQ7CisKKwlp ZiAoYXJnYyA9PSAxKSB7CisJCWFyZ2MgPSAyOworCQlhcmd2ID0gJmhlbHBf b3B0aW9uX3B0cjsKKwl9IGVsc2UgeworCQlhcmdjLS07CisJCWFyZ3YrKzsK Kwl9CisKKwlmb3IgKGNwdCA9IDA7IGNwdCA8IGFyZ2M7IGNwdCsrKSB7CisJ CWlmIChhcmd2W2NwdF1bMF0gPT0gJy0nICYmIGFyZ3ZbY3B0XVsxXSAhPSAn XDAnKSB7CisJCQlzd2l0Y2ggKGFyZ3ZbY3B0XVsxXSkgeworCQkJY2FzZSAn Vic6CisJCQkJcHJpbnRmKCIlc1xuIiwgdmVyc2lvbik7CisJCQkJcmV0dXJu IGVycl9ub25lOworCQkJY2FzZSAnaCc6CisJCQkJcHJpbnRmKCIlc1xuIiwg dXNhZ2UpOworCQkJCXJldHVybiBlcnJfbm9uZTsKKwkJCWNhc2UgJ3YnOgor CQkJCXZlcmJvc2UgPSAxOworCQkJCWJyZWFrOworCQkJY2FzZSAnZic6CisJ CQkJaWYgKGFyZ3ZbY3B0XVsyXSA9PSAnXDAnKQorCQkJCQlvdmVyd3JpdGUg PSAxOworCQkJCWJyZWFrOworCQkJY2FzZSAnYic6CisJCQkJaWYgKGFyZ3Zb Y3B0XVsyXSA9PSAnXDAnKSB7CisJCQkJCXNob3dfdGV4dF9mbGFnID0gMTsK KwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWlmIChhcmd2W2NwdF1bMl0gPT0g JzAnKSB7CisJCQkJCXNob3dfdGV4dF9mbGFnID0gMjsJLyogcmF3IGZvcm0g Ki8KKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWlmIChhcmd2W2NwdF1bMl0g IT0gJz0nCisJCQkJICAgIHx8IChhcmd2W2NwdF1bM10gIT0gJzAnICYmIGFy Z3ZbY3B0XVszXSAhPSAnMScpKSB7CisJCQkJCVBSSU5URVJSKG1hbGZvcm1l ZF9wYXJhbSwgYXJndltjcHRdWzFdKTsKKwkJCQkJcmV0dXJuIGVycl9tYWxm b3JtZWRfcGFyYW07CisJCQkJfQorCQkJCXNldF90ZXh0X2ZsYWcgPSAoYXJn dltjcHRdWzNdID09ICcxJyk7CisJCQkJYnJlYWs7CisJCQljYXNlICdrJzoK KwkJCQlpZiAoYXJndltjcHRdWzJdID09ICdcMCcpIHsKKwkJCQkJc2hvd19o ZWFkZXJfY3JjID0gMTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWlmIChh cmd2W2NwdF1bMl0gPT0gJzAnKSB7CisJCQkJCXNob3dfaGVhZGVyX2NyYyA9 IDI7CS8qIHJhdyBmb3JtICovCisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlp ZiAoYXJndltjcHRdWzJdICE9ICc9JworCQkJCSAgICB8fCAoYXJndltjcHRd WzNdICE9ICcwJyAmJiBhcmd2W2NwdF1bM10gIT0gJzEnKSkgeworCQkJCQlQ UklOVEVSUihtYWxmb3JtZWRfY3JjX3BhcmFtKTsKKwkJCQkJcmV0dXJuIGVy cl9tYWxmb3JtZWRfY3JjX3BhcmFtOworCQkJCX0KKwkJCQlhY3RpdmF0ZV9o ZWFkZXJfY3JjID0gKGFyZ3ZbY3B0XVszXSA9PSAnMScpOworCQkJCWJyZWFr OworCQkJY2FzZSAnbic6CisJCQkJaWYgKGFyZ3ZbY3B0XVsyXSA9PSAnXDAn KSB7CisJCQkJCXNob3dfbmFtZSA9IDE7CisJCQkJCWJyZWFrOworCQkJCX0K KwkJCQlpZiAoYXJndltjcHRdWzJdID09ICcwJykgeworCQkJCQlzaG93X25h bWUgPSAyOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJaWYgKGFyZ3ZbY3B0 XVsyXSAhPSAnPScpIHsKKwkJCQkJUFJJTlRFUlIobWFsZm9ybWVkX3BhcmFt LCBhcmd2W2NwdF1bMV0pOworCQkJCQlyZXR1cm4gZXJyX21hbGZvcm1lZF9w YXJhbTsKKwkJCQl9CisJCQkJbmV3bmFtZSA9ICZhcmd2W2NwdF1bM107CisJ CQkJYnJlYWs7CisJCQljYXNlICdjJzoKKwkJCQlpZiAoYXJndltjcHRdWzJd ID09ICdcMCcpIHsKKwkJCQkJc2hvd19jb21tZW50ID0gMTsKKwkJCQkJYnJl YWs7CisJCQkJfQorCQkJCWlmIChhcmd2W2NwdF1bMl0gPT0gJzAnKSB7CisJ CQkJCXNob3dfY29tbWVudCA9IDI7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJ CQlpZiAoYXJndltjcHRdWzJdICE9ICc9JykgeworCQkJCQlQUklOVEVSUiht YWxmb3JtZWRfcGFyYW0sIGFyZ3ZbY3B0XVsxXSk7CisJCQkJCXJldHVybiBl cnJfbWFsZm9ybWVkX3BhcmFtOworCQkJCX0KKwkJCQluZXdjb21tZW50ID0g JmFyZ3ZbY3B0XVszXTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ3AnOnsKKwkJ CQkJdW5zaWduZWQgbGVuOworCQkJCQl1bnNpZ25lZCBjaGFyIGNoZWNrc3Bj OworCQkJCQljaGFyICpzdGFydDsKKworCQkJCQlsZW4gPSAyOworCQkJCQlz d2l0Y2ggKGFyZ3ZbY3B0XVtsZW5dKSB7CisJCQkJCWNhc2UgJ3MnOgorCQkJ CQkJY2hlY2tzcGMgPSAnICc7CisJCQkJCQlsZW4rKzsKKwkJCQkJCWJyZWFr OworCQkJCQljYXNlICdsJzoKKwkJCQkJCWNoZWNrc3BjID0gJ1xuJzsKKwkJ CQkJCWxlbisrOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgJ3QnOgorCQkJ CQkJY2hlY2tzcGMgPSAnXHQnOworCQkJCQkJbGVuKys7CisJCQkJCQlicmVh azsKKwkJCQkJZGVmYXVsdDoKKwkJCQkJY2FzZSAnPSc6CisJCQkJCQljaGVj a3NwYyA9ICdcMCc7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCisJCQkJCWlm IChhcmd2W2NwdF1bbGVuKytdICE9ICc9JykgeworCQkJCQkJUFJJTlRFUlIo bWFsZm9ybWVkX3BhcmFtLCBhcmd2W2NwdF1bMV0pOworCQkJCQkJcmV0dXJu IGVycl9tYWxmb3JtZWRfcGFyYW07CisJCQkJCX0KKwkJCQkJc3RhcnQgPSAm YXJndltjcHRdW2xlbl07CisJCQkJCWxlbiA9IHN0cmxlbihzdGFydCkgKyAx OworCQkJCQlpZiAoKnN0YXJ0ID09IDApIHsKKwkJCQkJCWlmIChuZXdwcmVj b21tZW50ID09IDApCisJCQkJCQkJY2hlY2twcmVzcGMgPSBjaGVja3NwYzsK KwkJCQkJfSBlbHNlIGlmIChuZXdwcmVjb21tZW50ID09IDApIHsKKwkJCQkJ CW5ld3ByZWNvbW1lbnQgPSBtYWxsb2MobGVuKTsKKwkJCQkJCWlmIChuZXdw cmVjb21tZW50ID09IDApCisJCQkJCQkJZ290byBsYWJlbF9ub3RfZW5vdWdo X21lbW9yeTsKKwkJCQkJCWNoZWNrcHJlc3BjID0gY2hlY2tzcGM7CisJCQkJ CQlzdHJjcHkobmV3cHJlY29tbWVudCwgc3RhcnQpOworCQkJCQl9IGVsc2Ug eworCQkJCQkJY2hhciAqdG1wID0gbWFsbG9jKHN0cmxlbihuZXdwcmVjb21t ZW50KQorCQkJCQkJCQkJICsgbGVuICsgMSk7CisJCQkJCQlpZiAodG1wID09 IDApCisJCQkJCQkJZ290byBsYWJlbF9ub3RfZW5vdWdoX21lbW9yeTsKKwkJ CQkJCXN0cmNweSh0bXAsIHN0YXJ0KTsKKwkJCQkJCS8qIGxhc3QgY2hhcjog Ki8KKwkJCQkJCXB0ciA9ICZ0bXBbbGVuIC0gMl07CisJCQkJCQlpZiAoY2hl Y2tzcGMgIT0gJ1wwJyAmJiAqcHRyICE9IGNoZWNrc3BjCisJCQkJCQkJJiYg bmV3cHJlY29tbWVudFswXSAhPSBjaGVja3NwYykKKwkJCQkJCQkqKytwdHIg PSBjaGVja3NwYzsKKwkJCQkJCXB0cisrOworCQkJCQkJc3RyY3B5KHB0ciwg bmV3cHJlY29tbWVudCk7CisJCQkJCQlmcmVlKG5ld3ByZWNvbW1lbnQpOwor CQkJCQkJbmV3cHJlY29tbWVudCA9IHRtcDsKKwkJCQkJfQorCQkJCX0KKwkJ CQlicmVhazsKKwkJCWNhc2UgJ2EnOnsKKwkJCQkJdW5zaWduZWQgbGVuOwor CQkJCQl1bnNpZ25lZCBjaGFyIGNoZWNrc3BjOworCQkJCQljaGFyICpzdGFy dDsKKworCQkJCQlsZW4gPSAyOworCQkJCQlzd2l0Y2ggKGFyZ3ZbY3B0XVts ZW5dKSB7CisJCQkJCWNhc2UgJ3MnOgorCQkJCQkJY2hlY2tzcGMgPSAnICc7 CisJCQkJCQlsZW4rKzsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlICdsJzoK KwkJCQkJCWNoZWNrc3BjID0gJ1xuJzsKKwkJCQkJCWxlbisrOworCQkJCQkJ YnJlYWs7CisJCQkJCWNhc2UgJ3QnOgorCQkJCQkJY2hlY2tzcGMgPSAnXHQn OworCQkJCQkJbGVuKys7CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSAnPSc6 CisJCQkJCWRlZmF1bHQ6CisJCQkJCQljaGVja3NwYyA9ICdcMCc7CisJCQkJ CQlicmVhazsKKwkJCQkJfQorCisJCQkJCWlmIChhcmd2W2NwdF1bbGVuKytd ICE9ICc9JykgeworCQkJCQkJUFJJTlRFUlIobWFsZm9ybWVkX3BhcmFtLCBh cmd2W2NwdF1bMV0pOworCQkJCQkJcmV0dXJuIGVycl9tYWxmb3JtZWRfcGFy YW07CisJCQkJCX0KKwkJCQkJc3RhcnQgPSAmYXJndltjcHRdW2xlbl07CisJ CQkJCWxlbiA9IHN0cmxlbihzdGFydCkgKyAxOworCQkJCQlpZiAoKnN0YXJ0 ID09IDApIHsKKwkJCQkJCWlmIChuZXdwb3N0Y29tbWVudCA9PSAwKQorCQkJ CQkJCWNoZWNrcG9zdHNwYyA9IGNoZWNrc3BjOworCQkJCQl9IGVsc2UgaWYg KG5ld3Bvc3Rjb21tZW50ID09IDApIHsKKwkJCQkJCW5ld3Bvc3Rjb21tZW50 ID0gbWFsbG9jKGxlbik7CisJCQkJCQlpZiAobmV3cG9zdGNvbW1lbnQgPT0g MCkKKwkJCQkJCQlnb3RvIGxhYmVsX25vdF9lbm91Z2hfbWVtb3J5OworCQkJ CQkJY2hlY2twb3N0c3BjID0gY2hlY2tzcGM7CisJCQkJCQlzdHJjcHkobmV3 cG9zdGNvbW1lbnQsIHN0YXJ0KTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCXB0 ciA9IHJlYWxsb2MobmV3cG9zdGNvbW1lbnQsCisJCQkJCQkJIHN0cmxlbihu ZXdwb3N0Y29tbWVudCkgKyBsZW4gKyAxKTsKKwkJCQkJCWlmIChwdHIgPT0g MCkKKwkJCQkJCQlnb3RvIGxhYmVsX25vdF9lbm91Z2hfbWVtb3J5OworCQkJ CQkJbmV3cG9zdGNvbW1lbnQgPSBwdHI7CisJCQkJCQkvKiBsYXN0IGNoYXI6 ICovCisJCQkJCQlwdHIgPSAmbmV3cG9zdGNvbW1lbnRbc3RybGVuKG5ld3Bv c3Rjb21tZW50KSAtIDFdOworCQkJCQkJaWYgKGNoZWNrc3BjICE9ICdcMCcg JiYgKnB0ciAhPSBjaGVja3NwYworCQkJCQkJICAgICYmICpzdGFydCAhPSBj aGVja3NwYykKKwkJCQkJCQkqKytwdHIgPSBjaGVja3NwYzsKKwkJCQkJCXB0 cisrOworCQkJCQkJc3RyY3B5KHB0ciwgc3RhcnQpOworCQkJCQl9CisJCQkJ fQorCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlQUklOVEVSUih1bmtu b3duX2FjdGlvbiwgYXJndltjcHRdWzFdKTsKKwkJCQlyZXR1cm4gZXJyX3Vu a25vd25fYWN0aW9uOworCQkJfQorCQl9IGVsc2UgaWYgKGluZmlsZW5hbWUg PT0gMCkgeworCQkJaW5maWxlbmFtZSA9IGFyZ3ZbY3B0XTsKKwkJfSBlbHNl IGlmIChvdXRmaWxlbmFtZSA9PSAwKSB7CisJCQlvdXRmaWxlbmFtZSA9IGFy Z3ZbY3B0XTsKKwkJfSBlbHNlIHsKKwkJCVBSSU5URVJSKHRvb19tYW55X3Bh cmFtLCBhcmd2W2NwdF0pOworCQkJcmV0dXJuIGVycl90b29fbWFueV9wYXJh bTsKKwkJfQorCX0KKworCS8qCisJICogQ2hlY2sgb3B0aW9uIHZhbGlkaXR5 OgorCSAqLworCWlmIChpbmZpbGVuYW1lID09IDApIHsKKwkJUFJJTlRFUlIo bm9faW5wdXRfZmlsZSk7CisJCXJldHVybiBlcnJfbm9faW5wdXRfZmlsZTsK Kwl9CisKKwlpZiAobmV3bmFtZSB8fCBuZXdjb21tZW50IHx8IG5ld3Bvc3Rj b21tZW50IHx8IG5ld3ByZWNvbW1lbnQKKwkJfHwgYWN0aXZhdGVfaGVhZGVy X2NyYyAhPSAtMSB8fCBzZXRfdGV4dF9mbGFnICE9IC0xKSB7CisJCWlmIChv dXRmaWxlbmFtZSA9PSAwKSB7CisJCQlpZiAob3ZlcndyaXRlKSB7CisJCQkJ b3V0ZmlsZW5hbWUgPSBpbmZpbGVuYW1lOworCQkJfSBlbHNlIHsKKwkJCQlQ UklOVEVSUihub19vdXRwdXRfZmlsZSk7CisJCQkJcmV0dXJuIGVycl9ub19v dXRwdXRfZmlsZTsKKwkJCX0KKwkJfQorCX0KKworCS8qCisJICogUmVhZCB0 aGUgaW5wdXQgZmlsZToKKwkgKi8KKwlpZiAoIXN0cmNtcChpbmZpbGVuYW1l LCAiLSIpKSB7CisJCWluZmlsZSA9IHN0ZGluOworCQlWRVJCT1NFKHRyZWF0 aW5nX2ludHB1dF9maWxlLCBzdGFuZGFydF9pbnB1dCk7CisJfSBlbHNlIHsK KwkJaW5maWxlID0gZm9wZW4oaW5maWxlbmFtZSwgInIiKTsKKwkJaWYgKGlu ZmlsZSA9PSBOVUxMKSB7CisJCQlQUklOVEVSUihjYW5ub3Rfb3Blbl9pbnB1 dF9maWxlLCBpbmZpbGVuYW1lKTsKKwkJCXJldHVybiBlcnJfY2Fubm90X29w ZW5faW5wdXRfZmlsZTsKKwkJfQorCQlWRVJCT1NFKHRyZWF0aW5nX2ludHB1 dF9maWxlLCBpbmZpbGVuYW1lKTsKKwl9CisKKwlwdHIgPSAoY2hhciAqKSZo ZWFkZXI7CisJZm9yIChjcHQgPSAwOyBjcHQgPCBzaXplb2YoaGVhZGVyKTsg Y3B0KyspIHsKKwkJaW50IHRtcCA9IGZnZXRjKGluZmlsZSk7CisJCWlmICh0 bXAgPT0gRU9GKSB7CisJCQlpZiAoIWZlcnJvcihpbmZpbGUpKQorCQkJCWdv dG8gbGFiZWxfbm90X2d6aXBfZmlsZTsKKwkJCWVsc2UKKwkJCQlnb3RvIGxh YmVsX3JlYWRfaW5wdXRfZmlsZV9lcnJvcjsKKwkJfQorCQkqcHRyKysgPSB0 bXA7CisJfQorCisJY2FsY3VsYXRlZF9oZWFkZXJfY3JjID0gaW5pdGhlYWRl cl9jcmMzMigmaGVhZGVyKTsKKworCWlmIChoZWFkZXIuc2lnbmF0dXJlXzB4 OEIxRiAhPSAweDhCMUYgfHwgaGVhZGVyLmNvbXByZXNzaW9uX21ldGhvZCAh PSBaX0RFRkxBVEVECisJCXx8IGhlYWRlci5mbGFncyAmIEZMQUdTX3Vua25v d24pCisJCWdvdG8gbGFiZWxfbm90X2d6aXBfZmlsZTsKKworCWlmIChoZWFk ZXIuZmxhZ3MgJiBGTEFHU19leHRyYV9maWVsZCkgeworCQlpbnQgdG1wID0g ZmdldGMoaW5maWxlKTsKKwkJaWYgKHRtcCA9PSBFT0YpIHsKKwkJCWlmICgh ZmVycm9yKGluZmlsZSkpCisJCQkJZ290byBsYWJlbF9ub3RfZ3ppcF9maWxl OworCQkJZWxzZQorCQkJCWdvdG8gbGFiZWxfcmVhZF9pbnB1dF9maWxlX2Vy cm9yOworCQl9CisJCWNhbGN1bGF0ZWRfaGVhZGVyX2NyYyA9IGFkZGJ5dGVf Y3JjMzIoY2FsY3VsYXRlZF9oZWFkZXJfY3JjLCB0bXApOworCQlleHRyYWZp ZWxkX2xlbiA9IHRtcDsKKwkJdG1wID0gZmdldGMoaW5maWxlKTsKKwkJaWYg KHRtcCA9PSBFT0YpIHsKKwkJCWlmICghZmVycm9yKGluZmlsZSkpCisJCQkJ Z290byBsYWJlbF9ub3RfZ3ppcF9maWxlOworCQkJZWxzZQorCQkJCWdvdG8g bGFiZWxfcmVhZF9pbnB1dF9maWxlX2Vycm9yOworCQl9CisJCWNhbGN1bGF0 ZWRfaGVhZGVyX2NyYyA9IGFkZGJ5dGVfY3JjMzIoY2FsY3VsYXRlZF9oZWFk ZXJfY3JjLCB0bXApOworCQlleHRyYWZpZWxkX2xlbiB8PSB0bXAgPDwgODsK KwkJVkVSQk9TRShleHRyYV9maWVsZF9wcmVzZW50LCBleHRyYWZpZWxkX2xl bik7CisKKwkJaWYgKGV4dHJhZmllbGRfbGVuICE9IDApIHsKKwkJCWlmICgo ZXh0cmFmaWVsZCA9IG1hbGxvYyhleHRyYWZpZWxkX2xlbikpID09IDApCisJ CQkJZ290byBsYWJlbF9ub3RfZW5vdWdoX21lbW9yeTsKKwkJfQorCQlmb3Ig KGNwdCA9IDA7IGNwdCA8IGV4dHJhZmllbGRfbGVuOyBjcHQrKykgeworCQkJ dG1wID0gZmdldGMoaW5maWxlKTsKKwkJCWlmICh0bXAgPT0gRU9GKSB7CisJ CQkJaWYgKCFmZXJyb3IoaW5maWxlKSkKKwkJCQkJZ290byBsYWJlbF9ub3Rf Z3ppcF9maWxlOworCQkJCWVsc2UKKwkJCQkJZ290byBsYWJlbF9yZWFkX2lu cHV0X2ZpbGVfZXJyb3I7CisJCQl9CisJCQljYWxjdWxhdGVkX2hlYWRlcl9j cmMgPSBhZGRieXRlX2NyYzMyKGNhbGN1bGF0ZWRfaGVhZGVyX2NyYywgdG1w KTsKKwkJCWV4dHJhZmllbGRbY3B0XSA9IHRtcDsKKwkJfQorCX0KKworCWlm IChoZWFkZXIuZmxhZ3MgJiBGTEFHU19vcmlnX25hbWUpIHsKKwkJdW5zaWdu ZWQgbmFtZV9sZW4gPSAwLCBuYW1lX2FsbG9jZWQgPSAwOworCQlpbnQgdG1w OworCisJCWRvIHsKKwkJCXRtcCA9IGZnZXRjKGluZmlsZSk7CisJCQlpZiAo dG1wID09IEVPRikgeworCQkJCWlmICghZmVycm9yKGluZmlsZSkpCisJCQkJ CWdvdG8gbGFiZWxfbm90X2d6aXBfZmlsZTsKKwkJCQllbHNlCisJCQkJCWdv dG8gbGFiZWxfcmVhZF9pbnB1dF9maWxlX2Vycm9yOworCQkJfQorCQkJY2Fs Y3VsYXRlZF9oZWFkZXJfY3JjID0gYWRkYnl0ZV9jcmMzMihjYWxjdWxhdGVk X2hlYWRlcl9jcmMsIHRtcCk7CisJCQlpZiAobmFtZV9sZW4gPj0gbmFtZV9h bGxvY2VkKSB7CisJCQkJaWYgKG5hbWUgIT0gMCkgeworCQkJCQlpZiAoKHB0 ciA9IHJlYWxsb2MobmFtZSwgbmFtZV9hbGxvY2VkICs9IDEwMjQpKSA9PSAw KQorCQkJCQkJZ290byBsYWJlbF9ub3RfZW5vdWdoX21lbW9yeTsKKwkJCQkJ bmFtZSA9IHB0cjsKKwkJCQl9IGVsc2UgeworCQkJCQlpZiAoKG5hbWUgPSBt YWxsb2MobmFtZV9hbGxvY2VkID0gMTAyNCkpID09IDApCisJCQkJCQlnb3Rv IGxhYmVsX25vdF9lbm91Z2hfbWVtb3J5OworCQkJCX0KKwkJCX0KKwkJCW5h bWVbbmFtZV9sZW4rK10gPSB0bXA7CisJCX0gd2hpbGUgKHRtcCAhPSAnXDAn KTsKKwkJVkVSQk9TRShvcmlnaW5hbF9uYW1lLCBuYW1lKTsKKwl9CisKKwlp ZiAoaGVhZGVyLmZsYWdzICYgRkxBR1NfY29tbWVudCkgeworCQl1bnNpZ25l ZCBjb21tZW50X2xlbiA9IDAsIGNvbW1lbnRfYWxsb2NlZCA9IDA7CisJCWlu dCB0bXA7CisKKwkJZG8geworCQkJdG1wID0gZmdldGMoaW5maWxlKTsKKwkJ CWlmICh0bXAgPT0gRU9GKSB7CisJCQkJaWYgKCFmZXJyb3IoaW5maWxlKSkK KwkJCQkJZ290byBsYWJlbF9ub3RfZ3ppcF9maWxlOworCQkJCWVsc2UKKwkJ CQkJZ290byBsYWJlbF9yZWFkX2lucHV0X2ZpbGVfZXJyb3I7CisJCQl9CisJ CQljYWxjdWxhdGVkX2hlYWRlcl9jcmMgPSBhZGRieXRlX2NyYzMyKGNhbGN1 bGF0ZWRfaGVhZGVyX2NyYywgdG1wKTsKKwkJCWlmIChjb21tZW50X2xlbiA+ PSBjb21tZW50X2FsbG9jZWQpIHsKKwkJCQlpZiAoY29tbWVudCAhPSAwKSB7 CisJCQkJCWlmICgocHRyID0gcmVhbGxvYyhjb21tZW50LCBjb21tZW50X2Fs bG9jZWQgKz0gMTAyNCkpCisJCQkJCQk9PSAwKQorCQkJCQkJZ290byBsYWJl bF9ub3RfZW5vdWdoX21lbW9yeTsKKwkJCQkJY29tbWVudCA9IHB0cjsKKwkJ CQl9IGVsc2UgeworCQkJCQlpZiAoKGNvbW1lbnQgPSBtYWxsb2MoY29tbWVu dF9hbGxvY2VkID0gMTAyNCkpID09IDApCisJCQkJCQlnb3RvIGxhYmVsX25v dF9lbm91Z2hfbWVtb3J5OworCQkJCX0KKwkJCX0KKwkJCWNvbW1lbnRbY29t bWVudF9sZW4rK10gPSB0bXA7CisJCX0gd2hpbGUgKHRtcCAhPSAnXDAnKTsK KwkJVkVSQk9TRShjb21tZW50X3ByZXNlbnQsIGNvbW1lbnQpOworCX0KKwor CWlmIChoZWFkZXIuZmxhZ3MgJiBGTEFHU19oZWFkZXJfY3JjKSB7CisJCWlu dCB0bXAgPSBmZ2V0YyhpbmZpbGUpOworCQlpZiAodG1wID09IEVPRikgewor CQkJaWYgKCFmZXJyb3IoaW5maWxlKSkKKwkJCQlnb3RvIGxhYmVsX25vdF9n emlwX2ZpbGU7CisJCQllbHNlCisJCQkJZ290byBsYWJlbF9yZWFkX2lucHV0 X2ZpbGVfZXJyb3I7CisJCX0KKwkJaGVhZGVyX2NyYyA9IHRtcDsKKwkJdG1w ID0gZmdldGMoaW5maWxlKTsKKwkJaWYgKHRtcCA9PSBFT0YpIHsKKwkJCWlm ICghZmVycm9yKGluZmlsZSkpCisJCQkJZ290byBsYWJlbF9ub3RfZ3ppcF9m aWxlOworCQkJZWxzZQorCQkJCWdvdG8gbGFiZWxfcmVhZF9pbnB1dF9maWxl X2Vycm9yOworCQl9CisJCWhlYWRlcl9jcmMgfD0gdG1wIDw8IDg7CisJCWNh bGN1bGF0ZWRfaGVhZGVyX2NyYyAmPSAweEZGRkY7CisJCWlmIChzaG93X2hl YWRlcl9jcmMgPT0gMikKKwkJCXByaW50ZigiMHglWFxuIiwgaGVhZGVyX2Ny Yyk7CisJCWVsc2UgaWYgKHNob3dfaGVhZGVyX2NyYyAhPSAwKQorCQkJcHJp bnRmKHNob3dfaGVhZGVyX2NyY19tc2csIGluZmlsZW5hbWUsIGhlYWRlcl9j cmMpOworCQlWRVJCT1NFKGhlYWRlcl9jcmNfcHJlc2VudCwgaGVhZGVyX2Ny Yyk7CisJCWlmIChjYWxjdWxhdGVkX2hlYWRlcl9jcmMgIT0gaGVhZGVyX2Ny YykgeworCQkJUFJJTlRFUlIoYmFkX2hlYWRlcl9jcmMsIGhlYWRlcl9jcmMs IGNhbGN1bGF0ZWRfaGVhZGVyX2NyYyk7CisJCQlyZXR1cm5lZCA9IGVycl9i YWRfaGVhZGVyX2NyYzsKKwkJCWdvdG8gbGFiZWxfZW5kOworCQl9CisJfSBl bHNlIHsKKwkJaWYgKHNob3dfaGVhZGVyX2NyYyAhPSAwICYmIHNob3dfaGVh ZGVyX2NyYyAhPSAyKQorCQkJcHJpbnRmKG5vX0NSQ190b19zaG93X21zZywg aW5maWxlbmFtZSk7CisJfQorCisJLyoKKwkgKiBUcmVhdCBjb21tYW5kczoK KwkgKi8KKworCWlmIChzaG93X25hbWUgPT0gMikgeworCQlpZiAobmFtZSAh PSAwKQorCQkJcHJpbnRmKCIlc1xuIiwgbmFtZSk7CisJfSBlbHNlIGlmIChz aG93X25hbWUpIHsKKwkJaWYgKG5hbWUgIT0gMCkKKwkJCXByaW50ZihzaG93 X25hbWVfbXNnLCBpbmZpbGVuYW1lLCBuYW1lKTsKKwkJZWxzZQorCQkJcHJp bnRmKG5vX25hbWVfdG9fc2hvd19tc2csIGluZmlsZW5hbWUpOworCX0KKwor CWlmIChzaG93X2NvbW1lbnQgPT0gMikgeworCQlpZiAoY29tbWVudCAhPSAw KQorCQkJcHJpbnRmKCIlc1xuIiwgY29tbWVudCk7CisJfSBlbHNlIGlmIChz aG93X2NvbW1lbnQpIHsKKwkJaWYgKGNvbW1lbnQgIT0gMCkKKwkJCXByaW50 ZihzaG93X2NvbW1lbnRfbXNnLCBpbmZpbGVuYW1lLCBjb21tZW50KTsKKwkJ ZWxzZQorCQkJcHJpbnRmKG5vX2NvbW1lbnRfdG9fc2hvd19tc2csIGluZmls ZW5hbWUpOworCX0KKworCWlmIChzaG93X3RleHRfZmxhZyA9PSAyKSB7CisJ CXByaW50ZigiJXVcbiIsIGhlYWRlci5mbGFncyAmIEZMQUdTX2FzY2lpKTsK Kwl9IGVsc2UgaWYgKHNob3dfdGV4dF9mbGFnKSB7CisJCWlmIChoZWFkZXIu ZmxhZ3MgJiBGTEFHU19hc2NpaSkKKwkJCXByaW50ZihzaG93X3RleHRmbGFn c190ZXh0X21zZywgaW5maWxlbmFtZSk7CisJCWVsc2UKKwkJCXByaW50Zihz aG93X3RleHRmbGFnc19iaW5hcnlfbXNnLCBpbmZpbGVuYW1lKTsKKwl9CisK KwlpZiAoc2V0X3RleHRfZmxhZyAhPSAtMSkgeworCQlpZiAoc2V0X3RleHRf ZmxhZyA9PSAwKSB7CisJCQloZWFkZXIuZmxhZ3MgJj0gfkZMQUdTX2FzY2lp OworCQkJVkVSQk9TRShjbGVhcl9wcm9iYWJseXRleHRfZmxhZyk7CisJCX0g ZWxzZSB7CisJCQloZWFkZXIuZmxhZ3MgfD0gRkxBR1NfYXNjaWk7CisJCQlW RVJCT1NFKHNldF9wcm9iYWJseXRleHRfZmxhZyk7CisJCX0KKwl9CisKKwlp ZiAoYWN0aXZhdGVfaGVhZGVyX2NyYyAhPSAtMSkgeworCQlpZiAoYWN0aXZh dGVfaGVhZGVyX2NyYykgeworCQkJaGVhZGVyLmZsYWdzIHw9IEZMQUdTX2hl YWRlcl9jcmM7CisJCQlWRVJCT1NFKGVuYWJsaW5nX2hlYWRlcl9jcmMpOwor CQl9IGVsc2UgeworCQkJaGVhZGVyLmZsYWdzICY9IH5GTEFHU19oZWFkZXJf Y3JjOworCQkJVkVSQk9TRShkaXNhYmxpbmdfaGVhZGVyX2NyYyk7CisJCX0K Kwl9CisKKwlpZiAobmV3bmFtZSkgeworCQlpZiAoKm5ld25hbWUgPT0gMCkg eworCQkJaGVhZGVyLmZsYWdzICY9IH5GTEFHU19vcmlnX25hbWU7CisJCQlW RVJCT1NFKHJlbW92aW5nX25hbWUpOworCQl9IGVsc2UgeworCQkJaGVhZGVy LmZsYWdzIHw9IEZMQUdTX29yaWdfbmFtZTsKKwkJCVZFUkJPU0UoY2hhbmdp bmdfbmFtZSwgbmV3bmFtZSk7CisJCQlpZiAobmFtZSkKKwkJCQlmcmVlKG5h bWUpOworCQkJbmFtZSA9IG1hbGxvYyhzdHJsZW4obmV3bmFtZSkgKyAxKTsK KwkJCXN0cmNweShuYW1lLCBuZXduYW1lKTsKKwkJfQorCX0KKworCWlmIChu ZXdjb21tZW50KSB7CisJCWlmICgqbmV3Y29tbWVudCA9PSAnXDAnKSB7CisJ CQlWRVJCT1NFKHJlbW92aW5nX2NvbW1lbnQpOworCQkJaWYgKGNvbW1lbnQp CisJCQkJZnJlZShjb21tZW50KTsKKwkJCWNvbW1lbnQgPSAwOworCQkJaGVh ZGVyLmZsYWdzICY9IH5GTEFHU19jb21tZW50OworCQl9IGVsc2UgeworCQkJ VkVSQk9TRShyZXBsYWNpbmdfY29tbWVudCwgbmV3Y29tbWVudCk7CisJCQlp ZiAoY29tbWVudCkKKwkJCQlmcmVlKGNvbW1lbnQpOworCQkJY29tbWVudCA9 IG1hbGxvYyhzdHJsZW4obmV3Y29tbWVudCkgKyAxKTsKKwkJCXN0cmNweShj b21tZW50LCBuZXdjb21tZW50KTsKKwkJCWhlYWRlci5mbGFncyB8PSBGTEFH U19jb21tZW50OworCQl9CisJfQorCisJaWYgKG5ld3ByZWNvbW1lbnQpIHsK KwkJaWYgKChoZWFkZXIuZmxhZ3MgJiBGTEFHU19jb21tZW50KSA9PSAwKSB7 CisJCQlWRVJCT1NFKGFkZGluZ19jb21tZW50LCBuZXdwcmVjb21tZW50KTsK KwkJCWNvbW1lbnQgPSBtYWxsb2Moc3RybGVuKG5ld3ByZWNvbW1lbnQpICsg MSk7CisJCQlpZiAoY29tbWVudCA9PSAwKQorCQkJCWdvdG8gbGFiZWxfbm90 X2Vub3VnaF9tZW1vcnk7CisJCQlzdHJjcHkoY29tbWVudCwgbmV3cHJlY29t bWVudCk7CisJCQkvKiBsYXN0IGNoYXI6ICovCisJCQlwdHIgPSAmY29tbWVu dFtzdHJsZW4oY29tbWVudCldOworCQkJaWYgKGNoZWNrcHJlc3BjICE9ICdc MCcgJiYgKnB0ciAhPSBjaGVja3ByZXNwYykgeworCQkJCSorK3B0ciA9IGNo ZWNrcHJlc3BjOworCQkJCSorK3B0ciA9ICdcMCc7CisJCQl9CisJCQlmcmVl KG5ld3ByZWNvbW1lbnQpOworCQkJbmV3cHJlY29tbWVudCA9IDA7CisJCX0g ZWxzZSB7CisJCQlWRVJCT1NFKHByZXBlbmRpbmdfY29tbWVudCwgbmV3cHJl Y29tbWVudCk7CisJCQlwdHIgPSByZWFsbG9jKG5ld3ByZWNvbW1lbnQsIHN0 cmxlbihuZXdwcmVjb21tZW50KSArIDEKKwkJCQkJCQkrIHN0cmxlbihjb21t ZW50KSArIDEpOworCQkJaWYgKHB0ciA9PSAwKQorCQkJCWdvdG8gbGFiZWxf bm90X2Vub3VnaF9tZW1vcnk7CisJCQluZXdwcmVjb21tZW50ID0gcHRyOwor CQkJLyogbGFzdCBjaGFyOiAqLworCQkJcHRyID0gJm5ld3ByZWNvbW1lbnRb c3RybGVuKG5ld3ByZWNvbW1lbnQpXTsKKwkJCWlmIChjaGVja3ByZXNwYyAh PSAnXDAnCisJCQkgICAgJiYgKnB0ciAhPSBjaGVja3ByZXNwYyAmJiBjb21t ZW50WzBdICE9IGNoZWNrcHJlc3BjKQorCQkJCSorK3B0ciA9IGNoZWNrcHJl c3BjOworCQkJcHRyKys7CisJCQlzdHJjcHkocHRyLCBjb21tZW50KTsKKwkJ CWZyZWUoY29tbWVudCk7CisJCQljb21tZW50ID0gbmV3cHJlY29tbWVudDsK KwkJCW5ld3ByZWNvbW1lbnQgPSAwOworCQl9CisJCWhlYWRlci5mbGFncyB8 PSBGTEFHU19jb21tZW50OworCX0KKworCWlmIChuZXdwb3N0Y29tbWVudCkg eworCQlpZiAoKGhlYWRlci5mbGFncyAmIEZMQUdTX2NvbW1lbnQpID09IDAp IHsKKwkJCVZFUkJPU0UoYWRkaW5nX2NvbW1lbnQsIG5ld3Bvc3Rjb21tZW50 KTsKKwkJCWNvbW1lbnQgPSBtYWxsb2Moc3RybGVuKG5ld3Bvc3Rjb21tZW50 KSArIDEpOworCQkJaWYgKGNvbW1lbnQgPT0gMCkKKwkJCQlnb3RvIGxhYmVs X25vdF9lbm91Z2hfbWVtb3J5OworCQkJc3RyY3B5KGNvbW1lbnQsIG5ld3Bv c3Rjb21tZW50KTsKKwkJCS8qIGxhc3QgY2hhcjogKi8KKwkJCXB0ciA9ICZj b21tZW50W3N0cmxlbihjb21tZW50KV07CisJCQlpZiAoY2hlY2twb3N0c3Bj ICE9ICdcMCcgJiYgKnB0ciAhPSBjaGVja3Bvc3RzcGMpIHsKKwkJCQkqKytw dHIgPSBjaGVja3Bvc3RzcGM7CisJCQkJKisrcHRyID0gJ1wwJzsKKwkJCX0K KwkJCWZyZWUobmV3cG9zdGNvbW1lbnQpOworCQkJbmV3cG9zdGNvbW1lbnQg PSAwOworCQl9IGVsc2UgeworCQkJVkVSQk9TRShhcHBlbmRpbmdfY29tbWVu dCwgbmV3cG9zdGNvbW1lbnQpOworCQkJcHRyID0gcmVhbGxvYyhjb21tZW50 LCBzdHJsZW4oY29tbWVudCkKKwkJCQkJCSArIDEgKyBzdHJsZW4obmV3cG9z dGNvbW1lbnQpICsgMSk7CisJCQlpZiAocHRyID09IDApCisJCQkJZ290byBs YWJlbF9ub3RfZW5vdWdoX21lbW9yeTsKKwkJCWNvbW1lbnQgPSBwdHI7CisJ CQkvKiBsYXN0IGNoYXI6ICovCisJCQlwdHIgPSAmY29tbWVudFtzdHJsZW4o Y29tbWVudCkgLSAxXTsKKwkJCWlmIChjaGVja3Bvc3RzcGMgIT0gJ1wwJwor CQkJICAgICYmICpwdHIgIT0gY2hlY2twb3N0c3BjICYmIG5ld3Bvc3Rjb21t ZW50WzBdICE9IGNoZWNrcG9zdHNwYykKKwkJCQkqKytwdHIgPSBjaGVja3Bv c3RzcGM7CisJCQlwdHIrKzsKKwkJCXN0cmNweShwdHIsIG5ld3Bvc3Rjb21t ZW50KTsKKwkJCWZyZWUobmV3cG9zdGNvbW1lbnQpOworCQkJbmV3cG9zdGNv bW1lbnQgPSAwOworCQl9CisJCWhlYWRlci5mbGFncyB8PSBGTEFHU19jb21t ZW50OworCX0KKworCS8qCisJICogV3JpdGUgdGhlIGZpbGUgYmFjazoKKwkg Ki8KKworCWlmIChvdXRmaWxlbmFtZSAhPSAwKSB7CisJCXN0cnVjdCBzdGF0 IGluYnVmOworCQljaGFyICpmdWxsX2NvbnRlbnQgPSAwOworCQl1bnNpZ25l ZCBmdWxsX2xlbmd0aCA9IDA7CisKKwkJaWYgKGZzdGF0KGZpbGVubyhpbmZp bGUpLCAmaW5idWYpICE9IC0xKSB7CisJCQlmdWxsX2NvbnRlbnQgPSBtYWxs b2MoaW5idWYuc3Rfc2l6ZSk7CS8qIGJpdCB0b28gbXVjaCBidXQuLi4gKi8K KwkJCWlmIChmdWxsX2NvbnRlbnQgIT0gMCkgeworCQkJCWNoYXIgKnB0ciA9 IGZ1bGxfY29udGVudDsKKwkJCQlmb3IgKDs7KSB7CisJCQkJCWludCB0bXAg PSBmZ2V0YyhpbmZpbGUpOworCisJCQkJCWlmICh0bXAgPT0gRU9GKSB7CisJ CQkJCQlpZiAoZmVycm9yKGluZmlsZSkpIHsKKwkJCQkJCQlmcmVlKGZ1bGxf Y29udGVudCk7CisJCQkJCQkJZ290byBsYWJlbF9yZWFkX2lucHV0X2ZpbGVf ZXJyb3I7CisJCQkJCQl9CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQlm dWxsX2xlbmd0aCsrOworCQkJCQlpZiAoZnVsbF9sZW5ndGggPj0gaW5idWYu c3Rfc2l6ZSkgeworCQkJCQkJZnJlZShmdWxsX2NvbnRlbnQpOworCQkJCQkJ Z290byBsYWJlbF9yZWFkX2lucHV0X2ZpbGVfZXJyb3I7CisJCQkJCX0KKwkJ CQkJKnB0cisrID0gdG1wOworCQkJCX0KKwkJCX0gZWxzZSBpZiAob3V0Zmls ZW5hbWUgPT0gaW5maWxlbmFtZSkKKwkJCQlnb3RvIGxhYmVsX3JlYWRfaW5w dXRfZmlsZV9lcnJvcjsKKwkJfQorCisJCWlmICghc3RyY21wKG91dGZpbGVu YW1lLCAiLSIpKSB7CisJCQlvdXRmaWxlID0gc3Rkb3V0OworCQkJVkVSQk9T RSh0cmVhdGluZ19vdXRwdXRfZmlsZSwgc3RhbmRhcnRfb3V0cHV0KTsKKwkJ fSBlbHNlIHsKKwkJCWlmIChvdmVyd3JpdGUgPT0gMCkgeworCQkJCXN0cnVj dCBzdGF0IGJ1ZjsKKwkJCQlpZiAoc3RhdChvdXRmaWxlbmFtZSwgJmJ1Zikg IT0gLTEgJiYgZXJybm8gIT0gRU5PRU5UKSB7CisJCQkJCWVycm5vID0gMDsK KwkJCQkJUFJJTlRFUlIob3V0ZmlsZV9hbHJlYWR5X2V4aXN0cywgb3V0Zmls ZW5hbWUpOworCQkJCQlyZXR1cm5lZCA9IGVycl9vdXRmaWxlX2FscmVhZHlf ZXhpc3RzOworCQkJCQlnb3RvIGxhYmVsX2VuZDsKKwkJCQl9CisJCQkJZXJy bm8gPSAwOworCQkJfQorCQkJb3V0ZmlsZSA9IGZvcGVuKG91dGZpbGVuYW1l LCAidyIpOworCQkJaWYgKG91dGZpbGUgPT0gTlVMTCkgeworCQkJCVBSSU5U RVJSKGNhbm5vdF9vcGVuX291dHB1dF9maWxlLCBvdXRmaWxlbmFtZSk7CisJ CQkJcmV0dXJuZWQgPSBlcnJfY2Fubm90X29wZW5fb3V0cHV0X2ZpbGU7CisJ CQkJZ290byBsYWJlbF9lbmQ7CisJCQl9CisJCQlWRVJCT1NFKHRyZWF0aW5n X291dHB1dF9maWxlLCBvdXRmaWxlbmFtZSk7CisJCX0KKworCQlwdHIgPSAo Y2hhciAqKSZoZWFkZXI7CisJCWZvciAoY3B0ID0gMDsgY3B0IDwgc2l6ZW9m KGhlYWRlcik7IGNwdCsrKSB7CisJCQlpZiAoZnB1dGMoKnB0cisrLCBvdXRm aWxlKSA9PSBFT0YpCisJCQkJZ290byBsYWJlbF9jYW5ub3Rfd3JpdGVfdG9f ZmlsZTsKKwkJfQorCisJCWNhbGN1bGF0ZWRfaGVhZGVyX2NyYyA9IGluaXRo ZWFkZXJfY3JjMzIoJmhlYWRlcik7CisKKwkJaWYgKGhlYWRlci5mbGFncyAm IEZMQUdTX2V4dHJhX2ZpZWxkKSB7CisJCQlwdHIgPSBleHRyYWZpZWxkOwor CQkJaWYgKGZwdXRjKGV4dHJhZmllbGRfbGVuLCBvdXRmaWxlKSA9PSBFT0YK KwkJCQl8fCBmcHV0YyhleHRyYWZpZWxkX2xlbiA+PiA4LCBvdXRmaWxlKSA9 PSBFT0YpCisJCQkJZ290byBsYWJlbF9jYW5ub3Rfd3JpdGVfdG9fZmlsZTsK KwkJCWNhbGN1bGF0ZWRfaGVhZGVyX2NyYyA9IGFkZGJ5dGVfY3JjMzIoY2Fs Y3VsYXRlZF9oZWFkZXJfY3JjLAorCQkJCQkJCQlleHRyYWZpZWxkX2xlbik7 CisJCQljYWxjdWxhdGVkX2hlYWRlcl9jcmMgPSBhZGRieXRlX2NyYzMyKGNh bGN1bGF0ZWRfaGVhZGVyX2NyYywKKwkJCQkJCQkJZXh0cmFmaWVsZF9sZW4g Pj4gOCk7CisKKwkJCWZvciAoY3B0ID0gMDsgY3B0IDwgZXh0cmFmaWVsZF9s ZW47IGNwdCsrKSB7CisJCQkJaWYgKGZwdXRjKCpwdHIsIG91dGZpbGUpID09 IEVPRikKKwkJCQkJZ290byBsYWJlbF9jYW5ub3Rfd3JpdGVfdG9fZmlsZTsK KwkJCQljYWxjdWxhdGVkX2hlYWRlcl9jcmMgPSBhZGRieXRlX2NyYzMyKGNh bGN1bGF0ZWRfaGVhZGVyX2NyYywKKwkJCQkJCQkJKnB0cik7CisJCQkJcHRy Kys7CisJCQl9CisJCX0KKwkJaWYgKGhlYWRlci5mbGFncyAmIEZMQUdTX29y aWdfbmFtZSkgeworCQkJdW5zaWduZWQgbmFtZV9sZW4gPSBzdHJsZW4obmFt ZSkgKyAxOworCisJCQlwdHIgPSBuYW1lOworCQkJZm9yIChjcHQgPSAwOyBj cHQgPCBuYW1lX2xlbjsgY3B0KyspIHsKKwkJCQlpZiAoZnB1dGMoKnB0ciwg b3V0ZmlsZSkgPT0gRU9GKQorCQkJCQlnb3RvIGxhYmVsX2Nhbm5vdF93cml0 ZV90b19maWxlOworCQkJCWNhbGN1bGF0ZWRfaGVhZGVyX2NyYyA9IGFkZGJ5 dGVfY3JjMzIoY2FsY3VsYXRlZF9oZWFkZXJfY3JjLAorCQkJCQkJCQkqcHRy KTsKKwkJCQlwdHIrKzsKKwkJCX0KKwkJfQorCQlpZiAoaGVhZGVyLmZsYWdz ICYgRkxBR1NfY29tbWVudCkgeworCQkJdW5zaWduZWQgY29tbWVudF9sZW4g PSBzdHJsZW4oY29tbWVudCkgKyAxOworCisJCQlwdHIgPSBjb21tZW50Owor CQkJZm9yIChjcHQgPSAwOyBjcHQgPCBjb21tZW50X2xlbjsgY3B0KyspIHsK KwkJCQlpZiAoZnB1dGMoKnB0ciwgb3V0ZmlsZSkgPT0gRU9GKQorCQkJCQln b3RvIGxhYmVsX2Nhbm5vdF93cml0ZV90b19maWxlOworCQkJCWNhbGN1bGF0 ZWRfaGVhZGVyX2NyYyA9IGFkZGJ5dGVfY3JjMzIoY2FsY3VsYXRlZF9oZWFk ZXJfY3JjLAorCQkJCQkJCQkqcHRyKTsKKwkJCQlwdHIrKzsKKwkJCX0KKwkJ fQorCQlpZiAoaGVhZGVyLmZsYWdzICYgRkxBR1NfaGVhZGVyX2NyYykgewor CQkJY2FsY3VsYXRlZF9oZWFkZXJfY3JjICY9IDB4RkZGRjsKKwkJCWlmIChm cHV0YyhjYWxjdWxhdGVkX2hlYWRlcl9jcmMsIG91dGZpbGUpID09IEVPRgor CQkJCXx8IGZwdXRjKGNhbGN1bGF0ZWRfaGVhZGVyX2NyYyA+PiA4LCBvdXRm aWxlKSA9PSBFT0YpCisJCQkJZ290byBsYWJlbF9jYW5ub3Rfd3JpdGVfdG9f ZmlsZTsKKwkJCWlmIChzaG93X2hlYWRlcl9jcmMgPT0gMikKKwkJCQlwcmlu dGYoIjB4JVhcbiIsIGhlYWRlcl9jcmMpOworCQkJZWxzZSBpZiAoc2hvd19o ZWFkZXJfY3JjICE9IDApCisJCQkJcHJpbnRmKHNob3dfaGVhZGVyX2NyY19t c2csIGluZmlsZW5hbWUsIGhlYWRlcl9jcmMpOworCQkJVkVSQk9TRShuZXdf aGVhZGVyX2NyYywgY2FsY3VsYXRlZF9oZWFkZXJfY3JjKTsKKwkJfQorCisJ CWlmIChmdWxsX2NvbnRlbnQgPT0gMCkgeworCQkJZm9yICg7OykgeworCQkJ CWludCB0bXAgPSBmZ2V0YyhpbmZpbGUpOworCisJCQkJaWYgKHRtcCA9PSBF T0YpIHsKKwkJCQkJaWYgKGZlcnJvcihpbmZpbGUpKQorCQkJCQkJZ290byBs YWJlbF9yZWFkX2lucHV0X2ZpbGVfZXJyb3I7CisJCQkJCWJyZWFrOworCQkJ CX0KKwkJCQlpZiAoZnB1dGModG1wLCBvdXRmaWxlKSA9PSBFT0YpCisJCQkJ CWdvdG8gbGFiZWxfY2Fubm90X3dyaXRlX3RvX2ZpbGU7CisJCQl9CisJCX0g ZWxzZSB7CisJCQlpZiAoZndyaXRlKGZ1bGxfY29udGVudCwgMSwgZnVsbF9s ZW5ndGgsIG91dGZpbGUpICE9IGZ1bGxfbGVuZ3RoKQorCQkJCWdvdG8gbGFi ZWxfY2Fubm90X3dyaXRlX3RvX2ZpbGU7CisJCX0KKwl9CisKKyAgICAgIGxh YmVsX2VuZDoKKwlpZiAoZXh0cmFmaWVsZCAhPSAwKQorCQlmcmVlKGV4dHJh ZmllbGQpOworCWlmIChuYW1lICE9IDApCisJCWZyZWUobmFtZSk7CisJaWYg KGNvbW1lbnQgIT0gMCkKKwkJZnJlZShjb21tZW50KTsKKworCWlmIChpbmZp bGUgIT0gTlVMTCkgeworCQlpZiAoZmNsb3NlKGluZmlsZSkgPT0gRU9GKSB7 CisJCQlQUklOVEVSUihjYW5ub3RfY2xvc2VfaW5wdXRfZmlsZSwgaW5maWxl bmFtZSk7CisJCQlyZXR1cm5lZCA9IGVycl9jYW5ub3RfY2xvc2VfaW5wdXRf ZmlsZTsKKwkJfQorCX0KKworCWlmIChvdXRmaWxlICE9IE5VTEwpIHsKKwkJ aWYgKGZjbG9zZShvdXRmaWxlKSA9PSBFT0YpIHsKKwkJCVBSSU5URVJSKGNh bm5vdF9jbG9zZV9vdXRwdXRfZmlsZSwgb3V0ZmlsZW5hbWUpOworCQkJcmV0 dXJuZWQgPSBlcnJfY2Fubm90X2Nsb3NlX291dHB1dF9maWxlOworCQl9CisJ fQorCXJldHVybiByZXR1cm5lZDsKKworICAgICAgbGFiZWxfbm90X2d6aXBf ZmlsZToKKwlQUklOVEVSUihub3RfZ3ppcF9maWxlLCBpbmZpbGVuYW1lLCBo ZWFkZXIuc2lnbmF0dXJlXzB4OEIxRik7CisJcmV0dXJuZWQgPSBlcnJfbm90 X2d6aXBfZmlsZTsKKwlnb3RvIGxhYmVsX2VuZDsKKworICAgICAgbGFiZWxf bm90X2Vub3VnaF9tZW1vcnk6CisJUFJJTlRFUlIobm90X2Vub3VnaF9tZW1v cnkpOworCXJldHVybmVkID0gZXJyX25vdF9lbm91Z2hfbWVtb3J5OworCWdv dG8gbGFiZWxfZW5kOworCisgICAgICBsYWJlbF9yZWFkX2lucHV0X2ZpbGVf ZXJyb3I6CisJUFJJTlRFUlIocmVhZF9pbnB1dF9maWxlX2Vycm9yLCBpbmZp bGVuYW1lKTsKKwlyZXR1cm5lZCA9IGVycl9yZWFkX2lucHV0X2ZpbGVfZXJy b3I7CisJZ290byBsYWJlbF9lbmQ7CisKKyAgICAgIGxhYmVsX2Nhbm5vdF93 cml0ZV90b19maWxlOgorCVBSSU5URVJSKGNhbm5vdF93cml0ZV90b19maWxl LCBvdXRmaWxlbmFtZSk7CisJcmV0dXJuZWQgPSBlcnJfY2Fubm90X3dyaXRl X3RvX2ZpbGU7CisJZ290byBsYWJlbF9lbmQ7Cit9CmRpZmYgLXVwck4gLVgg bGludXgtMi42LjE1LW1tMS9Eb2N1bWVudGF0aW9uL2RvbnRkaWZmIGxpbnV4 LTIuNi4xNS1tbTEvc2NyaXB0cy9nenBhcmFtLmMgbGludXgtMi42LjE1LW1t MS0xL3NjcmlwdHMvZ3pwYXJhbS5jCi0tLSBsaW51eC0yLjYuMTUtbW0xL3Nj cmlwdHMvZ3pwYXJhbS5jCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAw ICswMTAwCisrKyBsaW51eC0yLjYuMTUtbW0xLTEvc2NyaXB0cy9nenBhcmFt LmMJMjAwNi0wMS0wNSAyMDozMTozMC4wMDAwMDAwMDAgKzAwMDAKQEAgLTAs MCArMSwyNTYgQEAKKy8qCisgKiBUaGlzIGZpbGUgImd6cGFyYW0uYyIgaXMg bGljZW5zZWQgd2l0aCB0aGUgc2FtZSBsaWNlbnNlIGFzIHRoZSBMSU5VWCBr ZXJuZWwuCisgKiBDb3B5cmlnaHQgMjAwNCwgRXRpZW5uZSBMb3JyYWluIChl dGllbm5lIGRvdCBsb3JyYWluIGF0IGd1amluIGRvdCBvcmcpCisgKgorICog IFRoZSBtYWluIHVzZSBvZiB0aGlzIGZpbGUgaXMgdG8gcHJvZHVjZSBhICJH dWppbiBuYXRpdmUgYm9vdGFibGUKKyAqIGZpbGUiIGkuZS4gYSBMSU5VWCBr ZXJuZWwgd2l0aCBhICJrZ3oiIGV4dGVuc2lvbiwgbW9yZSBleGFjdGx5Cisg KiB0aGUgb3B0aW9uIHBhcnQgd2hpY2ggaXMgZ29pbmcgdG8gYmUgd3JpdHRl biBpbiB0aGUgY29tbWVudCBmaWVsZAorICogb2YgdGhlIEdaSVAgZmlsZSAo YXMgZG9jdW1lbnRlZCBpbiB0aGUgR1pJUCBmb3JtYXQpLgorICogU2VlIGxp bnV4L01ha2VmaWxlIHRvIGtub3cgaG93IHRoZSBmb2xsb3dpbmcgaXMgdXNl ZCBmb3IgdGFyZ2V0CisgKiAqLmtneiAtIHNpbXBseSBieSB1c2luZyB0aGUg Imd6Y29weSIgdXRpbGl0eS4KKyAqCisgKiBUaGlzIHN0YW5kYWxvbmUgZXhl Y3V0YWJsZSBuYW1lZCAiZ3pwYXJhbSIgaXMganVzdCBkaXNwbGF5aW5nIGEK KyAqIGxpbmUgY29udGFpbmluZyB6ZXJvIG9yIG1vcmUgZmllbGQgb2YgdGhl IHBhdHRlcm4KKyAqICI8dmFyaWFibGU+PTB4PGhleGF2YWx1ZT4iIChpLmUu IG5vIGRlY2ltYWwpLCB0byBkZWZpbmUgZm9yIHdoaWNoCisgKiBDUFUgdGhp cyBrZXJuZWwgaXMgZm9yLCB3aGljaCB2aWRlbyBtb2RlIGNhbiBiZSB1c2Vk IChmb3IgaW5zdGFuY2UKKyAqIGZvcmJpZCBWRVNBIDEuMCBncmFwaGljIG1v ZGVzKSwgd2hlcmUgdG8gbG9hZCB0aGUga2VybmVsCisgKiAoZGVmYXVsdCAw eDEwMDAwMCAtIG90aGVyIHZhbHVlIG5lZWRzIGtlcm5lbCBtb2RpZmljYXRp b25zIGJ1dAorICogd291bGQgZnJlZSBETUEgbWVtb3J5KSwgd2hlcmUgdG8g Y29weSB0aGUgTGludXggcGFyYW1ldGVyIDQgS2IgcGFnZQorICogaW4gcmVh bC1tb2RlIG1lbW9yeSBhbmQgdGhlIGxpa2UuCisgKgorICogQmVjYXVzZSBt b3N0IHZhbHVlcyBkZXBlbmQgb24gY29tcGlsYXRpb24gc3dpdGNoZXMgb2Yg dGhlCisgKiBMaW51eCBrZXJuZWwgLSB3ZSBoYXZlIHRvIHVzZSBhbiB1cC10 by1kYXRlIGZpbGUgcmVmbGVjdGluZworICogdGhlIGNvbmZpZ3VyYXRpb24g b3B0aW9ucyAtIGJ1dCBiZWNhdXNlIHdlIG1heSBjcm9zcyBjb21waWxlCisg KiB0aGUga2VybmVsIHdlIGhhdmUgaGVyZSB0byB1c2UgdGhlIGhvc3QgY29t cGlsZXIgKHdpdGggbWF5YmUKKyAqIGRpZmZlcmVudCBvcHRpbWlzYXRpb24g b3B0aW9ucykuIFRoZSBzaW1wbGVyIHNlZW1zIHRvIHVzZQorICogdGhlIGZp bGUgImxpbnV4L2luY2x1ZGUvbGludXgvYXV0b2NvbmYuaCIuIFRoaXMgZmls ZSBpcworICogYXV0b21hZ2ljYWxseSB1cGRhdGVkIGJ5ICJtYWtlIG1lbnVj b25maWciLgorICoKKyAqIEZpcnN0IHZlcnNpb24gaGFzIGJlZW4gd3JpdHRl biBieSBFdGllbm5lIExvcnJhaW4gaW4gRGVjZW1iZXIgMjAwNC4KKyAqLwor CisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2luY2x1ZGUgIi4uL2luY2x1ZGUv bGludXgvYXV0b2NvbmYuaCIKKworLyoKKyAqICBUaG9zZSBhcmUgbm90IHVz ZWQgZm9yIG5vdywgR3VqaW4gd2lsbCB1c2UgaXRzIGRlZmF1bHQgYmVoYXZp b3VyCisgKiBiZWNhdXNlIHdlIGRvIG5vdCBkaXNwbGF5IHRoZW0gb24gc3Rk b3V0OgorICovCitjb25zdCB1bnNpZ25lZCBydW5hZHIgPSAwLCBtaW5yYW0g PSAwLCBvcHRpb24gPSAwOworCisvKgorICogR3VqaW4tMC45IHdpbGwgbm90 IGJlIGFibGUgdG8gbG9hZCB0aGUga2VybmVsIGJlaW5nIGdlbmVyYXRlZCwK KyAqIHRoZSBmaXJzdCBhY2NlcHRhYmxlIHZlcnNpb24gaXMgR3VqaW4tMS4w OgorICovCitjb25zdCB1bnNpZ25lZCBtaW5fZ3VqaW5fdmVyc2lvbiA9IDB4 MTAyOworCisvKgorICogIEtlZXAgZm9yIG5vdyB0aGUgZGVmYXVsdCBvZiAw eDgwMDAwIChsaW5lYXIgYWRkcmVzcykgZm9yIHBhcmFtYWRyOgorICogaXQg aGFzIHRvIGJlIGEgImZyZWUiIHJlYWwgbW9kZSBtZW1vcnkgYWRkcmVzcywg YW5kIGlmIHRoZSB1c2VyIGlzIHVzaW5nCisgKiBhIERPUyBib290bG9hZGVy IHRoZSBib290bG9hZGVyIGNvZGUgY2FuIGJlIHF1aXRlIGhpZ2ggaW4gbWVt b3J5IHdoZW4KKyAqIHVzaW5nIGEgbG90IG9mIERPUyBkcml2ZXJzIChsaWtl IERPUyBVU0IgZGlzayBkcml2ZXJzKS4KKyAqICByZWFsZmN0X3NpemUgaXMg Y2FsY3VsYXRlZCBvbi1saW5lIGluIE1ha2VmaWxlLCBpdCBpcyB0aGUgc2l6 ZSBvZgorICogdGhlIHJlYWwtbW9kZSBjb2RlIG91dHB1dCBzZWN0aW9uIG9m IHRoZSB2bWxpbnV4IEVMRiBmaWxlLgorICovCitjb25zdCB1bnNpZ25lZCBw YXJhbWFkciA9IDAgLyogLCByZWFsZmN0X3NpemUgPSAwICovIDsKKworLyoK KyAqIFNpbmNlIDIuNi4xMywgdGhpcyBjYW4gYmUgc2V0IHVwIG1hbnVhbGx5 IHRvIGZyZWUgRE1BLWFibGUgbWVtb3J5LAorICogaS5lLiBtZW1vcnkgYmVs b3cgMTYgTWJ5dGVzLiBBbHNvIG9sZCBQQyBtYXkgaGF2ZSBhIGhvbGUgaW4g YmV0d2VlbgorICogMTUgYW5kIDE2IE1ieXRlcyBzbyBzdGFydGluZyB0aGUg a2VybmVsIGF0IDE2IE1ieXRlcyBpcyBiZXR0ZXIsCisgKiBhcyBsb25nIGFz IHlvdSBoYXZlIG1vcmUgdGhhbiAxNiBNYnl0ZXMgb2YgbWVtb3J5Li4uCisg KiBUaGlzIFBIWVNJQ0FMX1NUQVJUID0gMHgxMDAwMDAwIGlzIG9ubHkgYm9v dGFibGUgd2l0aCBHdWppbi0xLjIrCisgKi8KKyNpZiBkZWZpbmVkIChDT05G SUdfUEhZU0lDQUxfU1RBUlQpICYmIENPTkZJR19QSFlTSUNBTF9TVEFSVCAh PSAweDEwMDAwMAorY29uc3QgdW5zaWduZWQgbG9hZGFkciA9IENPTkZJR19Q SFlTSUNBTF9TVEFSVDsKKyNlbmRpZgorCisvKgorICogUTogV2h5IGNoZWNr IHRoZSBwcm9jZXNzb3IgaGVyZSAoaS5lLiBiZWZvcmUgZXZlbiBjYWxsaW5n IGxpbnV4X3NldF9wYXJhbXMoKSwKKyAqICAgIHdlIGNvdWxkIGNoZWNrIHRo ZSBwcm9jZXNzb3IgYW5kIGV4aXQgd2l0aCBhbiBlcnJvciBjb2RlLi4uKSA/ CisgKiBBOiBGaXJzdCB0aGUgcHJvY2Vzc29yIG1heSBub3QgYmUgYW4gaWEz MiBvbmUgKHg4Nl82NCwgaWE2NCBvciBldmVuCisgKiAgICBQb3dlclBDKSBh bmQgdGhlIGNvbXBpbGF0aW9uIG9mIGxpbnV4X3NldF9wYXJhbXMoKSBtYXkg dXNlIGlhMzIKKyAqICAgIGluc3RydWN0aW9ucyAoTU1YKSBub3QgZGVmaW5l ZCBmb3IgdGhlIGN1cnJlbnQgcHJvY2Vzc29yIHVzZWQuCisgKiAgICBUaGlz IG1hc2sgc2hhbGwgc2F5OiBkbyBub3QgZXZlbiB0cnkgdG8gZXhlY3V0ZSB0 aGUgZmlyc3QgYXNzZW1ibHkKKyAqICAgIGluc3RydWN0aW9uIG9mIGxpbnV4 X3NldF9wYXJhbXMoKSBpZiBjb3JyZXNwb25kaW5nIGJpdCBpcyBzZXQuCisg KiAgICBJdCBtYXkgc3RpbGwgYmUgZWFzaWVyIHRvIHJlZnVzZSBhIENQVSBo ZXJlIChQZW50aXVtIGNvZGUgb24gYW4gaTM4NikKKyAqLworLyogUGxlYXNl IGhlbHAgY2hlY2tpbmcgYW5kIGNvbXBsZXRpbmcgdGhpcyBhcnJheS4KKyAg IGZpbGVkIGZyb20gd3d3LnNhbmRwaWxlLm9yZyBDUFVJRC4KKyAgIFRoZSBm YW1pbHkgb2YgeW91ciBwcm9jZXNzb3IgaXMgZGlzcGxheWVkIGF0IEd1amlu IHN0YXJ0dXAuCisgICBJbiBjYXNlIG9mIHByb2JsZW0sIGJvb3QgYSBiYXJl IERPUyBmbG9wcHkgYW5kIHVzZSAiZGJnbG9hZC5leGUiIHRvCisgICAodHJ5 IHRvKSBsb2FkIGEgc3RhbmRhcmQgdm1saW51eiBrZXJuZWwgLSB0aGUgZmls ZSBhOkRCRyB3aWxsIHNob3cKKyAgIGFsbCB1c2VmdWxsIGluZm9ybWF0aW9u LgorICAgSWYgbG9hZCBmYWlscywgZXhpdCAiZGJnbG9hZC5leGUiIGJ5IF5D IGFuZCBub3QgYnkgcmVib290IHRvIGNsb3NlCisgICB0aGUgREJHIGZpbGUu CisgICBJZiBldmVyeXRoaW5nIGZhaWxzLCB5b3UgY2FuIGFsc28gZGVidWcg dG8gYSBzZXJpYWwgbGluZSBvciBhIHByaW50ZXIuICovCisKKyNkZWZpbmUg Q0FOX1JVTl9DUFVfRkFNSUxZKHgpCX4oMSA8PCB4KQorCitjb25zdCB1bnNp Z25lZCBtYXNrY3B1ID0gMHg4MDAwMDAwMAkvKiByZWZ1c2UgdG8gc3RhcnQg aWYgbm8gSUEzMiBCSU9TIChub3QgYSBQQykgKi8KKwkvL3wgMHg0MDAwMDAw MAkvKiByZWZ1c2UgdG8gc3RhcnQgZnJvbSBET1Mvd2luZG93cyAqLworCS8v fCAweDIwMDAwMDAwCS8qIHJlZnVzZSB0byBzdGFydCBmcm9tIEVNTTM4Ni92 aXJ0dWFsIGVudmlyb25tZW50ICovCisJfCAoMHgwMDAxODBGRgkvKiBiaXRz IHVzZWQgZm9yIHByZWNpc2UgQ1BVIHR5cGUgY29tcGF0aWJpbGl0eSAqLwor CS8vICYgQ0FOX1JVTl9DUFVfRkFNSUxZKDApCS8qIGNhbiBydW4gb24gODA4 NiAqLworCS8vICYgQ0FOX1JVTl9DUFVfRkFNSUxZKDEpCS8qIGNhbiBydW4g b24gODAxODYgKi8KKwkvLyAmIENBTl9SVU5fQ1BVX0ZBTUlMWSgyKQkvKiBj YW4gcnVuIG9uIDgwMjg2ICovCisjaWZkZWYgQ09ORklHX00zODYKKwkmIENB Tl9SVU5fQ1BVX0ZBTUlMWSgzKQkJLyogaS5lLiBjYW5ub3Qgc2V0IEFDIGku ZS4gYml0IDE4IG9mIGZsYWdzICovCisJJiBDQU5fUlVOX0NQVV9GQU1JTFko NCkJCS8qIGkuZS4gQ1BVSUQgZmFtaWx5ID0gNCBvciBubyBDUFVJRCAqLwor CSYgQ0FOX1JVTl9DUFVfRkFNSUxZKDUpCQkvKiBpLmUuIENQVUlEIGZhbWls eSA9PSA1ICovCisJJiBDQU5fUlVOX0NQVV9GQU1JTFkoNikJCS8qIGkuZS4g Q1BVSUQgZmFtaWx5ID09IDYgKi8KKwkmIENBTl9SVU5fQ1BVX0ZBTUlMWSgx NSkJLyogaS5lLiBDUFVJRCBmYW1pbHkgPT0gKDB4RiArIDApIGV4dGVuZGVk X2ZhbWlseSAqLworIC8qIEhFTFBNRTogSXMgYW4gSUE2NCBjb21wYXRpYmxl IGVub3VnaCB0byBib290IGEgQ09ORklHX00zODYga2VybmVsPyBJIGRvIG5v dCB0aGluayBzby4gKi8KKyNlbGlmIGRlZmluZWQgKENPTkZJR19NNDg2KQor CSYgQ0FOX1JVTl9DUFVfRkFNSUxZKDQpCisJJiBDQU5fUlVOX0NQVV9GQU1J TFkoNSkKKwkmIENBTl9SVU5fQ1BVX0ZBTUlMWSg2KQorCSYgQ0FOX1JVTl9D UFVfRkFNSUxZKDE1KQorI2VsaWYgZGVmaW5lZCAoQ09ORklHX001ODYpIHx8 IGRlZmluZWQgKENPTkZJR19NSzYpIFwKKwl8fCBkZWZpbmVkIChDT05GSUdf TUNSVVNPRSkgfHwgZGVmaW5lZCAoQ09ORklHX01XSU5DSElQQzYpCisJJiBD QU5fUlVOX0NQVV9GQU1JTFkoNSkKKwkmIENBTl9SVU5fQ1BVX0ZBTUlMWSg2 KQorCSYgQ0FOX1JVTl9DUFVfRkFNSUxZKDE1KQorI2VsaWYgZGVmaW5lZCAo Q09ORklHX002ODYpIHx8IGRlZmluZWQgKENPTkZJR19NUEVOVElVTUlJKSBc CisJfHwgZGVmaW5lZCAoQ09ORklHX01QRU5USVVNSUlJKSB8fCBkZWZpbmVk IChDT05GSUdfTVBFTlRJVU1NKSBcCisJfHwgZGVmaW5lZCAoQ09ORklHX01L NykgfHwgZGVmaW5lZCAoQ09ORklHX01XSU5DSElQMikgXAorCXx8IGRlZmlu ZWQgKENPTkZJR19NQ1lSSVhJSUkpIHx8IGRlZmluZWQgKENPTkZJR19NVklB QzNfMikKKwkmIENBTl9SVU5fQ1BVX0ZBTUlMWSg2KQorCSYgQ0FOX1JVTl9D UFVfRkFNSUxZKDE1KQorI2VsaWYgZGVmaW5lZCAoQ09ORklHX01QRU5USVVN NCkgfHwgZGVmaW5lZCAoQ09ORklHX01LOCkKKwkmIENBTl9SVU5fQ1BVX0ZB TUlMWSgxNSkKKyNlbGlmIGRlZmluZWQgKENPTkZJR19JQTY0KQorCSYgQ0FO X1JVTl9DUFVfRkFNSUxZKDcpCQkvKiBjYW4gcnVuIG9uIDgwNzg2LCBpLmUu IENQVUlEIGZhbWlseSA9PSA3ICovCisJJiBDQU5fUlVOX0NQVV9GQU1JTFko MTYpCS8qIGNhbiBydW4gb24gODA/ODYsIGkuZS4gQ1BVSUQgZmFtaWx5ID09 ICgweEYgKyAxKSBleHRlbmRlZF9mYW1pbHkgKi8KKyNlbGlmIGRlZmluZWQg KENPTkZJR19JQTY0XzIpCisJJiBDQU5fUlVOX0NQVV9GQU1JTFkoMTYpCisj ZW5kaWYKKwkpOworCisvKiBQcm9iYWJseSBwbGVudHkgb2Ygb3RoZXIgY2hl Y2tzIHRvIGRvIGhlcmUuLi4gc2VlIHZtbGludXouaCAqLworY29uc3QgdW5z aWduZWQgbWFza0RmbGFncyA9IDAKKyNpZm5kZWYgQ09ORklHX01BVEhfRU1V TEFUSU9OCisJfCAoMSA8PCAwKQorI2VuZGlmCisjaWZkZWYgQ09ORklHX001 ODZUU0MKKwl8ICgxIDw8IDQpCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfWDg2 X0NNUFhDSEcKKwl8ICgxIDw8IDgpCisjZW5kaWYKKyNpZmRlZiBDT05GSUdf TTU4Nk1NWAorCXwgKDEgPDwgMjMpCisjZW5kaWYKKwk7Citjb25zdCB1bnNp Z25lZCBtYXNrQ2ZsYWdzID0gMAorI2lmZGVmIENPTkZJR19YODZfQ01QWENI RzE2QgorCXwgKDEgPDwgMTMpCisjZW5kaWYKKwk7CisKKy8qIHVudXNlZCBv biBQQ3M6ICovCitjb25zdCB1bnNpZ25lZCBtYXNrQmZsYWdzID0gMDsKKwor LyogQU1EIENQVUlEIDB4ODAwMDAwMDE6ICovCitjb25zdCB1bnNpZ25lZCBt YXNrQWZsYWdzID0gMAorI2lmZGVmIENPTkZJR19YODZfNjQKKwl8ICgxIDw8 IDI5KQorI2VuZGlmCisjaWZkZWYgQ09ORklHX1g4Nl9VU0VfM0ROT1cKKwl8 ICgxIDw8IDMxKQorI2VuZGlmCisJOworCisvKgorICogbWFza3Zlc2EgYW5k IG1hc2tyZXNvbHV0aW9uIGFyZSBvbmx5IGNoZWNrZWQgd2hlbiB0aGUgbG9h ZGVyIGhhcworICogc2NyZWVuIG1hbmFnZW1lbnQgY29tcGlsZWQtaW4sIGku ZS4gbm90IGZvciB0aW55LmltZyBub3IgdGlueS5leGUKKyAqIHZlcnNpb24g b2YgR3VqaW4uCisgKiBTZXQgdGhlbSB0byB6ZXJvIHRvIGNvbXBsZXRlbHkg ZGlzYWJsZSB0aG9zZSBjaGVjayBpbiBHdWppbi4KKyAqLworCisjZGVmaW5l IE1BU0tWRVNBX3hCUFAoeCkJKDEgPDwgKHgtMSkpCS8qIHggaXMgbnVtYmVy IG9mIEJpdFBlclBpeGVsICovCisjZGVmaW5lIE1BU0tWRVNBX1RFWFQJCSgx IDw8IDE2KQkvKiBhYmxlIHRvIGJvb3QgaW4gdGV4dCBtb2RlICovCisjZGVm aW5lIE1BU0tWRVNBX1dJTgkJKDEgPDwgMTcpCS8qIGFibGUgdG8gYm9vdCBp biBWRVNBMSBtb2RlICovCisjZGVmaW5lIE1BU0tWRVNBX0xJTgkJKDEgPDwg MTgpCS8qIGFibGUgdG8gYm9vdCBpbiBWRVNBMiBsaW5lYXIgbW9kZSAqLwor I2RlZmluZSBNQVNLVkVTQV9MSU4yV0lOCSgxIDw8IDE5KQkvKiBmb3JjZSBW RVNBMSBpZiBpbiBWRVNBMiAqLworI2RlZmluZSBNQVNLVkVTQV9OT0dSQVBI SUNWR0EJKDEgPDwgMjApCS8qIENhbm5vdCBoYW5kbGUgVkdBIGdyYXBoaWMg bW9kZXMgKi8KKworY29uc3QgdW5zaWduZWQgbWFza3Zlc2EgPSAwIC8qIHVz ZSBPUiB0byBleGNsdWRlIHRob3NlOiAqLworI2lmbmRlZiBDT05GSUdfRkJf VkVTQQorCXwgTUFTS1ZFU0FfeEJQUCgxKQorCXwgTUFTS1ZFU0FfeEJQUCgy KQorCXwgTUFTS1ZFU0FfeEJQUCg0KQorCXwgTUFTS1ZFU0FfeEJQUCg4KQor CXwgTUFTS1ZFU0FfeEJQUCgxNSkKKwl8IE1BU0tWRVNBX3hCUFAoMTYpCisJ fCBNQVNLVkVTQV94QlBQKDI0KQorCXwgTUFTS1ZFU0FfeEJQUCgzMikKKyNl bmRpZgorI2lmIGRlZmluZWQgKENPTkZJR19WR0FfQ09OU09MRSkgfHwgZGVm aW5lZCAoQ09ORklHX01EQV9DT05TT0xFKQorCXwgTUFTS1ZFU0FfVEVYVAor I2VuZGlmCisJLy8gfCBNQVNLVkVTQV9XSU4KKyNpZmRlZiBDT05GSUdfRkJf VkVTQQorCXwgTUFTS1ZFU0FfTElOCisjZW5kaWYKKwkvLyB8IE1BU0tWRVNB X0xJTjJXSU4KKwl8IE1BU0tWRVNBX05PR1JBUEhJQ1ZHQQorCTsKKworI2Rl ZmluZSBNQVNLUkVTT0xVVElPTl80MGNvbHMJCSgxIDw8IDApCisjZGVmaW5l IE1BU0tSRVNPTFVUSU9OXzgwY29scwkJKDEgPDwgMSkKKyNkZWZpbmUgTUFT S1JFU09MVVRJT05fMTAwY29scwkJKDEgPDwgMikKKyNkZWZpbmUgTUFTS1JF U09MVVRJT05fMTMyY29scwkJKDEgPDwgMykKKyNkZWZpbmUgTUFTS1JFU09M VVRJT05fMTYwY29scwkJKDEgPDwgNCkKKworI2RlZmluZSBNQVNLUkVTT0xV VElPTl8yNHJvd3MJCSgxIDw8IDUpCS8qIG1vc3RseSBWVC9zZXJpYWwgKi8K KyNkZWZpbmUgTUFTS1JFU09MVVRJT05fMjVyb3dzCQkoMSA8PCA2KQorI2Rl ZmluZSBNQVNLUkVTT0xVVElPTl8zMHJvd3MJCSgxIDw8IDcpCisjZGVmaW5l IE1BU0tSRVNPTFVUSU9OXzM2cm93cwkJKDEgPDwgOCkJLyogbW9zdGx5IFZU L3NlcmlhbCAqLworI2RlZmluZSBNQVNLUkVTT0xVVElPTl80M3Jvd3MJCSgx IDw8IDkpCisjZGVmaW5lIE1BU0tSRVNPTFVUSU9OXzQ0cm93cwkJKDEgPDwg MTApCisjZGVmaW5lIE1BU0tSRVNPTFVUSU9OXzQ4cm93cwkJKDEgPDwgMTEp CS8qIG1vc3RseSBWVC9zZXJpYWwgKi8KKyNkZWZpbmUgTUFTS1JFU09MVVRJ T05fNTByb3dzCQkoMSA8PCAxMikKKyNkZWZpbmUgTUFTS1JFU09MVVRJT05f NjByb3dzCQkoMSA8PCAxMykKKyNkZWZpbmUgTUFTS1JFU09MVVRJT05fNjRy b3dzCQkoMSA8PCAxNCkKKworI2RlZmluZSBNQVNLUkVTT0xVVElPTl8zMjB4 MjAwCQkoMSA8PCAxNSkKKyNkZWZpbmUgTUFTS1JFU09MVVRJT05fMzIweDQw MAkJKDEgPDwgMTYpCisjZGVmaW5lIE1BU0tSRVNPTFVUSU9OXzY0MHgyMDAJ CSgxIDw8IDE3KQorI2RlZmluZSBNQVNLUkVTT0xVVElPTl82NDB4MzUwCQko MSA8PCAxOCkKKyNkZWZpbmUgTUFTS1JFU09MVVRJT05fNjQweDQwMAkJKDEg PDwgMTkpCisjZGVmaW5lIE1BU0tSRVNPTFVUSU9OXzY0MHg0ODAJCSgxIDw8 IDIwKQorI2RlZmluZSBNQVNLUkVTT0xVVElPTl83MjB4NDAwCQkoMSA8PCAy MSkKKyNkZWZpbmUgTUFTS1JFU09MVVRJT05fNzY4eDEwMjQJCSgxIDw8IDIy KQorI2RlZmluZSBNQVNLUkVTT0xVVElPTl84MDB4NjAwCQkoMSA8PCAyMykK KyNkZWZpbmUgTUFTS1JFU09MVVRJT05fODMyeDYyNAkJKDEgPDwgMjQpCisj ZGVmaW5lIE1BU0tSRVNPTFVUSU9OXzEwMjR4NzY4CQkoMSA8PCAyNSkKKyNk ZWZpbmUgTUFTS1JFU09MVVRJT05fMTE1Mng4NjQJCSgxIDw8IDI2KQorI2Rl ZmluZSBNQVNLUkVTT0xVVElPTl8xMjgweDk2MAkJKDEgPDwgMjcpCisjZGVm aW5lIE1BU0tSRVNPTFVUSU9OXzEyODB4MTAyNAkoMSA8PCAyOCkKKyNkZWZp bmUgTUFTS1JFU09MVVRJT05fMTYwMHgxMjAwCSgxIDw8IDI5KQorI2RlZmlu ZSBNQVNLUkVTT0xVVElPTl8yMDQ4eDE1NDAJKDEgPDwgMzApCisjZGVmaW5l IE1BU0tSRVNPTFVUSU9OX1VOTElTVEVECQkoMSA8PCAzMSkJLyogbm90IGxp c3RlZCBpbnZhbGlkICovCisKK2NvbnN0IHVuc2lnbmVkIG1hc2tyZXNvbHV0 aW9uID0gMCAvKiB1c2UgT1IgdG8gZXhjbHVkZSB0aG9zZTogKi8KKwl8IE1B U0tSRVNPTFVUSU9OXzQwY29scworCXwgTUFTS1JFU09MVVRJT05fMzIweDIw MAorCXwgTUFTS1JFU09MVVRJT05fMzIweDQwMAorCS8vIHwgTUFTS1JFU09M VVRJT05fVU5MSVNURUQJLyogbm90IGxpc3RlZCBpbnZhbGlkICovCisJOwor CitpbnQgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KSB7CisJcHJpbnRm ICgibWluX2d1amluX3ZlcnNpb249MHglWCBtYXNrY3B1PTB4JVggIiwKKwkJ bWluX2d1amluX3ZlcnNpb24sIG1hc2tjcHUpOworCWlmIChtYXNrRGZsYWdz ICE9IDApCisJCXByaW50ZiAoIm1hc2tEZmxhZ3M9MHglWCAiLCBtYXNrRGZs YWdzKTsKKwlpZiAobWFza0FmbGFncyAhPSAwKQorCQlwcmludGYgKCJtYXNr QWZsYWdzPTB4JVggIiwgbWFza0FmbGFncyk7CisjaWYgZGVmaW5lZCAoQ09O RklHX1BIWVNJQ0FMX1NUQVJUKSAmJiBDT05GSUdfUEhZU0lDQUxfU1RBUlQg IT0gMHgxMDAwMDAKKwlwcmludGYgKCJsb2FkYWRyPTB4JVggIiwgbG9hZGFk cik7CisjZW5kaWYKKwlwcmludGYgKCJtYXNrdmVzYT0weCVYIG1hc2tyZXNv bHV0aW9uPTB4JVhcbiIsCisJCW1hc2t2ZXNhLCBtYXNrcmVzb2x1dGlvbik7 CisJcmV0dXJuIDA7CisJfQo= --0-1015933241-1136502192=:28489--