From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.org/gmane.linux.lib.musl.general/1327 Path: news.gmane.org!not-for-mail From: =?ISO-8859-2?Q?=A3ukasz_Sowa?= Newsgroups: gmane.linux.lib.musl.general Subject: Re: crypt* files in crypt directory Date: Sat, 21 Jul 2012 17:23:24 +0200 (CEST) Message-ID: Reply-To: musl@lists.openwall.com NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="8323328-1469176627-1342884209=:1301" X-Trace: dough.gmane.org 1342888530 15735 80.91.229.3 (21 Jul 2012 16:35:30 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Sat, 21 Jul 2012 16:35:30 +0000 (UTC) To: musl@lists.openwall.com Original-X-From: musl-return-1328-gllmg-musl=m.gmane.org@lists.openwall.com Sat Jul 21 18:35:30 2012 Return-path: Envelope-to: gllmg-musl@plane.gmane.org Original-Received: from mother.openwall.net ([195.42.179.200]) by plane.gmane.org with smtp (Exim 4.69) (envelope-from ) id 1SsceL-0003H2-Pz for gllmg-musl@plane.gmane.org; Sat, 21 Jul 2012 18:35:26 +0200 Original-Received: (qmail 28306 invoked by uid 550); 21 Jul 2012 16:35:24 -0000 Mailing-List: contact musl-help@lists.openwall.com; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: Original-Received: (qmail 1681 invoked from network); 21 Jul 2012 15:23:43 -0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=sender:date:from:x-x-sender:to:subject:message-id:user-agent :mime-version:content-type; bh=VIctgqrouO5NO/YGzekBAoxopWrgwWn4CTo1T/Rqd3o=; b=K2vsFj48eZHba41PFYas0jBM1gKodsUDC/j9O/xOAtooBI4GtLnjN+bPnPc8a0ZV65 SE5aqapwiMY2SLzMKRV6JoH3ugmOXw6H6QVfDDTlhOVw0MA8CdkPn2a76i7V3rBl4FgQ WbzCYQQcFH6RMEaMBjiezYXt7qqj5B38ZOdezUBVr95oXKIjFXhRoFwjzTbnmnYTpZkz UHc7jNrr6D5yAZM5uAeXyYZ0Ep8/c/n1/zxHbncZRCSjIf6IJOaRkV0okq0SKqoHoKSu 97YmunwwYsNDo0q6dzlVUPWKsCk7aBYuMkVmVvGsmtHRz37fB7Xa3otMNtZ+CjqrW86B s7cQ== Original-Sender: =?UTF-8?B?xYF1a2FzeiBTb3dh?= X-X-Sender: luke@localhost.localdomain User-Agent: Alpine 2.02 (LNX 1266 2009-07-14) Xref: news.gmane.org gmane.linux.lib.musl.general:1327 Archived-At: This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. --8323328-1469176627-1342884209=:1301 Content-Type: TEXT/PLAIN; format=flowed; charset=ISO-8859-2 Content-Transfer-Encoding: 8BIT Hi, My first mail here so sorry for any faux pas :) >On Tue, Jul 17, 2012 at 11:40:28AM +0200, Daniel Cegiełka wrote: >> Hi, >> >> I have a proposal to move the crypt* files from misc directory to the >> new crypt directory. > >I'm definitely open to this; the misc directory is presently a mess >and eventually I want to eliminate it completely. If we do go ahead >with moving it, it might make sense to eliminate the crypt_ prefix >from the filenames (i.e. just des.c instead of crypt_des.c) to >eliminate redundancy. >> I want to port to musl crypt_blowfish patch >> (http://www.openwall.com/crypt/) and keeping everything in one >> directory would be more readable. >I would be interested in getting at least this, md5, and sha hash >support added, as long as they can be made compact. 3-5k each would be >ideal but I realize that might be difficult. For inclusion in musl, >they should have no non-const static data (i.e. no global state) and >also avoid using excessive stack space for temporary tables. > >Rich Together with Daniel we've prepared initial patch for inclusion crypt_blowfish and crypt_gensalt in musl. Things to change were rather cosmetic. Both blowfish and gensalt implementations don't use global state, only const statics (which needed simply 'const' to meet musl standard). Besides that code looks quite clean & nice. However, there are some consts arrays used inside functions which may clutter stack like flags_by_subtype from BF_crypt(), test_key, test_setting, test_hash from _crypt_blowfish_rn(). I think that they can be pulled up to global static consts but we haven't done that yet. What do you think about this? By the way, we had some problems with compiling it to libcrypt.a - it seems empty, don't know why. The code is being compiled into libc. Anyway Daniel successfully tested it with gcc-musl -DTEST -D_GNU_SOURCE wrapper.c -o musl_blowfish_test Looking forward to your feedback. Best Regards, Łukasz Sowa --8323328-1469176627-1342884209=:1301 Content-Type: TEXT/PLAIN; charset=US-ASCII; name=blowfish_gensalt.diff Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename=blowfish_gensalt.diff ZGlmZiAtLWdpdCBhL2luY2x1ZGUvY3J5cHQuaCBiL2luY2x1ZGUvY3J5cHQu aA0KaW5kZXggMDdkZTIxNi4uMmQwZTIyYSAxMDA2NDQNCi0tLSBhL2luY2x1 ZGUvY3J5cHQuaA0KKysrIGIvaW5jbHVkZS9jcnlwdC5oDQpAQCAtMTMsNiAr MTMsMTkgQEAgc3RydWN0IGNyeXB0X2RhdGEgew0KIGNoYXIgKmNyeXB0KGNv bnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsNCiBjaGFyICpjcnlwdF9yKGNv bnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBzdHJ1Y3QgY3J5cHRfZGF0YSAq KTsNCiANCitjaGFyICpfY3J5cHRfZ2Vuc2FsdF90cmFkaXRpb25hbF9ybihj b25zdCBjaGFyICpwcmVmaXgsIHVuc2lnbmVkIGxvbmcgY291bnQsDQorCWNv bnN0IGNoYXIgKmlucHV0LCBpbnQgc2l6ZSwgY2hhciAqb3V0cHV0LCBpbnQg b3V0cHV0X3NpemUpOw0KK2NoYXIgKl9jcnlwdF9nZW5zYWx0X2V4dGVuZGVk X3JuKGNvbnN0IGNoYXIgKnByZWZpeCwgdW5zaWduZWQgbG9uZyBjb3VudCwN CisJY29uc3QgY2hhciAqaW5wdXQsIGludCBzaXplLCBjaGFyICpvdXRwdXQs IGludCBvdXRwdXRfc2l6ZSk7DQorY2hhciAqX2NyeXB0X2dlbnNhbHRfbWQ1 X3JuKGNvbnN0IGNoYXIgKnByZWZpeCwgdW5zaWduZWQgbG9uZyBjb3VudCwN CisJY29uc3QgY2hhciAqaW5wdXQsIGludCBzaXplLCBjaGFyICpvdXRwdXQs IGludCBvdXRwdXRfc2l6ZSk7DQorDQoraW50IF9jcnlwdF9vdXRwdXRfbWFn aWMoY29uc3QgY2hhciAqc2V0dGluZywgY2hhciAqb3V0cHV0LCBpbnQgc2l6 ZSk7DQorY2hhciAqX2NyeXB0X2Jsb3dmaXNoX3JuKGNvbnN0IGNoYXIgKmtl eSwgY29uc3QgY2hhciAqc2V0dGluZywNCisJY2hhciAqb3V0cHV0LCBpbnQg c2l6ZSk7DQorY2hhciAqX2NyeXB0X2dlbnNhbHRfYmxvd2Zpc2hfcm4oY29u c3QgY2hhciAqcHJlZml4LCB1bnNpZ25lZCBsb25nIGNvdW50LA0KKwljb25z dCBjaGFyICppbnB1dCwgaW50IHNpemUsIGNoYXIgKm91dHB1dCwgaW50IG91 dHB1dF9zaXplKTsNCisNCiAjaWZkZWYgX19jcGx1c3BsdXMNCiB9DQogI2Vu ZGlmDQpkaWZmIC0tZ2l0IGEvc3JjL21pc2MvY3J5cHRfYmxvd2Zpc2guYyBi L3NyYy9taXNjL2NyeXB0X2Jsb3dmaXNoLmMNCm5ldyBmaWxlIG1vZGUgMTAw NjQ0DQppbmRleCAwMDAwMDAwLi41ZWY5Mjc2DQotLS0gL2Rldi9udWxsDQor KysgYi9zcmMvbWlzYy9jcnlwdF9ibG93ZmlzaC5jDQpAQCAtMCwwICsxLDkw MiBAQA0KKy8qDQorICogVGhlIGNyeXB0X2Jsb3dmaXNoIGhvbWVwYWdlIGlz Og0KKyAqDQorICoJaHR0cDovL3d3dy5vcGVud2FsbC5jb20vY3J5cHQvDQor ICoNCisgKiBUaGlzIGNvZGUgY29tZXMgZnJvbSBKb2huIHRoZSBSaXBwZXIg cGFzc3dvcmQgY3JhY2tlciwgd2l0aCByZWVudHJhbnQNCisgKiBhbmQgY3J5 cHQoMykgaW50ZXJmYWNlcyBhZGRlZCwgYnV0IG9wdGltaXphdGlvbnMgc3Bl Y2lmaWMgdG8gcGFzc3dvcmQNCisgKiBjcmFja2luZyByZW1vdmVkLg0KKyAq DQorICogV3JpdHRlbiBieSBTb2xhciBEZXNpZ25lciA8c29sYXIgYXQgb3Bl bndhbGwuY29tPiBpbiAxOTk4LTIwMTEuDQorICogTm8gY29weXJpZ2h0IGlz IGNsYWltZWQsIGFuZCB0aGUgc29mdHdhcmUgaXMgaGVyZWJ5IHBsYWNlZCBp biB0aGUgcHVibGljDQorICogZG9tYWluLiAgSW4gY2FzZSB0aGlzIGF0dGVt cHQgdG8gZGlzY2xhaW0gY29weXJpZ2h0IGFuZCBwbGFjZSB0aGUgc29mdHdh cmUNCisgKiBpbiB0aGUgcHVibGljIGRvbWFpbiBpcyBkZWVtZWQgbnVsbCBh bmQgdm9pZCwgdGhlbiB0aGUgc29mdHdhcmUgaXMNCisgKiBDb3B5cmlnaHQg KGMpIDE5OTgtMjAxMSBTb2xhciBEZXNpZ25lciBhbmQgaXQgaXMgaGVyZWJ5 IHJlbGVhc2VkIHRvIHRoZQ0KKyAqIGdlbmVyYWwgcHVibGljIHVuZGVyIHRo ZSBmb2xsb3dpbmcgdGVybXM6DQorICoNCisgKiBSZWRpc3RyaWJ1dGlvbiBh bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp dGhvdXQNCisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQuDQorICoN CisgKiBUaGVyZSdzIEFCU09MVVRFTFkgTk8gV0FSUkFOVFksIGV4cHJlc3Mg b3IgaW1wbGllZC4NCisgKg0KKyAqIEl0IGlzIG15IGludGVudCB0aGF0IHlv dSBzaG91bGQgYmUgYWJsZSB0byB1c2UgdGhpcyBvbiB5b3VyIHN5c3RlbSwN CisgKiBhcyBwYXJ0IG9mIGEgc29mdHdhcmUgcGFja2FnZSwgb3IgYW55d2hl cmUgZWxzZSB0byBpbXByb3ZlIHNlY3VyaXR5LA0KKyAqIGVuc3VyZSBjb21w YXRpYmlsaXR5LCBvciBmb3IgYW55IG90aGVyIHB1cnBvc2UuICBJIHdvdWxk IGFwcHJlY2lhdGUNCisgKiBpdCBpZiB5b3UgZ2l2ZSBjcmVkaXQgd2hlcmUg aXQgaXMgZHVlIGFuZCBrZWVwIHlvdXIgbW9kaWZpY2F0aW9ucyBpbg0KKyAq IHRoZSBwdWJsaWMgZG9tYWluIGFzIHdlbGwsIGJ1dCBJIGRvbid0IHJlcXVp cmUgdGhhdCBpbiBvcmRlciB0byBsZXQNCisgKiB5b3UgcGxhY2UgdGhpcyBj b2RlIGFuZCBhbnkgbW9kaWZpY2F0aW9ucyB5b3UgbWFrZSB1bmRlciBhIGxp Y2Vuc2UNCisgKiBvZiB5b3VyIGNob2ljZS4NCisgKg0KKyAqIFRoaXMgaW1w bGVtZW50YXRpb24gaXMgbW9zdGx5IGNvbXBhdGlibGUgd2l0aCBPcGVuQlNE J3MgYmNyeXB0LmMgKHByZWZpeA0KKyAqICIkMmEkIikgYnkgTmllbHMgUHJv dm9zIDxwcm92b3MgYXQgY2l0aS51bWljaC5lZHU+LCBhbmQgdXNlcyBzb21l IG9mIGhpcw0KKyAqIGlkZWFzLiAgVGhlIHBhc3N3b3JkIGhhc2hpbmcgYWxn b3JpdGhtIHdhcyBkZXNpZ25lZCBieSBEYXZpZCBNYXppZXJlcw0KKyAqIDxk bSBhdCBsY3MubWl0LmVkdT4uICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0 aGUgbGV2ZWwgb2YgY29tcGF0aWJpbGl0eSwNCisgKiBwbGVhc2UgcmVmZXIg dG8gdGhlIGNvbW1lbnRzIGluIEJGX3NldF9rZXkoKSBiZWxvdyBhbmQgdG8g dGhlIGluY2x1ZGVkDQorICogY3J5cHQoMykgbWFuIHBhZ2UuDQorICoNCisg KiBUaGVyZSdzIGEgcGFwZXIgb24gdGhlIGFsZ29yaXRobSB0aGF0IGV4cGxh aW5zIGl0cyBkZXNpZ24gZGVjaXNpb25zOg0KKyAqDQorICoJaHR0cDovL3d3 dy51c2VuaXgub3JnL2V2ZW50cy91c2VuaXg5OS9wcm92b3MuaHRtbA0KKyAq DQorICogU29tZSBvZiB0aGUgdHJpY2tzIGluIEJGX1JPVU5EIG1pZ2h0IGJl IGluc3BpcmVkIGJ5IEVyaWMgWW91bmcncw0KKyAqIEJsb3dmaXNoIGxpYnJh cnkgKEkgY2FuJ3QgYmUgc3VyZSBpZiBJIHdvdWxkIHRoaW5rIG9mIHNvbWV0 aGluZyBpZiBJDQorICogaGFkbid0IHNlZW4gaGlzIGNvZGUpLg0KKyAqLw0K Kw0KKyNpbmNsdWRlIDxzdHJpbmcuaD4NCisNCisjaW5jbHVkZSA8ZXJybm8u aD4NCisjaWZuZGVmIF9fc2V0X2Vycm5vDQorI2RlZmluZSBfX3NldF9lcnJu byh2YWwpIGVycm5vID0gKHZhbCkNCisjZW5kaWYNCisNCisvKiBKdXN0IHRv IG1ha2Ugc3VyZSB0aGUgcHJvdG90eXBlcyBtYXRjaCB0aGUgYWN0dWFsIGRl ZmluaXRpb25zICovDQorI2luY2x1ZGUgPGNyeXB0Lmg+DQorDQorI2lmZGVm IF9faTM4Nl9fDQorI2RlZmluZSBCRl9BU00JCQkJMQ0KKyNkZWZpbmUgQkZf U0NBTEUJCQkxDQorI2VsaWYgZGVmaW5lZChfX3g4Nl82NF9fKSB8fCBkZWZp bmVkKF9fYWxwaGFfXykgfHwgZGVmaW5lZChfX2hwcGFfXykNCisjZGVmaW5l IEJGX0FTTQkJCQkwDQorI2RlZmluZSBCRl9TQ0FMRQkJCTENCisjZWxzZQ0K KyNkZWZpbmUgQkZfQVNNCQkJCTANCisjZGVmaW5lIEJGX1NDQUxFCQkJMA0K KyNlbmRpZg0KKw0KK3R5cGVkZWYgdW5zaWduZWQgaW50IEJGX3dvcmQ7DQor dHlwZWRlZiBzaWduZWQgaW50IEJGX3dvcmRfc2lnbmVkOw0KKw0KKy8qIE51 bWJlciBvZiBCbG93ZmlzaCByb3VuZHMsIHRoaXMgaXMgYWxzbyBoYXJkY29k ZWQgaW50byBhIGZldyBwbGFjZXMgKi8NCisjZGVmaW5lIEJGX04JCQkJMTYN CisNCit0eXBlZGVmIEJGX3dvcmQgQkZfa2V5W0JGX04gKyAyXTsNCisNCit0 eXBlZGVmIHN0cnVjdCB7DQorCUJGX3dvcmQgU1s0XVsweDEwMF07DQorCUJG X2tleSBQOw0KK30gQkZfY3R4Ow0KKw0KKy8qDQorICogTWFnaWMgSVYgZm9y IDY0IEJsb3dmaXNoIGVuY3J5cHRpb25zIHRoYXQgd2UgZG8gYXQgdGhlIGVu ZC4NCisgKiBUaGUgc3RyaW5nIGlzICJPcnBoZWFuQmVob2xkZXJTY3J5RG91 YnQiIG9uIGJpZy1lbmRpYW4uDQorICovDQorc3RhdGljIGNvbnN0IEJGX3dv cmQgQkZfbWFnaWNfd1s2XSA9IHsNCisJMHg0RjcyNzA2OCwgMHg2NTYxNkU0 MiwgMHg2NTY4NkY2QywNCisJMHg2NDY1NzI1MywgMHg2MzcyNzk0NCwgMHg2 Rjc1NjI3NA0KK307DQorDQorLyoNCisgKiBQLWJveCBhbmQgUy1ib3ggdGFi bGVzIGluaXRpYWxpemVkIHdpdGggZGlnaXRzIG9mIFBpLg0KKyAqLw0KK3N0 YXRpYyBjb25zdCBCRl9jdHggQkZfaW5pdF9zdGF0ZSA9IHsNCisJew0KKwkJ ew0KKwkJCTB4ZDEzMTBiYTYsIDB4OThkZmI1YWMsIDB4MmZmZDcyZGIsIDB4 ZDAxYWRmYjcsDQorCQkJMHhiOGUxYWZlZCwgMHg2YTI2N2U5NiwgMHhiYTdj OTA0NSwgMHhmMTJjN2Y5OSwNCisJCQkweDI0YTE5OTQ3LCAweGIzOTE2Y2Y3 LCAweDA4MDFmMmUyLCAweDg1OGVmYzE2LA0KKwkJCTB4NjM2OTIwZDgsIDB4 NzE1NzRlNjksIDB4YTQ1OGZlYTMsIDB4ZjQ5MzNkN2UsDQorCQkJMHgwZDk1 NzQ4ZiwgMHg3MjhlYjY1OCwgMHg3MThiY2Q1OCwgMHg4MjE1NGFlZSwNCisJ CQkweDdiNTRhNDFkLCAweGMyNWE1OWI1LCAweDljMzBkNTM5LCAweDJhZjI2 MDEzLA0KKwkJCTB4YzVkMWIwMjMsIDB4Mjg2MDg1ZjAsIDB4Y2E0MTc5MTgs IDB4YjhkYjM4ZWYsDQorCQkJMHg4ZTc5ZGNiMCwgMHg2MDNhMTgwZSwgMHg2 YzllMGU4YiwgMHhiMDFlOGEzZSwNCisJCQkweGQ3MTU3N2MxLCAweGJkMzE0 YjI3LCAweDc4YWYyZmRhLCAweDU1NjA1YzYwLA0KKwkJCTB4ZTY1NTI1ZjMs IDB4YWE1NWFiOTQsIDB4NTc0ODk4NjIsIDB4NjNlODE0NDAsDQorCQkJMHg1 NWNhMzk2YSwgMHgyYWFiMTBiNiwgMHhiNGNjNWMzNCwgMHgxMTQxZThjZSwN CisJCQkweGExNTQ4NmFmLCAweDdjNzJlOTkzLCAweGIzZWUxNDExLCAweDYz NmZiYzJhLA0KKwkJCTB4MmJhOWM1NWQsIDB4NzQxODMxZjYsIDB4Y2U1YzNl MTYsIDB4OWI4NzkzMWUsDQorCQkJMHhhZmQ2YmEzMywgMHg2YzI0Y2Y1Yywg MHg3YTMyNTM4MSwgMHgyODk1ODY3NywNCisJCQkweDNiOGY0ODk4LCAweDZi NGJiOWFmLCAweGM0YmZlODFiLCAweDY2MjgyMTkzLA0KKwkJCTB4NjFkODA5 Y2MsIDB4ZmIyMWE5OTEsIDB4NDg3Y2FjNjAsIDB4NWRlYzgwMzIsDQorCQkJ MHhlZjg0NWQ1ZCwgMHhlOTg1NzViMSwgMHhkYzI2MjMwMiwgMHhlYjY1MWI4 OCwNCisJCQkweDIzODkzZTgxLCAweGQzOTZhY2M1LCAweDBmNmQ2ZmYzLCAw eDgzZjQ0MjM5LA0KKwkJCTB4MmUwYjQ0ODIsIDB4YTQ4NDIwMDQsIDB4Njlj OGYwNGEsIDB4OWUxZjliNWUsDQorCQkJMHgyMWM2Njg0MiwgMHhmNmU5NmM5 YSwgMHg2NzBjOWM2MSwgMHhhYmQzODhmMCwNCisJCQkweDZhNTFhMGQyLCAw eGQ4NTQyZjY4LCAweDk2MGZhNzI4LCAweGFiNTEzM2EzLA0KKwkJCTB4NmVl ZjBiNmMsIDB4MTM3YTNiZTQsIDB4YmEzYmYwNTAsIDB4N2VmYjJhOTgsDQor CQkJMHhhMWYxNjUxZCwgMHgzOWFmMDE3NiwgMHg2NmNhNTkzZSwgMHg4MjQz MGU4OCwNCisJCQkweDhjZWU4NjE5LCAweDQ1NmY5ZmI0LCAweDdkODRhNWMz LCAweDNiOGI1ZWJlLA0KKwkJCTB4ZTA2Zjc1ZDgsIDB4ODVjMTIwNzMsIDB4 NDAxYTQ0OWYsIDB4NTZjMTZhYTYsDQorCQkJMHg0ZWQzYWE2MiwgMHgzNjNm NzcwNiwgMHgxYmZlZGY3MiwgMHg0MjliMDIzZCwNCisJCQkweDM3ZDBkNzI0 LCAweGQwMGExMjQ4LCAweGRiMGZlYWQzLCAweDQ5ZjFjMDliLA0KKwkJCTB4 MDc1MzcyYzksIDB4ODA5OTFiN2IsIDB4MjVkNDc5ZDgsIDB4ZjZlOGRlZjcs DQorCQkJMHhlM2ZlNTAxYSwgMHhiNjc5NGMzYiwgMHg5NzZjZTBiZCwgMHgw NGMwMDZiYSwNCisJCQkweGMxYTk0ZmI2LCAweDQwOWY2MGM0LCAweDVlNWM5 ZWMyLCAweDE5NmEyNDYzLA0KKwkJCTB4NjhmYjZmYWYsIDB4M2U2YzUzYjUs IDB4MTMzOWIyZWIsIDB4M2I1MmVjNmYsDQorCQkJMHg2ZGZjNTExZiwgMHg5 YjMwOTUyYywgMHhjYzgxNDU0NCwgMHhhZjVlYmQwOSwNCisJCQkweGJlZTNk MDA0LCAweGRlMzM0YWZkLCAweDY2MGYyODA3LCAweDE5MmU0YmIzLA0KKwkJ CTB4YzBjYmE4NTcsIDB4NDVjODc0MGYsIDB4ZDIwYjVmMzksIDB4YjlkM2Zi ZGIsDQorCQkJMHg1NTc5YzBiZCwgMHgxYTYwMzIwYSwgMHhkNmExMDBjNiwg MHg0MDJjNzI3OSwNCisJCQkweDY3OWYyNWZlLCAweGZiMWZhM2NjLCAweDhl YTVlOWY4LCAweGRiMzIyMmY4LA0KKwkJCTB4M2M3NTE2ZGYsIDB4ZmQ2MTZi MTUsIDB4MmY1MDFlYzgsIDB4YWQwNTUyYWIsDQorCQkJMHgzMjNkYjVmYSwg MHhmZDIzODc2MCwgMHg1MzMxN2I0OCwgMHgzZTAwZGY4MiwNCisJCQkweDll NWM1N2JiLCAweGNhNmY4Y2EwLCAweDFhODc1NjJlLCAweGRmMTc2OWRiLA0K KwkJCTB4ZDU0MmE4ZjYsIDB4Mjg3ZWZmYzMsIDB4YWM2NzMyYzYsIDB4OGM0 ZjU1NzMsDQorCQkJMHg2OTViMjdiMCwgMHhiYmNhNThjOCwgMHhlMWZmYTM1 ZCwgMHhiOGYwMTFhMCwNCisJCQkweDEwZmEzZDk4LCAweGZkMjE4M2I4LCAw eDRhZmNiNTZjLCAweDJkZDFkMzViLA0KKwkJCTB4OWE1M2U0NzksIDB4YjZm ODQ1NjUsIDB4ZDI4ZTQ5YmMsIDB4NGJmYjk3OTAsDQorCQkJMHhlMWRkZjJk YSwgMHhhNGNiN2UzMywgMHg2MmZiMTM0MSwgMHhjZWU0YzZlOCwNCisJCQkw eGVmMjBjYWRhLCAweDM2Nzc0YzAxLCAweGQwN2U5ZWZlLCAweDJiZjExZmI0 LA0KKwkJCTB4OTVkYmRhNGQsIDB4YWU5MDkxOTgsIDB4ZWFhZDhlNzEsIDB4 NmI5M2Q1YTAsDQorCQkJMHhkMDhlZDFkMCwgMHhhZmM3MjVlMCwgMHg4ZTNj NWIyZiwgMHg4ZTc1OTRiNywNCisJCQkweDhmZjZlMmZiLCAweGYyMTIyYjY0 LCAweDg4ODhiODEyLCAweDkwMGRmMDFjLA0KKwkJCTB4NGZhZDVlYTAsIDB4 Njg4ZmMzMWMsIDB4ZDFjZmYxOTEsIDB4YjNhOGMxYWQsDQorCQkJMHgyZjJm MjIxOCwgMHhiZTBlMTc3NywgMHhlYTc1MmRmZSwgMHg4YjAyMWZhMSwNCisJ CQkweGU1YTBjYzBmLCAweGI1NmY3NGU4LCAweDE4YWNmM2Q2LCAweGNlODll Mjk5LA0KKwkJCTB4YjRhODRmZTAsIDB4ZmQxM2UwYjcsIDB4N2NjNDNiODEs IDB4ZDJhZGE4ZDksDQorCQkJMHgxNjVmYTI2NiwgMHg4MDk1NzcwNSwgMHg5 M2NjNzMxNCwgMHgyMTFhMTQ3NywNCisJCQkweGU2YWQyMDY1LCAweDc3YjVm YTg2LCAweGM3NTQ0MmY1LCAweGZiOWQzNWNmLA0KKwkJCTB4ZWJjZGFmMGMs IDB4N2IzZTg5YTAsIDB4ZDY0MTFiZDMsIDB4YWUxZTdlNDksDQorCQkJMHgw MDI1MGUyZCwgMHgyMDcxYjM1ZSwgMHgyMjY4MDBiYiwgMHg1N2I4ZTBhZiwN CisJCQkweDI0NjQzNjliLCAweGYwMDliOTFlLCAweDU1NjM5MTFkLCAweDU5 ZGZhNmFhLA0KKwkJCTB4NzhjMTQzODksIDB4ZDk1YTUzN2YsIDB4MjA3ZDVi YTIsIDB4MDJlNWI5YzUsDQorCQkJMHg4MzI2MDM3NiwgMHg2Mjk1Y2ZhOSwg MHgxMWM4MTk2OCwgMHg0ZTczNGE0MSwNCisJCQkweGIzNDcyZGNhLCAweDdi MTRhOTRhLCAweDFiNTEwMDUyLCAweDlhNTMyOTE1LA0KKwkJCTB4ZDYwZjU3 M2YsIDB4YmM5YmM2ZTQsIDB4MmI2MGE0NzYsIDB4ODFlNjc0MDAsDQorCQkJ MHgwOGJhNmZiNSwgMHg1NzFiZTkxZiwgMHhmMjk2ZWM2YiwgMHgyYTBkZDkx NSwNCisJCQkweGI2NjM2NTIxLCAweGU3YjlmOWI2LCAweGZmMzQwNTJlLCAw eGM1ODU1NjY0LA0KKwkJCTB4NTNiMDJkNWQsIDB4YTk5ZjhmYTEsIDB4MDhi YTQ3OTksIDB4NmU4NTA3NmENCisJCX0sIHsNCisJCQkweDRiN2E3MGU5LCAw eGI1YjMyOTQ0LCAweGRiNzUwOTJlLCAweGM0MTkyNjIzLA0KKwkJCTB4YWQ2 ZWE2YjAsIDB4NDlhN2RmN2QsIDB4OWNlZTYwYjgsIDB4OGZlZGIyNjYsDQor CQkJMHhlY2FhOGM3MSwgMHg2OTlhMTdmZiwgMHg1NjY0NTI2YywgMHhjMmIx OWVlMSwNCisJCQkweDE5MzYwMmE1LCAweDc1MDk0YzI5LCAweGEwNTkxMzQw LCAweGU0MTgzYTNlLA0KKwkJCTB4M2Y1NDk4OWEsIDB4NWI0MjlkNjUsIDB4 NmI4ZmU0ZDYsIDB4OTlmNzNmZDYsDQorCQkJMHhhMWQyOWMwNywgMHhlZmU4 MzBmNSwgMHg0ZDJkMzhlNiwgMHhmMDI1NWRjMSwNCisJCQkweDRjZGQyMDg2 LCAweDg0NzBlYjI2LCAweDYzODJlOWM2LCAweDAyMWVjYzVlLA0KKwkJCTB4 MDk2ODZiM2YsIDB4M2ViYWVmYzksIDB4M2M5NzE4MTQsIDB4NmI2YTcwYTEs DQorCQkJMHg2ODdmMzU4NCwgMHg1MmEwZTI4NiwgMHhiNzljNTMwNSwgMHhh YTUwMDczNywNCisJCQkweDNlMDc4NDFjLCAweDdmZGVhZTVjLCAweDhlN2Q0 NGVjLCAweDU3MTZmMmI4LA0KKwkJCTB4YjAzYWRhMzcsIDB4ZjA1MDBjMGQs IDB4ZjAxYzFmMDQsIDB4MDIwMGIzZmYsDQorCQkJMHhhZTBjZjUxYSwgMHgz Y2I1NzRiMiwgMHgyNTgzN2E1OCwgMHhkYzA5MjFiZCwNCisJCQkweGQxOTEx M2Y5LCAweDdjYTkyZmY2LCAweDk0MzI0NzczLCAweDIyZjU0NzAxLA0KKwkJ CTB4M2FlNWU1ODEsIDB4MzdjMmRhZGMsIDB4YzhiNTc2MzQsIDB4OWFmM2Rk YTcsDQorCQkJMHhhOTQ0NjE0NiwgMHgwZmQwMDMwZSwgMHhlY2M4YzczZSwg MHhhNDc1MWU0MSwNCisJCQkweGUyMzhjZDk5LCAweDNiZWEwZTJmLCAweDMy ODBiYmExLCAweDE4M2ViMzMxLA0KKwkJCTB4NGU1NDhiMzgsIDB4NGY2ZGI5 MDgsIDB4NmY0MjBkMDMsIDB4ZjYwYTA0YmYsDQorCQkJMHgyY2I4MTI5MCwg MHgyNDk3N2M3OSwgMHg1Njc5YjA3MiwgMHhiY2FmODlhZiwNCisJCQkweGRl OWE3NzFmLCAweGQ5OTMwODEwLCAweGIzOGJhZTEyLCAweGRjY2YzZjJlLA0K KwkJCTB4NTUxMjcyMWYsIDB4MmU2YjcxMjQsIDB4NTAxYWRkZTYsIDB4OWY4 NGNkODcsDQorCQkJMHg3YTU4NDcxOCwgMHg3NDA4ZGExNywgMHhiYzlmOWFi YywgMHhlOTRiN2Q4YywNCisJCQkweGVjN2FlYzNhLCAweGRiODUxZGZhLCAw eDYzMDk0MzY2LCAweGM0NjRjM2QyLA0KKwkJCTB4ZWYxYzE4NDcsIDB4MzIx NWQ5MDgsIDB4ZGQ0MzNiMzcsIDB4MjRjMmJhMTYsDQorCQkJMHgxMmExNGQ0 MywgMHgyYTY1YzQ1MSwgMHg1MDk0MDAwMiwgMHgxMzNhZTRkZCwNCisJCQkw eDcxZGZmODllLCAweDEwMzE0ZTU1LCAweDgxYWM3N2Q2LCAweDVmMTExOTli LA0KKwkJCTB4MDQzNTU2ZjEsIDB4ZDdhM2M3NmIsIDB4M2MxMTE4M2IsIDB4 NTkyNGE1MDksDQorCQkJMHhmMjhmZTZlZCwgMHg5N2YxZmJmYSwgMHg5ZWJh YmYyYywgMHgxZTE1M2M2ZSwNCisJCQkweDg2ZTM0NTcwLCAweGVhZTk2ZmIx LCAweDg2MGU1ZTBhLCAweDVhM2UyYWIzLA0KKwkJCTB4NzcxZmU3MWMsIDB4 NGUzZDA2ZmEsIDB4Mjk2NWRjYjksIDB4OTllNzFkMGYsDQorCQkJMHg4MDNl ODlkNiwgMHg1MjY2YzgyNSwgMHgyZTRjYzk3OCwgMHg5YzEwYjM2YSwNCisJ CQkweGM2MTUwZWJhLCAweDk0ZTJlYTc4LCAweGE1ZmMzYzUzLCAweDFlMGEy ZGY0LA0KKwkJCTB4ZjJmNzRlYTcsIDB4MzYxZDJiM2QsIDB4MTkzOTI2MGYs IDB4MTljMjc5NjAsDQorCQkJMHg1MjIzYTcwOCwgMHhmNzEzMTJiNiwgMHhl YmFkZmU2ZSwgMHhlYWMzMWY2NiwNCisJCQkweGUzYmM0NTk1LCAweGE2N2Jj ODgzLCAweGIxN2YzN2QxLCAweDAxOGNmZjI4LA0KKwkJCTB4YzMzMmRkZWYs IDB4YmU2YzVhYTUsIDB4NjU1ODIxODUsIDB4NjhhYjk4MDIsDQorCQkJMHhl ZWNlYTUwZiwgMHhkYjJmOTUzYiwgMHgyYWVmN2RhZCwgMHg1YjZlMmY4NCwN CisJCQkweDE1MjFiNjI4LCAweDI5MDc2MTcwLCAweGVjZGQ0Nzc1LCAweDYx OWYxNTEwLA0KKwkJCTB4MTNjY2E4MzAsIDB4ZWI2MWJkOTYsIDB4MDMzNGZl MWUsIDB4YWEwMzYzY2YsDQorCQkJMHhiNTczNWM5MCwgMHg0YzcwYTIzOSwg MHhkNTllOWUwYiwgMHhjYmFhZGUxNCwNCisJCQkweGVlY2M4NmJjLCAweDYw NjIyY2E3LCAweDljYWI1Y2FiLCAweGIyZjM4NDZlLA0KKwkJCTB4NjQ4YjFl YWYsIDB4MTliZGYwY2EsIDB4YTAyMzY5YjksIDB4NjU1YWJiNTAsDQorCQkJ MHg0MDY4NWEzMiwgMHgzYzJhYjRiMywgMHgzMTllZTlkNSwgMHhjMDIxYjhm NywNCisJCQkweDliNTQwYjE5LCAweDg3NWZhMDk5LCAweDk1Zjc5OTdlLCAw eDYyM2Q3ZGE4LA0KKwkJCTB4ZjgzNzg4OWEsIDB4OTdlMzJkNzcsIDB4MTFl ZDkzNWYsIDB4MTY2ODEyODEsDQorCQkJMHgwZTM1ODgyOSwgMHhjN2U2MWZk NiwgMHg5NmRlZGZhMSwgMHg3ODU4YmE5OSwNCisJCQkweDU3ZjU4NGE1LCAw eDFiMjI3MjYzLCAweDliODNjM2ZmLCAweDFhYzI0Njk2LA0KKwkJCTB4Y2Ri MzBhZWIsIDB4NTMyZTMwNTQsIDB4OGZkOTQ4ZTQsIDB4NmRiYzMxMjgsDQor CQkJMHg1OGViZjJlZiwgMHgzNGM2ZmZlYSwgMHhmZTI4ZWQ2MSwgMHhlZTdj M2M3MywNCisJCQkweDVkNGExNGQ5LCAweGU4NjRiN2UzLCAweDQyMTA1ZDE0 LCAweDIwM2UxM2UwLA0KKwkJCTB4NDVlZWUyYjYsIDB4YTNhYWFiZWEsIDB4 ZGI2YzRmMTUsIDB4ZmFjYjRmZDAsDQorCQkJMHhjNzQyZjQ0MiwgMHhlZjZh YmJiNSwgMHg2NTRmM2IxZCwgMHg0MWNkMjEwNSwNCisJCQkweGQ4MWU3OTll LCAweDg2ODU0ZGM3LCAweGU0NGI0NzZhLCAweDNkODE2MjUwLA0KKwkJCTB4 Y2Y2MmExZjIsIDB4NWI4ZDI2NDYsIDB4ZmM4ODgzYTAsIDB4YzFjN2I2YTMs DQorCQkJMHg3ZjE1MjRjMywgMHg2OWNiNzQ5MiwgMHg0Nzg0OGEwYiwgMHg1 NjkyYjI4NSwNCisJCQkweDA5NWJiZjAwLCAweGFkMTk0ODlkLCAweDE0NjJi MTc0LCAweDIzODIwZTAwLA0KKwkJCTB4NTg0MjhkMmEsIDB4MGM1NWY1ZWEs IDB4MWRhZGY0M2UsIDB4MjMzZjcwNjEsDQorCQkJMHgzMzcyZjA5MiwgMHg4 ZDkzN2U0MSwgMHhkNjVmZWNmMSwgMHg2YzIyM2JkYiwNCisJCQkweDdjZGUz NzU5LCAweGNiZWU3NDYwLCAweDQwODVmMmE3LCAweGNlNzczMjZlLA0KKwkJ CTB4YTYwNzgwODQsIDB4MTlmODUwOWUsIDB4ZThlZmQ4NTUsIDB4NjFkOTk3 MzUsDQorCQkJMHhhOTY5YTdhYSwgMHhjNTBjMDZjMiwgMHg1YTA0YWJmYywg MHg4MDBiY2FkYywNCisJCQkweDllNDQ3YTJlLCAweGMzNDUzNDg0LCAweGZk ZDU2NzA1LCAweDBlMWU5ZWM5LA0KKwkJCTB4ZGI3M2RiZDMsIDB4MTA1NTg4 Y2QsIDB4Njc1ZmRhNzksIDB4ZTM2NzQzNDAsDQorCQkJMHhjNWM0MzQ2NSwg MHg3MTNlMzhkOCwgMHgzZDI4Zjg5ZSwgMHhmMTZkZmYyMCwNCisJCQkweDE1 M2UyMWU3LCAweDhmYjAzZDRhLCAweGU2ZTM5ZjJiLCAweGRiODNhZGY3DQor CQl9LCB7DQorCQkJMHhlOTNkNWE2OCwgMHg5NDgxNDBmNywgMHhmNjRjMjYx YywgMHg5NDY5MjkzNCwNCisJCQkweDQxMTUyMGY3LCAweDc2MDJkNGY3LCAw eGJjZjQ2YjJlLCAweGQ0YTIwMDY4LA0KKwkJCTB4ZDQwODI0NzEsIDB4MzMy MGY0NmEsIDB4NDNiN2Q0YjcsIDB4NTAwMDYxYWYsDQorCQkJMHgxZTM5ZjYy ZSwgMHg5NzI0NDU0NiwgMHgxNDIxNGY3NCwgMHhiZjhiODg0MCwNCisJCQkw eDRkOTVmYzFkLCAweDk2YjU5MWFmLCAweDcwZjRkZGQzLCAweDY2YTAyZjQ1 LA0KKwkJCTB4YmZiYzA5ZWMsIDB4MDNiZDk3ODUsIDB4N2ZhYzZkZDAsIDB4 MzFjYjg1MDQsDQorCQkJMHg5NmViMjdiMywgMHg1NWZkMzk0MSwgMHhkYTI1 NDdlNiwgMHhhYmNhMGE5YSwNCisJCQkweDI4NTA3ODI1LCAweDUzMDQyOWY0 LCAweDBhMmM4NmRhLCAweGU5YjY2ZGZiLA0KKwkJCTB4NjhkYzE0NjIsIDB4 ZDc0ODY5MDAsIDB4NjgwZWMwYTQsIDB4MjdhMThkZWUsDQorCQkJMHg0ZjNm ZmVhMiwgMHhlODg3YWQ4YywgMHhiNThjZTAwNiwgMHg3YWY0ZDZiNiwNCisJ CQkweGFhY2UxZTdjLCAweGQzMzc1ZmVjLCAweGNlNzhhMzk5LCAweDQwNmIy YTQyLA0KKwkJCTB4MjBmZTllMzUsIDB4ZDlmMzg1YjksIDB4ZWUzOWQ3YWIs IDB4M2IxMjRlOGIsDQorCQkJMHgxZGM5ZmFmNywgMHg0YjZkMTg1NiwgMHgy NmEzNjYzMSwgMHhlYWUzOTdiMiwNCisJCQkweDNhNmVmYTc0LCAweGRkNWI0 MzMyLCAweDY4NDFlN2Y3LCAweGNhNzgyMGZiLA0KKwkJCTB4ZmIwYWY1NGUs IDB4ZDhmZWIzOTcsIDB4NDU0MDU2YWMsIDB4YmE0ODk1MjcsDQorCQkJMHg1 NTUzM2EzYSwgMHgyMDgzOGQ4NywgMHhmZTZiYTliNywgMHhkMDk2OTU0YiwN CisJCQkweDU1YTg2N2JjLCAweGExMTU5YTU4LCAweGNjYTkyOTYzLCAweDk5 ZTFkYjMzLA0KKwkJCTB4YTYyYTRhNTYsIDB4M2YzMTI1ZjksIDB4NWVmNDdl MWMsIDB4OTAyOTMxN2MsDQorCQkJMHhmZGY4ZTgwMiwgMHgwNDI3MmY3MCwg MHg4MGJiMTU1YywgMHgwNTI4MmNlMywNCisJCQkweDk1YzExNTQ4LCAweGU0 YzY2ZDIyLCAweDQ4YzExMzNmLCAweGM3MGY4NmRjLA0KKwkJCTB4MDdmOWM5 ZWUsIDB4NDEwNDFmMGYsIDB4NDA0Nzc5YTQsIDB4NWQ4ODZlMTcsDQorCQkJ MHgzMjVmNTFlYiwgMHhkNTliYzBkMSwgMHhmMmJjYzE4ZiwgMHg0MTExMzU2 NCwNCisJCQkweDI1N2I3ODM0LCAweDYwMmE5YzYwLCAweGRmZjhlOGEzLCAw eDFmNjM2YzFiLA0KKwkJCTB4MGUxMmI0YzIsIDB4MDJlMTMyOWUsIDB4YWY2 NjRmZDEsIDB4Y2FkMTgxMTUsDQorCQkJMHg2YjIzOTVlMCwgMHgzMzNlOTJl MSwgMHgzYjI0MGI2MiwgMHhlZWJlYjkyMiwNCisJCQkweDg1YjJhMjBlLCAw eGU2YmEwZDk5LCAweGRlNzIwYzhjLCAweDJkYTJmNzI4LA0KKwkJCTB4ZDAx Mjc4NDUsIDB4OTViNzk0ZmQsIDB4NjQ3ZDA4NjIsIDB4ZTdjY2Y1ZjAsDQor CQkJMHg1NDQ5YTM2ZiwgMHg4NzdkNDhmYSwgMHhjMzlkZmQyNywgMHhmMzNl OGQxZSwNCisJCQkweDBhNDc2MzQxLCAweDk5MmVmZjc0LCAweDNhNmY2ZWFi LCAweGY0ZjhmZDM3LA0KKwkJCTB4YTgxMmRjNjAsIDB4YTFlYmRkZjgsIDB4 OTkxYmUxNGMsIDB4ZGI2ZTZiMGQsDQorCQkJMHhjNjdiNTUxMCwgMHg2ZDY3 MmMzNywgMHgyNzY1ZDQzYiwgMHhkY2QwZTgwNCwNCisJCQkweGYxMjkwZGM3 LCAweGNjMDBmZmEzLCAweGI1MzkwZjkyLCAweDY5MGZlZDBiLA0KKwkJCTB4 NjY3YjlmZmIsIDB4Y2VkYjdkOWMsIDB4YTA5MWNmMGIsIDB4ZDkxNTVlYTMs DQorCQkJMHhiYjEzMmY4OCwgMHg1MTViYWQyNCwgMHg3Yjk0NzliZiwgMHg3 NjNiZDZlYiwNCisJCQkweDM3MzkyZWIzLCAweGNjMTE1OTc5LCAweDgwMjZl Mjk3LCAweGY0MmUzMTJkLA0KKwkJCTB4Njg0MmFkYTcsIDB4YzY2YTJiM2Is IDB4MTI3NTRjY2MsIDB4NzgyZWYxMWMsDQorCQkJMHg2YTEyNDIzNywgMHhi NzkyNTFlNywgMHgwNmExYmJlNiwgMHg0YmZiNjM1MCwNCisJCQkweDFhNmIx MDE4LCAweDExY2FlZGZhLCAweDNkMjViZGQ4LCAweGUyZTFjM2M5LA0KKwkJ CTB4NDQ0MjE2NTksIDB4MGExMjEzODYsIDB4ZDkwY2VjNmUsIDB4ZDVhYmVh MmEsDQorCQkJMHg2NGFmNjc0ZSwgMHhkYTg2YTg1ZiwgMHhiZWJmZTk4OCwg MHg2NGU0YzNmZSwNCisJCQkweDlkYmM4MDU3LCAweGYwZjdjMDg2LCAweDYw Nzg3YmY4LCAweDYwMDM2MDRkLA0KKwkJCTB4ZDFmZDgzNDYsIDB4ZjYzODFm YjAsIDB4Nzc0NWFlMDQsIDB4ZDczNmZjY2MsDQorCQkJMHg4MzQyNmIzMywg MHhmMDFlYWI3MSwgMHhiMDgwNDE4NywgMHgzYzAwNWU1ZiwNCisJCQkweDc3 YTA1N2JlLCAweGJkZThhZTI0LCAweDU1NDY0Mjk5LCAweGJmNTgyZTYxLA0K KwkJCTB4NGU1OGY0OGYsIDB4ZjJkZGZkYTIsIDB4ZjQ3NGVmMzgsIDB4ODc4 OWJkYzIsDQorCQkJMHg1MzY2ZjljMywgMHhjOGIzOGU3NCwgMHhiNDc1ZjI1 NSwgMHg0NmZjZDliOSwNCisJCQkweDdhZWIyNjYxLCAweDhiMWRkZjg0LCAw eDg0NmEwZTc5LCAweDkxNWY5NWUyLA0KKwkJCTB4NDY2ZTU5OGUsIDB4MjBi NDU3NzAsIDB4OGNkNTU1OTEsIDB4YzkwMmRlNGMsDQorCQkJMHhiOTBiYWNl MSwgMHhiYjgyMDVkMCwgMHgxMWE4NjI0OCwgMHg3NTc0YTk5ZSwNCisJCQkw eGI3N2YxOWI2LCAweGUwYTlkYzA5LCAweDY2MmQwOWExLCAweGM0MzI0NjMz LA0KKwkJCTB4ZTg1YTFmMDIsIDB4MDlmMGJlOGMsIDB4NGE5OWEwMjUsIDB4 MWQ2ZWZlMTAsDQorCQkJMHgxYWI5M2QxZCwgMHgwYmE1YTRkZiwgMHhhMTg2 ZjIwZiwgMHgyODY4ZjE2OSwNCisJCQkweGRjYjdkYTgzLCAweDU3MzkwNmZl LCAweGExZTJjZTliLCAweDRmY2Q3ZjUyLA0KKwkJCTB4NTAxMTVlMDEsIDB4 YTcwNjgzZmEsIDB4YTAwMmI1YzQsIDB4MGRlNmQwMjcsDQorCQkJMHg5YWY4 OGMyNywgMHg3NzNmODY0MSwgMHhjMzYwNGMwNiwgMHg2MWE4MDZiNSwNCisJ CQkweGYwMTc3YTI4LCAweGMwZjU4NmUwLCAweDAwNjA1OGFhLCAweDMwZGM3 ZDYyLA0KKwkJCTB4MTFlNjllZDcsIDB4MjMzOGVhNjMsIDB4NTNjMmRkOTQs IDB4YzJjMjE2MzQsDQorCQkJMHhiYmNiZWU1NiwgMHg5MGJjYjZkZSwgMHhl YmZjN2RhMSwgMHhjZTU5MWQ3NiwNCisJCQkweDZmMDVlNDA5LCAweDRiN2Mw MTg4LCAweDM5NzIwYTNkLCAweDdjOTI3YzI0LA0KKwkJCTB4ODZlMzcyNWYs IDB4NzI0ZDlkYjksIDB4MWFjMTViYjQsIDB4ZDM5ZWI4ZmMsDQorCQkJMHhl ZDU0NTU3OCwgMHgwOGZjYTViNSwgMHhkODNkN2NkMywgMHg0ZGFkMGZjNCwN CisJCQkweDFlNTBlZjVlLCAweGIxNjFlNmY4LCAweGEyODUxNGQ5LCAweDZj NTExMzNjLA0KKwkJCTB4NmZkNWM3ZTcsIDB4NTZlMTRlYzQsIDB4MzYyYWJm Y2UsIDB4ZGRjNmM4MzcsDQorCQkJMHhkNzlhMzIzNCwgMHg5MjYzODIxMiwg MHg2NzBlZmE4ZSwgMHg0MDYwMDBlMA0KKwkJfSwgew0KKwkJCTB4M2EzOWNl MzcsIDB4ZDNmYWY1Y2YsIDB4YWJjMjc3MzcsIDB4NWFjNTJkMWIsDQorCQkJ MHg1Y2IwNjc5ZSwgMHg0ZmEzMzc0MiwgMHhkMzgyMjc0MCwgMHg5OWJjOWJi ZSwNCisJCQkweGQ1MTE4ZTlkLCAweGJmMGY3MzE1LCAweGQ2MmQxYzdlLCAw eGM3MDBjNDdiLA0KKwkJCTB4Yjc4YzFiNmIsIDB4MjFhMTkwNDUsIDB4YjI2 ZWIxYmUsIDB4NmEzNjZlYjQsDQorCQkJMHg1NzQ4YWIyZiwgMHhiYzk0NmU3 OSwgMHhjNmEzNzZkMiwgMHg2NTQ5YzJjOCwNCisJCQkweDUzMGZmOGVlLCAw eDQ2OGRkZTdkLCAweGQ1NzMwYTFkLCAweDRjZDA0ZGM2LA0KKwkJCTB4Mjkz OWJiZGIsIDB4YTliYTQ2NTAsIDB4YWM5NTI2ZTgsIDB4YmU1ZWUzMDQsDQor CQkJMHhhMWZhZDVmMCwgMHg2YTJkNTE5YSwgMHg2M2VmOGNlMiwgMHg5YTg2 ZWUyMiwNCisJCQkweGMwODljMmI4LCAweDQzMjQyZWY2LCAweGE1MWUwM2Fh LCAweDljZjJkMGE0LA0KKwkJCTB4ODNjMDYxYmEsIDB4OWJlOTZhNGQsIDB4 OGZlNTE1NTAsIDB4YmE2NDViZDYsDQorCQkJMHgyODI2YTJmOSwgMHhhNzNh M2FlMSwgMHg0YmE5OTU4NiwgMHhlZjU1NjJlOSwNCisJCQkweGM3MmZlZmQz LCAweGY3NTJmN2RhLCAweDNmMDQ2ZjY5LCAweDc3ZmEwYTU5LA0KKwkJCTB4 ODBlNGE5MTUsIDB4ODdiMDg2MDEsIDB4OWIwOWU2YWQsIDB4M2IzZWU1OTMs DQorCQkJMHhlOTkwZmQ1YSwgMHg5ZTM0ZDc5NywgMHgyY2YwYjdkOSwgMHgw MjJiOGI1MSwNCisJCQkweDk2ZDVhYzNhLCAweDAxN2RhNjdkLCAweGQxY2Yz ZWQ2LCAweDdjN2QyZDI4LA0KKwkJCTB4MWY5ZjI1Y2YsIDB4YWRmMmI4OWIs IDB4NWFkNmI0NzIsIDB4NWE4OGY1NGMsDQorCQkJMHhlMDI5YWM3MSwgMHhl MDE5YTVlNiwgMHg0N2IwYWNmZCwgMHhlZDkzZmE5YiwNCisJCQkweGU4ZDNj NDhkLCAweDI4M2I1N2NjLCAweGY4ZDU2NjI5LCAweDc5MTMyZTI4LA0KKwkJ CTB4Nzg1ZjAxOTEsIDB4ZWQ3NTYwNTUsIDB4Zjc5NjBlNDQsIDB4ZTNkMzVl OGMsDQorCQkJMHgxNTA1NmRkNCwgMHg4OGY0NmRiYSwgMHgwM2ExNjEyNSwg MHgwNTY0ZjBiZCwNCisJCQkweGMzZWI5ZTE1LCAweDNjOTA1N2EyLCAweDk3 MjcxYWVjLCAweGE5M2EwNzJhLA0KKwkJCTB4MWIzZjZkOWIsIDB4MWU2MzIx ZjUsIDB4ZjU5YzY2ZmIsIDB4MjZkY2YzMTksDQorCQkJMHg3NTMzZDkyOCwg MHhiMTU1ZmRmNSwgMHgwMzU2MzQ4MiwgMHg4YWJhM2NiYiwNCisJCQkweDI4 NTE3NzExLCAweGMyMGFkOWY4LCAweGFiY2M1MTY3LCAweGNjYWQ5MjVmLA0K KwkJCTB4NGRlODE3NTEsIDB4MzgzMGRjOGUsIDB4Mzc5ZDU4NjIsIDB4OTMy MGY5OTEsDQorCQkJMHhlYTdhOTBjMiwgMHhmYjNlN2JjZSwgMHg1MTIxY2U2 NCwgMHg3NzRmYmUzMiwNCisJCQkweGE4YjZlMzdlLCAweGMzMjkzZDQ2LCAw eDQ4ZGU1MzY5LCAweDY0MTNlNjgwLA0KKwkJCTB4YTJhZTA4MTAsIDB4ZGQ2 ZGIyMjQsIDB4Njk4NTJkZmQsIDB4MDkwNzIxNjYsDQorCQkJMHhiMzlhNDYw YSwgMHg2NDQ1YzBkZCwgMHg1ODZjZGVjZiwgMHgxYzIwYzhhZSwNCisJCQkw eDViYmVmN2RkLCAweDFiNTg4ZDQwLCAweGNjZDIwMTdmLCAweDZiYjRlM2Ji LA0KKwkJCTB4ZGRhMjZhN2UsIDB4M2E1OWZmNDUsIDB4M2UzNTBhNDQsIDB4 YmNiNGNkZDUsDQorCQkJMHg3MmVhY2VhOCwgMHhmYTY0ODRiYiwgMHg4ZDY2 MTJhZSwgMHhiZjNjNmY0NywNCisJCQkweGQyOWJlNDYzLCAweDU0MmY1ZDll LCAweGFlYzI3NzFiLCAweGY2NGU2MzcwLA0KKwkJCTB4NzQwZTBkOGQsIDB4 ZTc1YjEzNTcsIDB4Zjg3MjE2NzEsIDB4YWY1MzdkNWQsDQorCQkJMHg0MDQw Y2IwOCwgMHg0ZWI0ZTJjYywgMHgzNGQyNDY2YSwgMHgwMTE1YWY4NCwNCisJ CQkweGUxYjAwNDI4LCAweDk1OTgzYTFkLCAweDA2Yjg5ZmI0LCAweGNlNmVh MDQ4LA0KKwkJCTB4NmYzZjNiODIsIDB4MzUyMGFiODIsIDB4MDExYTFkNGIs IDB4Mjc3MjI3ZjgsDQorCQkJMHg2MTE1NjBiMSwgMHhlNzkzM2ZkYywgMHhi YjNhNzkyYiwgMHgzNDQ1MjViZCwNCisJCQkweGEwODgzOWUxLCAweDUxY2U3 OTRiLCAweDJmMzJjOWI3LCAweGEwMWZiYWM5LA0KKwkJCTB4ZTAxY2M4N2Us IDB4YmNjN2QxZjYsIDB4Y2YwMTExYzMsIDB4YTFlOGFhYzcsDQorCQkJMHgx YTkwODc0OSwgMHhkNDRmYmQ5YSwgMHhkMGRhZGVjYiwgMHhkNTBhZGEzOCwN CisJCQkweDAzMzljMzJhLCAweGM2OTEzNjY3LCAweDhkZjkzMTdjLCAweGUw YjEyYjRmLA0KKwkJCTB4Zjc5ZTU5YjcsIDB4NDNmNWJiM2EsIDB4ZjJkNTE5 ZmYsIDB4MjdkOTQ1OWMsDQorCQkJMHhiZjk3MjIyYywgMHgxNWU2ZmMyYSwg MHgwZjkxZmM3MSwgMHg5Yjk0MTUyNSwNCisJCQkweGZhZTU5MzYxLCAweGNl YjY5Y2ViLCAweGMyYTg2NDU5LCAweDEyYmFhOGQxLA0KKwkJCTB4YjZjMTA3 NWUsIDB4ZTMwNTZhMGMsIDB4MTBkMjUwNjUsIDB4Y2IwM2E0NDIsDQorCQkJ MHhlMGVjNmUwZSwgMHgxNjk4ZGIzYiwgMHg0Yzk4YTBiZSwgMHgzMjc4ZTk2 NCwNCisJCQkweDlmMWY5NTMyLCAweGUwZDM5MmRmLCAweGQzYTAzNDJiLCAw eDg5NzFmMjFlLA0KKwkJCTB4MWIwYTc0NDEsIDB4NGJhMzM0OGMsIDB4YzVi ZTcxMjAsIDB4YzM3NjMyZDgsDQorCQkJMHhkZjM1OWY4ZCwgMHg5Yjk5MmYy ZSwgMHhlNjBiNmY0NywgMHgwZmUzZjExZCwNCisJCQkweGU1NGNkYTU0LCAw eDFlZGFkODkxLCAweGNlNjI3OWNmLCAweGNkM2U3ZTZmLA0KKwkJCTB4MTYx OGIxNjYsIDB4ZmQyYzFkMDUsIDB4ODQ4ZmQyYzUsIDB4ZjZmYjIyOTksDQor CQkJMHhmNTIzZjM1NywgMHhhNjMyNzYyMywgMHg5M2E4MzUzMSwgMHg1NmNj Y2QwMiwNCisJCQkweGFjZjA4MTYyLCAweDVhNzVlYmI1LCAweDZlMTYzNjk3 LCAweDg4ZDI3M2NjLA0KKwkJCTB4ZGU5NjYyOTIsIDB4ODFiOTQ5ZDAsIDB4 NGM1MDkwMWIsIDB4NzFjNjU2MTQsDQorCQkJMHhlNmM2YzdiZCwgMHgzMjdh MTQwYSwgMHg0NWUxZDAwNiwgMHhjM2YyN2I5YSwNCisJCQkweGM5YWE1M2Zk LCAweDYyYTgwZjAwLCAweGJiMjViZmUyLCAweDM1YmRkMmY2LA0KKwkJCTB4 NzExMjY5MDUsIDB4YjIwNDAyMjIsIDB4YjZjYmNmN2MsIDB4Y2Q3NjljMmIs DQorCQkJMHg1MzExM2VjMCwgMHgxNjQwZTNkMywgMHgzOGFiYmQ2MCwgMHgy NTQ3YWRmMCwNCisJCQkweGJhMzgyMDljLCAweGY3NDZjZTc2LCAweDc3YWZh MWM1LCAweDIwNzU2MDYwLA0KKwkJCTB4ODVjYmZlNGUsIDB4OGFlODhkZDgs IDB4N2FhYWY5YjAsIDB4NGNmOWFhN2UsDQorCQkJMHgxOTQ4YzI1YywgMHgw MmZiOGE4YywgMHgwMWMzNmFlNCwgMHhkNmViZTFmOSwNCisJCQkweDkwZDRm ODY5LCAweGE2NWNkZWEwLCAweDNmMDkyNTJkLCAweGMyMDhlNjlmLA0KKwkJ CTB4Yjc0ZTYxMzIsIDB4Y2U3N2UyNWIsIDB4NTc4ZmRmZTMsIDB4M2FjMzcy ZTYNCisJCX0NCisJfSwgew0KKwkJMHgyNDNmNmE4OCwgMHg4NWEzMDhkMywg MHgxMzE5OGEyZSwgMHgwMzcwNzM0NCwNCisJCTB4YTQwOTM4MjIsIDB4Mjk5 ZjMxZDAsIDB4MDgyZWZhOTgsIDB4ZWM0ZTZjODksDQorCQkweDQ1MjgyMWU2 LCAweDM4ZDAxMzc3LCAweGJlNTQ2NmNmLCAweDM0ZTkwYzZjLA0KKwkJMHhj MGFjMjliNywgMHhjOTdjNTBkZCwgMHgzZjg0ZDViNSwgMHhiNTQ3MDkxNywN CisJCTB4OTIxNmQ1ZDksIDB4ODk3OWZiMWINCisJfQ0KK307DQorDQorc3Rh dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgQkZfaXRvYTY0WzY0ICsgMV0gPQ0K KwkiLi9BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1u b3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSI7DQorDQorc3RhdGljIGNvbnN0IHVu c2lnbmVkIGNoYXIgQkZfYXRvaTY0WzB4NjBdID0gew0KKwk2NCwgNjQsIDY0 LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LCA2NCwgNjQs IDAsIDEsDQorCTU0LCA1NSwgNTYsIDU3LCA1OCwgNTksIDYwLCA2MSwgNjIs IDYzLCA2NCwgNjQsIDY0LCA2NCwgNjQsIDY0LA0KKwk2NCwgMiwgMywgNCwg NSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsDQor CTE3LCAxOCwgMTksIDIwLCAyMSwgMjIsIDIzLCAyNCwgMjUsIDI2LCAyNywg NjQsIDY0LCA2NCwgNjQsIDY0LA0KKwk2NCwgMjgsIDI5LCAzMCwgMzEsIDMy LCAzMywgMzQsIDM1LCAzNiwgMzcsIDM4LCAzOSwgNDAsIDQxLCA0MiwNCisJ NDMsIDQ0LCA0NSwgNDYsIDQ3LCA0OCwgNDksIDUwLCA1MSwgNTIsIDUzLCA2 NCwgNjQsIDY0LCA2NCwgNjQNCit9Ow0KKw0KKyNkZWZpbmUgQkZfc2FmZV9h dG9pNjQoZHN0LCBzcmMpIFwNCit7IFwNCisJdG1wID0gKHVuc2lnbmVkIGNo YXIpKHNyYyk7IFwNCisJaWYgKCh1bnNpZ25lZCBpbnQpKHRtcCAtPSAweDIw KSA+PSAweDYwKSByZXR1cm4gLTE7IFwNCisJdG1wID0gQkZfYXRvaTY0W3Rt cF07IFwNCisJaWYgKHRtcCA+IDYzKSByZXR1cm4gLTE7IFwNCisJKGRzdCkg PSB0bXA7IFwNCit9DQorDQorc3RhdGljIGludCBCRl9kZWNvZGUoQkZfd29y ZCAqZHN0LCBjb25zdCBjaGFyICpzcmMsIGludCBzaXplKQ0KK3sNCisJdW5z aWduZWQgY2hhciAqZHB0ciA9ICh1bnNpZ25lZCBjaGFyICopZHN0Ow0KKwl1 bnNpZ25lZCBjaGFyICplbmQgPSBkcHRyICsgc2l6ZTsNCisJY29uc3QgdW5z aWduZWQgY2hhciAqc3B0ciA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopc3Jj Ow0KKwl1bnNpZ25lZCBpbnQgdG1wLCBjMSwgYzIsIGMzLCBjNDsNCisNCisJ ZG8gew0KKwkJQkZfc2FmZV9hdG9pNjQoYzEsICpzcHRyKyspOw0KKwkJQkZf c2FmZV9hdG9pNjQoYzIsICpzcHRyKyspOw0KKwkJKmRwdHIrKyA9IChjMSA8 PCAyKSB8ICgoYzIgJiAweDMwKSA+PiA0KTsNCisJCWlmIChkcHRyID49IGVu ZCkgYnJlYWs7DQorDQorCQlCRl9zYWZlX2F0b2k2NChjMywgKnNwdHIrKyk7 DQorCQkqZHB0cisrID0gKChjMiAmIDB4MEYpIDw8IDQpIHwgKChjMyAmIDB4 M0MpID4+IDIpOw0KKwkJaWYgKGRwdHIgPj0gZW5kKSBicmVhazsNCisNCisJ CUJGX3NhZmVfYXRvaTY0KGM0LCAqc3B0cisrKTsNCisJCSpkcHRyKysgPSAo KGMzICYgMHgwMykgPDwgNikgfCBjNDsNCisJfSB3aGlsZSAoZHB0ciA8IGVu ZCk7DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgdm9pZCBCRl9l bmNvZGUoY2hhciAqZHN0LCBjb25zdCBCRl93b3JkICpzcmMsIGludCBzaXpl KQ0KK3sNCisJY29uc3QgdW5zaWduZWQgY2hhciAqc3B0ciA9IChjb25zdCB1 bnNpZ25lZCBjaGFyICopc3JjOw0KKwljb25zdCB1bnNpZ25lZCBjaGFyICpl bmQgPSBzcHRyICsgc2l6ZTsNCisJdW5zaWduZWQgY2hhciAqZHB0ciA9ICh1 bnNpZ25lZCBjaGFyICopZHN0Ow0KKwl1bnNpZ25lZCBpbnQgYzEsIGMyOw0K Kw0KKwlkbyB7DQorCQljMSA9ICpzcHRyKys7DQorCQkqZHB0cisrID0gQkZf aXRvYTY0W2MxID4+IDJdOw0KKwkJYzEgPSAoYzEgJiAweDAzKSA8PCA0Ow0K KwkJaWYgKHNwdHIgPj0gZW5kKSB7DQorCQkJKmRwdHIrKyA9IEJGX2l0b2E2 NFtjMV07DQorCQkJYnJlYWs7DQorCQl9DQorDQorCQljMiA9ICpzcHRyKys7 DQorCQljMSB8PSBjMiA+PiA0Ow0KKwkJKmRwdHIrKyA9IEJGX2l0b2E2NFtj MV07DQorCQljMSA9IChjMiAmIDB4MGYpIDw8IDI7DQorCQlpZiAoc3B0ciA+ PSBlbmQpIHsNCisJCQkqZHB0cisrID0gQkZfaXRvYTY0W2MxXTsNCisJCQli cmVhazsNCisJCX0NCisNCisJCWMyID0gKnNwdHIrKzsNCisJCWMxIHw9IGMy ID4+IDY7DQorCQkqZHB0cisrID0gQkZfaXRvYTY0W2MxXTsNCisJCSpkcHRy KysgPSBCRl9pdG9hNjRbYzIgJiAweDNmXTsNCisJfSB3aGlsZSAoc3B0ciA8 IGVuZCk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIEJGX3N3YXAoQkZfd29yZCAq eCwgaW50IGNvdW50KQ0KK3sNCisJc3RhdGljIGludCBlbmRpYW5uZXNzX2No ZWNrID0gMTsNCisJY2hhciAqaXNfbGl0dGxlX2VuZGlhbiA9IChjaGFyICop JmVuZGlhbm5lc3NfY2hlY2s7DQorCUJGX3dvcmQgdG1wOw0KKw0KKwlpZiAo KmlzX2xpdHRsZV9lbmRpYW4pDQorCWRvIHsNCisJCXRtcCA9ICp4Ow0KKwkJ dG1wID0gKHRtcCA8PCAxNikgfCAodG1wID4+IDE2KTsNCisJCSp4KysgPSAo KHRtcCAmIDB4MDBGRjAwRkYpIDw8IDgpIHwgKCh0bXAgPj4gOCkgJiAweDAw RkYwMEZGKTsNCisJfSB3aGlsZSAoLS1jb3VudCk7DQorfQ0KKw0KKyNpZiBC Rl9TQ0FMRQ0KKy8qIEFyY2hpdGVjdHVyZXMgd2hpY2ggY2FuIHNoaWZ0IGFk ZHJlc3NlcyBsZWZ0IGJ5IDIgYml0cyB3aXRoIG5vIGV4dHJhIGNvc3QgKi8N CisjZGVmaW5lIEJGX1JPVU5EKEwsIFIsIE4pIFwNCisJdG1wMSA9IEwgJiAw eEZGOyBcDQorCXRtcDIgPSBMID4+IDg7IFwNCisJdG1wMiAmPSAweEZGOyBc DQorCXRtcDMgPSBMID4+IDE2OyBcDQorCXRtcDMgJj0gMHhGRjsgXA0KKwl0 bXA0ID0gTCA+PiAyNDsgXA0KKwl0bXAxID0gZGF0YS5jdHguU1szXVt0bXAx XTsgXA0KKwl0bXAyID0gZGF0YS5jdHguU1syXVt0bXAyXTsgXA0KKwl0bXAz ID0gZGF0YS5jdHguU1sxXVt0bXAzXTsgXA0KKwl0bXAzICs9IGRhdGEuY3R4 LlNbMF1bdG1wNF07IFwNCisJdG1wMyBePSB0bXAyOyBcDQorCVIgXj0gZGF0 YS5jdHguUFtOICsgMV07IFwNCisJdG1wMyArPSB0bXAxOyBcDQorCVIgXj0g dG1wMzsNCisjZWxzZQ0KKy8qIEFyY2hpdGVjdHVyZXMgd2l0aCBubyBjb21w bGljYXRlZCBhZGRyZXNzaW5nIG1vZGVzIHN1cHBvcnRlZCAqLw0KKyNkZWZp bmUgQkZfSU5ERVgoUywgaSkgXA0KKwkoKigoQkZfd29yZCAqKSgoKHVuc2ln bmVkIGNoYXIgKilTKSArIChpKSkpKQ0KKyNkZWZpbmUgQkZfUk9VTkQoTCwg UiwgTikgXA0KKwl0bXAxID0gTCAmIDB4RkY7IFwNCisJdG1wMSA8PD0gMjsg XA0KKwl0bXAyID0gTCA+PiA2OyBcDQorCXRtcDIgJj0gMHgzRkM7IFwNCisJ dG1wMyA9IEwgPj4gMTQ7IFwNCisJdG1wMyAmPSAweDNGQzsgXA0KKwl0bXA0 ID0gTCA+PiAyMjsgXA0KKwl0bXA0ICY9IDB4M0ZDOyBcDQorCXRtcDEgPSBC Rl9JTkRFWChkYXRhLmN0eC5TWzNdLCB0bXAxKTsgXA0KKwl0bXAyID0gQkZf SU5ERVgoZGF0YS5jdHguU1syXSwgdG1wMik7IFwNCisJdG1wMyA9IEJGX0lO REVYKGRhdGEuY3R4LlNbMV0sIHRtcDMpOyBcDQorCXRtcDMgKz0gQkZfSU5E RVgoZGF0YS5jdHguU1swXSwgdG1wNCk7IFwNCisJdG1wMyBePSB0bXAyOyBc DQorCVIgXj0gZGF0YS5jdHguUFtOICsgMV07IFwNCisJdG1wMyArPSB0bXAx OyBcDQorCVIgXj0gdG1wMzsNCisjZW5kaWYNCisNCisvKg0KKyAqIEVuY3J5 cHQgb25lIGJsb2NrLCBCRl9OIGlzIGhhcmRjb2RlZCBoZXJlLg0KKyAqLw0K KyNkZWZpbmUgQkZfRU5DUllQVCBcDQorCUwgXj0gZGF0YS5jdHguUFswXTsg XA0KKwlCRl9ST1VORChMLCBSLCAwKTsgXA0KKwlCRl9ST1VORChSLCBMLCAx KTsgXA0KKwlCRl9ST1VORChMLCBSLCAyKTsgXA0KKwlCRl9ST1VORChSLCBM LCAzKTsgXA0KKwlCRl9ST1VORChMLCBSLCA0KTsgXA0KKwlCRl9ST1VORChS LCBMLCA1KTsgXA0KKwlCRl9ST1VORChMLCBSLCA2KTsgXA0KKwlCRl9ST1VO RChSLCBMLCA3KTsgXA0KKwlCRl9ST1VORChMLCBSLCA4KTsgXA0KKwlCRl9S T1VORChSLCBMLCA5KTsgXA0KKwlCRl9ST1VORChMLCBSLCAxMCk7IFwNCisJ QkZfUk9VTkQoUiwgTCwgMTEpOyBcDQorCUJGX1JPVU5EKEwsIFIsIDEyKTsg XA0KKwlCRl9ST1VORChSLCBMLCAxMyk7IFwNCisJQkZfUk9VTkQoTCwgUiwg MTQpOyBcDQorCUJGX1JPVU5EKFIsIEwsIDE1KTsgXA0KKwl0bXA0ID0gUjsg XA0KKwlSID0gTDsgXA0KKwlMID0gdG1wNCBeIGRhdGEuY3R4LlBbQkZfTiAr IDFdOw0KKw0KKyNpZiBCRl9BU00NCisjZGVmaW5lIEJGX2JvZHkoKSBcDQor CV9CRl9ib2R5X3IoJmRhdGEuY3R4KTsNCisjZWxzZQ0KKyNkZWZpbmUgQkZf Ym9keSgpIFwNCisJTCA9IFIgPSAwOyBcDQorCXB0ciA9IGRhdGEuY3R4LlA7 IFwNCisJZG8geyBcDQorCQlwdHIgKz0gMjsgXA0KKwkJQkZfRU5DUllQVDsg XA0KKwkJKihwdHIgLSAyKSA9IEw7IFwNCisJCSoocHRyIC0gMSkgPSBSOyBc DQorCX0gd2hpbGUgKHB0ciA8ICZkYXRhLmN0eC5QW0JGX04gKyAyXSk7IFwN CitcDQorCXB0ciA9IGRhdGEuY3R4LlNbMF07IFwNCisJZG8geyBcDQorCQlw dHIgKz0gMjsgXA0KKwkJQkZfRU5DUllQVDsgXA0KKwkJKihwdHIgLSAyKSA9 IEw7IFwNCisJCSoocHRyIC0gMSkgPSBSOyBcDQorCX0gd2hpbGUgKHB0ciA8 ICZkYXRhLmN0eC5TWzNdWzB4RkZdKTsNCisjZW5kaWYNCisNCitzdGF0aWMg dm9pZCBCRl9zZXRfa2V5KGNvbnN0IGNoYXIgKmtleSwgQkZfa2V5IGV4cGFu ZGVkLCBCRl9rZXkgaW5pdGlhbCwNCisgICAgdW5zaWduZWQgY2hhciBmbGFn cykNCit7DQorCWNvbnN0IGNoYXIgKnB0ciA9IGtleTsNCisJdW5zaWduZWQg aW50IGJ1ZywgaSwgajsNCisJQkZfd29yZCBzYWZldHksIHNpZ24sIGRpZmYs IHRtcFsyXTsNCisNCisvKg0KKyAqIFRoZXJlIHdhcyBhIHNpZ24gZXh0ZW5z aW9uIGJ1ZyBpbiBvbGRlciByZXZpc2lvbnMgb2YgdGhpcyBmdW5jdGlvbi4g IFdoaWxlDQorICogd2Ugd291bGQgaGF2ZSBsaWtlZCB0byBzaW1wbHkgZml4 IHRoZSBidWcgYW5kIG1vdmUgb24sIHdlIGhhdmUgdG8gcHJvdmlkZQ0KKyAq IGEgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgZmVhdHVyZSAoZXNzZW50aWFs bHkgdGhlIGJ1ZykgZm9yIHNvbWUgc3lzdGVtcyBhbmQNCisgKiBhIHNhZmV0 eSBtZWFzdXJlIGZvciBzb21lIG90aGVycy4gIFRoZSBsYXR0ZXIgaXMgbmVl ZGVkIGJlY2F1c2UgZm9yIGNlcnRhaW4NCisgKiBtdWx0aXBsZSBpbnB1dHMg dG8gdGhlIGJ1Z2d5IGFsZ29yaXRobSB0aGVyZSBleGlzdCBlYXNpbHkgZm91 bmQgaW5wdXRzIHRvDQorICogdGhlIGNvcnJlY3QgYWxnb3JpdGhtIHRoYXQg cHJvZHVjZSB0aGUgc2FtZSBoYXNoLiAgVGh1cywgd2Ugb3B0aW9uYWxseQ0K KyAqIGRldmlhdGUgZnJvbSB0aGUgY29ycmVjdCBhbGdvcml0aG0ganVzdCBl bm91Z2ggdG8gYXZvaWQgc3VjaCBjb2xsaXNpb25zLg0KKyAqIFdoaWxlIHRo ZSBidWcgaXRzZWxmIGFmZmVjdGVkIHRoZSBtYWpvcml0eSBvZiBwYXNzd29y ZHMgY29udGFpbmluZw0KKyAqIGNoYXJhY3RlcnMgd2l0aCB0aGUgOHRoIGJp dCBzZXQgKGFsdGhvdWdoIG9ubHkgYSBwZXJjZW50YWdlIG9mIHRob3NlIGlu IGENCisgKiBjb2xsaXNpb24tcHJvZHVjaW5nIHdheSksIHRoZSBhbnRpLWNv bGxpc2lvbiBzYWZldHkgbWVhc3VyZSBhZmZlY3RzDQorICogb25seSBhIHN1 YnNldCBvZiBwYXNzd29yZHMgY29udGFpbmluZyB0aGUgJ1x4ZmYnIGNoYXJh Y3RlciAobm90IGV2ZW4gYWxsIG9mDQorICogdGhvc2UgcGFzc3dvcmRzLCBq dXN0IHNvbWUgb2YgdGhlbSkuICBUaGlzIGNoYXJhY3RlciBpcyBub3QgZm91 bmQgaW4gdmFsaWQNCisgKiBVVEYtOCBzZXF1ZW5jZXMgYW5kIGlzIHJhcmVs eSB1c2VkIGluIHBvcHVsYXIgOC1iaXQgY2hhcmFjdGVyIGVuY29kaW5ncy4N CisgKiBUaHVzLCB0aGUgc2FmZXR5IG1lYXN1cmUgaXMgdW5saWtlbHkgdG8g Y2F1c2UgbXVjaCBhbm5veWFuY2UsIGFuZCBpcyBhDQorICogcmVhc29uYWJs ZSB0cmFkZW9mZiB0byB1c2Ugd2hlbiBhdXRoZW50aWNhdGluZyBhZ2FpbnN0 IGV4aXN0aW5nIGhhc2hlcyB0aGF0DQorICogYXJlIG5vdCByZWxpYWJseSBr bm93biB0byBoYXZlIGJlZW4gY29tcHV0ZWQgd2l0aCB0aGUgY29ycmVjdCBh bGdvcml0aG0uDQorICoNCisgKiBXZSB1c2UgYW4gYXBwcm9hY2ggdGhhdCB0 cmllcyB0byBtaW5pbWl6ZSBzaWRlLWNoYW5uZWwgbGVha3Mgb2YgcGFzc3dv cmQNCisgKiBpbmZvcm1hdGlvbiAtIHRoYXQgaXMsIHdlIG1vc3RseSB1c2Ug Zml4ZWQtY29zdCBiaXR3aXNlIG9wZXJhdGlvbnMgaW5zdGVhZA0KKyAqIG9m IGJyYW5jaGVzIG9yIHRhYmxlIGxvb2t1cHMuICAoT25lIGNvbmRpdGlvbmFs IGJyYW5jaCBiYXNlZCBvbiBwYXNzd29yZA0KKyAqIGxlbmd0aCByZW1haW5z LiAgSXQgaXMgbm90IHBhcnQgb2YgdGhlIGJ1ZyBhZnRlcm1hdGgsIHRob3Vn aCwgYW5kIGlzDQorICogZGlmZmljdWx0IGFuZCBwb3NzaWJseSB1bnJlYXNv bmFibGUgdG8gYXZvaWQgZ2l2ZW4gdGhlIHVzZSBvZiBDIHN0cmluZ3MgYnkN CisgKiB0aGUgY2FsbGVyLCB3aGljaCByZXN1bHRzIGluIHNpbWlsYXIgdGlt aW5nIGxlYWtzIGFueXdheS4pDQorICoNCisgKiBGb3IgYWN0dWFsIGltcGxl bWVudGF0aW9uLCB3ZSBzZXQgYW4gYXJyYXkgaW5kZXggaW4gdGhlIHZhcmlh YmxlICJidWciDQorICogKDAgbWVhbnMgbm8gYnVnLCAxIG1lYW5zIHNpZ24g ZXh0ZW5zaW9uIGJ1ZyBlbXVsYXRpb24pIGFuZCBhIGZsYWcgaW4gdGhlDQor ICogdmFyaWFibGUgInNhZmV0eSIgKGJpdCAxNiBpcyBzZXQgd2hlbiB0aGUg c2FmZXR5IG1lYXN1cmUgaXMgcmVxdWVzdGVkKS4NCisgKiBWYWxpZCBjb21i aW5hdGlvbnMgb2Ygc2V0dGluZ3MgYXJlOg0KKyAqDQorICogUHJlZml4ICIk MmEkIjogYnVnID0gMCwgc2FmZXR5ID0gMHgxMDAwMA0KKyAqIFByZWZpeCAi JDJ4JCI6IGJ1ZyA9IDEsIHNhZmV0eSA9IDANCisgKiBQcmVmaXggIiQyeSQi OiBidWcgPSAwLCBzYWZldHkgPSAwDQorICovDQorCWJ1ZyA9ICh1bnNpZ25l ZCBpbnQpZmxhZ3MgJiAxOw0KKwlzYWZldHkgPSAoKEJGX3dvcmQpZmxhZ3Mg JiAyKSA8PCAxNTsNCisNCisJc2lnbiA9IGRpZmYgPSAwOw0KKw0KKwlmb3Ig KGkgPSAwOyBpIDwgQkZfTiArIDI7IGkrKykgew0KKwkJdG1wWzBdID0gdG1w WzFdID0gMDsNCisJCWZvciAoaiA9IDA7IGogPCA0OyBqKyspIHsNCisJCQl0 bXBbMF0gPDw9IDg7DQorCQkJdG1wWzBdIHw9ICh1bnNpZ25lZCBjaGFyKSpw dHI7IC8qIGNvcnJlY3QgKi8NCisJCQl0bXBbMV0gPDw9IDg7DQorCQkJdG1w WzFdIHw9IChCRl93b3JkX3NpZ25lZCkoc2lnbmVkIGNoYXIpKnB0cjsgLyog YnVnICovDQorLyoNCisgKiBTaWduIGV4dGVuc2lvbiBpbiB0aGUgZmlyc3Qg Y2hhciBoYXMgbm8gZWZmZWN0IC0gbm90aGluZyB0byBvdmVyd3JpdGUgeWV0 LA0KKyAqIGFuZCB0aG9zZSBleHRyYSAyNCBiaXRzIHdpbGwgYmUgZnVsbHkg c2hpZnRlZCBvdXQgb2YgdGhlIDMyLWJpdCB3b3JkLiAgRm9yDQorICogY2hh cnMgMiwgMywgNCBpbiBlYWNoIGZvdXItY2hhciBibG9jaywgd2Ugc2V0IGJp dCA3IG9mICJzaWduIiBpZiBzaWduDQorICogZXh0ZW5zaW9uIGluIHRtcFsx XSBvY2N1cnMuICBPbmNlIHRoaXMgZmxhZyBpcyBzZXQsIGl0IHJlbWFpbnMg c2V0Lg0KKyAqLw0KKwkJCWlmIChqKQ0KKwkJCQlzaWduIHw9IHRtcFsxXSAm IDB4ODA7DQorCQkJaWYgKCEqcHRyKQ0KKwkJCQlwdHIgPSBrZXk7DQorCQkJ ZWxzZQ0KKwkJCQlwdHIrKzsNCisJCX0NCisJCWRpZmYgfD0gdG1wWzBdIF4g dG1wWzFdOyAvKiBOb24temVybyBvbiBhbnkgZGlmZmVyZW5jZXMgKi8NCisN CisJCWV4cGFuZGVkW2ldID0gdG1wW2J1Z107DQorCQlpbml0aWFsW2ldID0g QkZfaW5pdF9zdGF0ZS5QW2ldIF4gdG1wW2J1Z107DQorCX0NCisNCisvKg0K KyAqIEF0IHRoaXMgcG9pbnQsICJkaWZmIiBpcyB6ZXJvIGlmZiB0aGUgY29y cmVjdCBhbmQgYnVnZ3kgYWxnb3JpdGhtcyBwcm9kdWNlZA0KKyAqIGV4YWN0 bHkgdGhlIHNhbWUgcmVzdWx0LiAgSWYgc28gYW5kIGlmICJzaWduIiBpcyBu b24temVybywgd2hpY2ggaW5kaWNhdGVzDQorICogdGhhdCB0aGVyZSB3YXMg YSBub24tYmVuaWduIHNpZ24gZXh0ZW5zaW9uLCB0aGlzIG1lYW5zIHRoYXQg d2UgaGF2ZSBhDQorICogY29sbGlzaW9uIGJldHdlZW4gdGhlIGNvcnJlY3Rs eSBjb21wdXRlZCBoYXNoIGZvciB0aGlzIHBhc3N3b3JkIGFuZCBhIHNldCBv Zg0KKyAqIHBhc3N3b3JkcyB0aGF0IGNvdWxkIGJlIHN1cHBsaWVkIHRvIHRo ZSBidWdneSBhbGdvcml0aG0uICBPdXIgc2FmZXR5IG1lYXN1cmUNCisgKiBp cyBtZWFudCB0byBwcm90ZWN0IGZyb20gc3VjaCBtYW55LWJ1Z2d5IHRvIG9u ZS1jb3JyZWN0IGNvbGxpc2lvbnMsIGJ5DQorICogZGV2aWF0aW5nIGZyb20g dGhlIGNvcnJlY3QgYWxnb3JpdGhtIGluIHN1Y2ggY2FzZXMuICBMZXQncyBj aGVjayBmb3IgdGhpcy4NCisgKi8NCisJZGlmZiB8PSBkaWZmID4+IDE2OyAv KiBzdGlsbCB6ZXJvIGlmZiBleGFjdCBtYXRjaCAqLw0KKwlkaWZmICY9IDB4 ZmZmZjsgLyogZGl0dG8gKi8NCisJZGlmZiArPSAweGZmZmY7IC8qIGJpdCAx NiBzZXQgaWZmICJkaWZmIiB3YXMgbm9uLXplcm8gKG9uIG5vbi1tYXRjaCkg Ki8NCisJc2lnbiA8PD0gOTsgLyogbW92ZSB0aGUgbm9uLWJlbmlnbiBzaWdu IGV4dGVuc2lvbiBmbGFnIHRvIGJpdCAxNiAqLw0KKwlzaWduICY9IH5kaWZm ICYgc2FmZXR5OyAvKiBhY3Rpb24gbmVlZGVkPyAqLw0KKw0KKy8qDQorICog SWYgd2UgaGF2ZSBkZXRlcm1pbmVkIHRoYXQgd2UgbmVlZCB0byBkZXZpYXRl IGZyb20gdGhlIGNvcnJlY3QgYWxnb3JpdGhtLA0KKyAqIGZsaXAgYml0IDE2 IGluIGluaXRpYWwgZXhwYW5kZWQga2V5LiAgKFRoZSBjaG9pY2Ugb2YgMTYg aXMgYXJiaXRyYXJ5LCBidXQNCisgKiBsZXQncyBzdGljayB0byBpdCBub3cu ICBJdCBjYW1lIG91dCBvZiB0aGUgYXBwcm9hY2ggd2UgdXNlZCBhYm92ZSwg YW5kIGl0J3MNCisgKiBub3QgYW55IHdvcnNlIHRoYW4gYW55IG90aGVyIGNo b2ljZSB3ZSBjb3VsZCBtYWtlLikNCisgKg0KKyAqIEl0IGlzIGNydWNpYWwg dGhhdCB3ZSBkb24ndCBkbyB0aGUgc2FtZSB0byB0aGUgZXhwYW5kZWQga2V5 IHVzZWQgaW4gdGhlIG1haW4NCisgKiBFa3NibG93ZmlzaCBsb29wLiAgQnkg ZG9pbmcgaXQgdG8gb25seSBvbmUgb2YgdGhlc2UgdHdvLCB3ZSBkZXZpYXRl IGZyb20gYQ0KKyAqIHN0YXRlIHRoYXQgY291bGQgYmUgZGlyZWN0bHkgc3Bl Y2lmaWVkIGJ5IGEgcGFzc3dvcmQgdG8gdGhlIGJ1Z2d5IGFsZ29yaXRobQ0K KyAqIChhbmQgdG8gdGhlIGZ1bGx5IGNvcnJlY3Qgb25lIGFzIHdlbGwsIGJ1 dCB0aGF0J3MgYSBzaWRlLWVmZmVjdCkuDQorICovDQorCWluaXRpYWxbMF0g Xj0gc2lnbjsNCit9DQorDQorc3RhdGljIGNoYXIgKkJGX2NyeXB0KGNvbnN0 IGNoYXIgKmtleSwgY29uc3QgY2hhciAqc2V0dGluZywNCisJY2hhciAqb3V0 cHV0LCBpbnQgc2l6ZSwNCisJQkZfd29yZCBtaW4pDQorew0KKyNpZiBCRl9B U00NCisJZXh0ZXJuIHZvaWQgX0JGX2JvZHlfcihCRl9jdHggKmN0eCk7DQor I2VuZGlmDQorCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGZsYWdzX2J5 X3N1YnR5cGVbMjZdID0NCisJCXsyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw LCAwLCAwLCAwLCAwLA0KKwkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg MCwgMSwgNCwgMH07DQorCXN0cnVjdCB7DQorCQlCRl9jdHggY3R4Ow0KKwkJ QkZfa2V5IGV4cGFuZGVkX2tleTsNCisJCXVuaW9uIHsNCisJCQlCRl93b3Jk IHNhbHRbNF07DQorCQkJQkZfd29yZCBvdXRwdXRbNl07DQorCQl9IGJpbmFy eTsNCisJfSBkYXRhOw0KKwlCRl93b3JkIEwsIFI7DQorCUJGX3dvcmQgdG1w MSwgdG1wMiwgdG1wMywgdG1wNDsNCisJQkZfd29yZCAqcHRyOw0KKwlCRl93 b3JkIGNvdW50Ow0KKwlpbnQgaTsNCisNCisJaWYgKHNpemUgPCA3ICsgMjIg KyAzMSArIDEpIHsNCisJCV9fc2V0X2Vycm5vKEVSQU5HRSk7DQorCQlyZXR1 cm4gTlVMTDsNCisJfQ0KKw0KKwlpZiAoc2V0dGluZ1swXSAhPSAnJCcgfHwN CisJICAgIHNldHRpbmdbMV0gIT0gJzInIHx8DQorCSAgICBzZXR0aW5nWzJd IDwgJ2EnIHx8IHNldHRpbmdbMl0gPiAneicgfHwNCisJICAgICFmbGFnc19i eV9zdWJ0eXBlWyh1bnNpZ25lZCBpbnQpKHVuc2lnbmVkIGNoYXIpc2V0dGlu Z1syXSAtICdhJ10gfHwNCisJICAgIHNldHRpbmdbM10gIT0gJyQnIHx8DQor CSAgICBzZXR0aW5nWzRdIDwgJzAnIHx8IHNldHRpbmdbNF0gPiAnMycgfHwN CisJICAgIHNldHRpbmdbNV0gPCAnMCcgfHwgc2V0dGluZ1s1XSA+ICc5JyB8 fA0KKwkgICAgKHNldHRpbmdbNF0gPT0gJzMnICYmIHNldHRpbmdbNV0gPiAn MScpIHx8DQorCSAgICBzZXR0aW5nWzZdICE9ICckJykgew0KKwkJX19zZXRf ZXJybm8oRUlOVkFMKTsNCisJCXJldHVybiBOVUxMOw0KKwl9DQorDQorCWNv dW50ID0gKEJGX3dvcmQpMSA8PCAoKHNldHRpbmdbNF0gLSAnMCcpICogMTAg KyAoc2V0dGluZ1s1XSAtICcwJykpOw0KKwlpZiAoY291bnQgPCBtaW4gfHwg QkZfZGVjb2RlKGRhdGEuYmluYXJ5LnNhbHQsICZzZXR0aW5nWzddLCAxNikp IHsNCisJCV9fc2V0X2Vycm5vKEVJTlZBTCk7DQorCQlyZXR1cm4gTlVMTDsN CisJfQ0KKwlCRl9zd2FwKGRhdGEuYmluYXJ5LnNhbHQsIDQpOw0KKw0KKwlC Rl9zZXRfa2V5KGtleSwgZGF0YS5leHBhbmRlZF9rZXksIGRhdGEuY3R4LlAs DQorCSAgICBmbGFnc19ieV9zdWJ0eXBlWyh1bnNpZ25lZCBpbnQpKHVuc2ln bmVkIGNoYXIpc2V0dGluZ1syXSAtICdhJ10pOw0KKw0KKwltZW1jcHkoZGF0 YS5jdHguUywgQkZfaW5pdF9zdGF0ZS5TLCBzaXplb2YoZGF0YS5jdHguUykp Ow0KKw0KKwlMID0gUiA9IDA7DQorCWZvciAoaSA9IDA7IGkgPCBCRl9OICsg MjsgaSArPSAyKSB7DQorCQlMIF49IGRhdGEuYmluYXJ5LnNhbHRbaSAmIDJd Ow0KKwkJUiBePSBkYXRhLmJpbmFyeS5zYWx0WyhpICYgMikgKyAxXTsNCisJ CUJGX0VOQ1JZUFQ7DQorCQlkYXRhLmN0eC5QW2ldID0gTDsNCisJCWRhdGEu Y3R4LlBbaSArIDFdID0gUjsNCisJfQ0KKw0KKwlwdHIgPSBkYXRhLmN0eC5T WzBdOw0KKwlkbyB7DQorCQlwdHIgKz0gNDsNCisJCUwgXj0gZGF0YS5iaW5h cnkuc2FsdFsoQkZfTiArIDIpICYgM107DQorCQlSIF49IGRhdGEuYmluYXJ5 LnNhbHRbKEJGX04gKyAzKSAmIDNdOw0KKwkJQkZfRU5DUllQVDsNCisJCSoo cHRyIC0gNCkgPSBMOw0KKwkJKihwdHIgLSAzKSA9IFI7DQorDQorCQlMIF49 IGRhdGEuYmluYXJ5LnNhbHRbKEJGX04gKyA0KSAmIDNdOw0KKwkJUiBePSBk YXRhLmJpbmFyeS5zYWx0WyhCRl9OICsgNSkgJiAzXTsNCisJCUJGX0VOQ1JZ UFQ7DQorCQkqKHB0ciAtIDIpID0gTDsNCisJCSoocHRyIC0gMSkgPSBSOw0K Kwl9IHdoaWxlIChwdHIgPCAmZGF0YS5jdHguU1szXVsweEZGXSk7DQorDQor CWRvIHsNCisJCWludCBkb25lOw0KKw0KKwkJZm9yIChpID0gMDsgaSA8IEJG X04gKyAyOyBpICs9IDIpIHsNCisJCQlkYXRhLmN0eC5QW2ldIF49IGRhdGEu ZXhwYW5kZWRfa2V5W2ldOw0KKwkJCWRhdGEuY3R4LlBbaSArIDFdIF49IGRh dGEuZXhwYW5kZWRfa2V5W2kgKyAxXTsNCisJCX0NCisNCisJCWRvbmUgPSAw Ow0KKwkJZG8gew0KKwkJCUJGX2JvZHkoKTsNCisJCQlpZiAoZG9uZSkNCisJ CQkJYnJlYWs7DQorCQkJZG9uZSA9IDE7DQorDQorCQkJdG1wMSA9IGRhdGEu YmluYXJ5LnNhbHRbMF07DQorCQkJdG1wMiA9IGRhdGEuYmluYXJ5LnNhbHRb MV07DQorCQkJdG1wMyA9IGRhdGEuYmluYXJ5LnNhbHRbMl07DQorCQkJdG1w NCA9IGRhdGEuYmluYXJ5LnNhbHRbM107DQorCQkJZm9yIChpID0gMDsgaSA8 IEJGX047IGkgKz0gNCkgew0KKwkJCQlkYXRhLmN0eC5QW2ldIF49IHRtcDE7 DQorCQkJCWRhdGEuY3R4LlBbaSArIDFdIF49IHRtcDI7DQorCQkJCWRhdGEu Y3R4LlBbaSArIDJdIF49IHRtcDM7DQorCQkJCWRhdGEuY3R4LlBbaSArIDNd IF49IHRtcDQ7DQorCQkJfQ0KKwkJCWRhdGEuY3R4LlBbMTZdIF49IHRtcDE7 DQorCQkJZGF0YS5jdHguUFsxN10gXj0gdG1wMjsNCisJCX0gd2hpbGUgKDEp Ow0KKwl9IHdoaWxlICgtLWNvdW50KTsNCisNCisJZm9yIChpID0gMDsgaSA8 IDY7IGkgKz0gMikgew0KKwkJTCA9IEJGX21hZ2ljX3dbaV07DQorCQlSID0g QkZfbWFnaWNfd1tpICsgMV07DQorDQorCQljb3VudCA9IDY0Ow0KKwkJZG8g ew0KKwkJCUJGX0VOQ1JZUFQ7DQorCQl9IHdoaWxlICgtLWNvdW50KTsNCisN CisJCWRhdGEuYmluYXJ5Lm91dHB1dFtpXSA9IEw7DQorCQlkYXRhLmJpbmFy eS5vdXRwdXRbaSArIDFdID0gUjsNCisJfQ0KKw0KKwltZW1jcHkob3V0cHV0 LCBzZXR0aW5nLCA3ICsgMjIgLSAxKTsNCisJb3V0cHV0WzcgKyAyMiAtIDFd ID0gQkZfaXRvYTY0WyhpbnQpDQorCQlCRl9hdG9pNjRbKGludClzZXR0aW5n WzcgKyAyMiAtIDFdIC0gMHgyMF0gJiAweDMwXTsNCisNCisvKiBUaGlzIGhh cyB0byBiZSBidWctY29tcGF0aWJsZSB3aXRoIHRoZSBvcmlnaW5hbCBpbXBs ZW1lbnRhdGlvbiwgc28NCisgKiBvbmx5IGVuY29kZSAyMyBvZiB0aGUgMjQg Ynl0ZXMuIDotKSAqLw0KKwlCRl9zd2FwKGRhdGEuYmluYXJ5Lm91dHB1dCwg Nik7DQorCUJGX2VuY29kZSgmb3V0cHV0WzcgKyAyMl0sIGRhdGEuYmluYXJ5 Lm91dHB1dCwgMjMpOw0KKwlvdXRwdXRbNyArIDIyICsgMzFdID0gJ1wwJzsN CisNCisJcmV0dXJuIG91dHB1dDsNCit9DQorDQoraW50IF9jcnlwdF9vdXRw dXRfbWFnaWMoY29uc3QgY2hhciAqc2V0dGluZywgY2hhciAqb3V0cHV0LCBp bnQgc2l6ZSkNCit7DQorCWlmIChzaXplIDwgMykNCisJCXJldHVybiAtMTsN CisNCisJb3V0cHV0WzBdID0gJyonOw0KKwlvdXRwdXRbMV0gPSAnMCc7DQor CW91dHB1dFsyXSA9ICdcMCc7DQorDQorCWlmIChzZXR0aW5nWzBdID09ICcq JyAmJiBzZXR0aW5nWzFdID09ICcwJykNCisJCW91dHB1dFsxXSA9ICcxJzsN CisNCisJcmV0dXJuIDA7DQorfQ0KKw0KKy8qDQorICogUGxlYXNlIHByZXNl cnZlIHRoZSBydW50aW1lIHNlbGYtdGVzdC4gIEl0IHNlcnZlcyB0d28gcHVy cG9zZXMgYXQgb25jZToNCisgKg0KKyAqIDEuIFdlIHJlYWxseSBjYW4ndCBh ZmZvcmQgdGhlIHJpc2sgb2YgcHJvZHVjaW5nIGluY29tcGF0aWJsZSBoYXNo ZXMgZS5nLg0KKyAqIHdoZW4gdGhlcmUncyBzb21ldGhpbmcgbGlrZSBnY2Mg YnVnIDI2NTg3IGFnYWluLCB3aGVyZWFzIGFuIGFwcGxpY2F0aW9uIG9yDQor ICogbGlicmFyeSBpbnRlZ3JhdGluZyB0aGlzIGNvZGUgbWlnaHQgbm90IGFs c28gaW50ZWdyYXRlIG91ciBleHRlcm5hbCB0ZXN0cyBvcg0KKyAqIGl0IG1p Z2h0IG5vdCBydW4gdGhlbSBhZnRlciBldmVyeSBidWlsZC4gIEV2ZW4gaWYg aXQgZG9lcywgdGhlIG1pc2NvbXBpbGUNCisgKiBtaWdodCBvbmx5IG9jY3Vy IG9uIHRoZSBwcm9kdWN0aW9uIGJ1aWxkLCBidXQgbm90IG9uIGEgdGVzdGlu ZyBidWlsZCAoc3VjaA0KKyAqIGFzIGJlY2F1c2Ugb2YgZGlmZmVyZW50IG9w dGltaXphdGlvbiBzZXR0aW5ncykuICBJdCBpcyBwYWluZnVsIHRvIHJlY292 ZXINCisgKiBmcm9tIGluY29ycmVjdGx5LWNvbXB1dGVkIGhhc2hlcyAtIG1l cmVseSBmaXhpbmcgd2hhdGV2ZXIgYnJva2UgaXMgbm90DQorICogZW5vdWdo LiAgVGh1cywgYSBwcm9hY3RpdmUgbWVhc3VyZSBsaWtlIHRoaXMgc2VsZi10 ZXN0IGlzIG5lZWRlZC4NCisgKg0KKyAqIDIuIFdlIGRvbid0IHdhbnQgdG8g bGVhdmUgc2Vuc2l0aXZlIGRhdGEgZnJvbSBvdXIgYWN0dWFsIHBhc3N3b3Jk IGhhc2gNCisgKiBjb21wdXRhdGlvbiBvbiB0aGUgc3RhY2sgb3IgaW4gcmVn aXN0ZXJzLiAgUHJldmlvdXMgcmV2aXNpb25zIG9mIHRoZSBjb2RlDQorICog d291bGQgZG8gZXhwbGljaXQgY2xlYW51cHMsIGJ1dCBzaW1wbHkgcnVubmlu ZyB0aGUgc2VsZi10ZXN0IGFmdGVyIGhhc2gNCisgKiBjb21wdXRhdGlvbiBp cyBtb3JlIHJlbGlhYmxlLg0KKyAqDQorICogVGhlIHBlcmZvcm1hbmNlIGNv c3Qgb2YgdGhpcyBxdWljayBzZWxmLXRlc3QgaXMgYXJvdW5kIDAuNiUgYXQg dGhlICIkMmEkMDgiDQorICogc2V0dGluZy4NCisgKi8NCitjaGFyICpfY3J5 cHRfYmxvd2Zpc2hfcm4oY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICpz ZXR0aW5nLA0KKwljaGFyICpvdXRwdXQsIGludCBzaXplKQ0KK3sNCisJY29u c3QgY2hhciAqdGVzdF9rZXkgPSAiOGIgXHhkMFx4YzFceGQyXHhjZlx4Y2Nc eGQ4IjsNCisJY29uc3QgY2hhciAqdGVzdF9zZXR0aW5nID0gIiQyYSQwMCRh YmNkZWZnaGlqa2xtbm9wcXJzdHV1IjsNCisJc3RhdGljIGNvbnN0IGNoYXIg KiBjb25zdCB0ZXN0X2hhc2hbMl0gPQ0KKwkJeyJWVXJQbVhENnEvblZTU3A3 cE5EaENSOTA3MUlmSVJlXDBceDU1IiwgLyogJDJ4JCAqLw0KKwkJImkxRDcw OXZmYW11bGltbEdjcTBxcTNVdnVVYXN2RWFcMFx4NTUifTsgLyogJDJhJCwg JDJ5JCAqLw0KKwljaGFyICpyZXR2YWw7DQorCWNvbnN0IGNoYXIgKnA7DQor CWludCBzYXZlX2Vycm5vLCBvazsNCisJc3RydWN0IHsNCisJCWNoYXIgc1s3 ICsgMjIgKyAxXTsNCisJCWNoYXIgb1s3ICsgMjIgKyAzMSArIDEgKyAxICsg MV07DQorCX0gYnVmOw0KKw0KKy8qIEhhc2ggdGhlIHN1cHBsaWVkIHBhc3N3 b3JkICovDQorCV9jcnlwdF9vdXRwdXRfbWFnaWMoc2V0dGluZywgb3V0cHV0 LCBzaXplKTsNCisJcmV0dmFsID0gQkZfY3J5cHQoa2V5LCBzZXR0aW5nLCBv dXRwdXQsIHNpemUsIDE2KTsNCisJc2F2ZV9lcnJubyA9IGVycm5vOw0KKw0K Ky8qDQorICogRG8gYSBxdWljayBzZWxmLXRlc3QuICBJdCBpcyBpbXBvcnRh bnQgdGhhdCB3ZSBtYWtlIGJvdGggY2FsbHMgdG8gQkZfY3J5cHQoKQ0KKyAq IGZyb20gdGhlIHNhbWUgc2NvcGUgc3VjaCB0aGF0IHRoZXkgbGlrZWx5IHVz ZSB0aGUgc2FtZSBzdGFjayBsb2NhdGlvbnMsDQorICogd2hpY2ggbWFrZXMg dGhlIHNlY29uZCBjYWxsIG92ZXJ3cml0ZSB0aGUgZmlyc3QgY2FsbCdzIHNl bnNpdGl2ZSBkYXRhIG9uIHRoZQ0KKyAqIHN0YWNrIGFuZCBtYWtlcyBpdCBt b3JlIGxpa2VseSB0aGF0IGFueSBhbGlnbm1lbnQgcmVsYXRlZCBpc3N1ZXMg d291bGQgYmUNCisgKiBkZXRlY3RlZCBieSB0aGUgc2VsZi10ZXN0Lg0KKyAq Lw0KKwltZW1jcHkoYnVmLnMsIHRlc3Rfc2V0dGluZywgc2l6ZW9mKGJ1Zi5z KSk7DQorCWlmIChyZXR2YWwpDQorCQlidWYuc1syXSA9IHNldHRpbmdbMl07 DQorCW1lbXNldChidWYubywgMHg1NSwgc2l6ZW9mKGJ1Zi5vKSk7DQorCWJ1 Zi5vW3NpemVvZihidWYubykgLSAxXSA9IDA7DQorCXAgPSBCRl9jcnlwdCh0 ZXN0X2tleSwgYnVmLnMsIGJ1Zi5vLCBzaXplb2YoYnVmLm8pIC0gKDEgKyAx KSwgMSk7DQorDQorCW9rID0gKHAgPT0gYnVmLm8gJiYNCisJICAgICFtZW1j bXAocCwgYnVmLnMsIDcgKyAyMikgJiYNCisJICAgICFtZW1jbXAocCArICg3 ICsgMjIpLA0KKwkgICAgdGVzdF9oYXNoWyh1bnNpZ25lZCBpbnQpKHVuc2ln bmVkIGNoYXIpYnVmLnNbMl0gJiAxXSwNCisJICAgIDMxICsgMSArIDEgKyAx KSk7DQorDQorCXsNCisJCWNvbnN0IGNoYXIgKmsgPSAiXHhmZlx4YTMiICIz NCIgIlx4ZmZceGZmXHhmZlx4YTMiICIzNDUiOw0KKwkJQkZfa2V5IGFlLCBh aSwgeWUsIHlpOw0KKwkJQkZfc2V0X2tleShrLCBhZSwgYWksIDIpOyAvKiAk MmEkICovDQorCQlCRl9zZXRfa2V5KGssIHllLCB5aSwgNCk7IC8qICQyeSQg Ki8NCisJCWFpWzBdIF49IDB4MTAwMDA7IC8qIHVuZG8gdGhlIHNhZmV0eSAo Zm9yIGNvbXBhcmlzb24pICovDQorCQlvayA9IG9rICYmIGFpWzBdID09IDB4 ZGI5YzU5YmMgJiYgeWVbMTddID09IDB4MzMzNDM1MDAgJiYNCisJCSAgICAh bWVtY21wKGFlLCB5ZSwgc2l6ZW9mKGFlKSkgJiYNCisJCSAgICAhbWVtY21w KGFpLCB5aSwgc2l6ZW9mKGFpKSk7DQorCX0NCisNCisJX19zZXRfZXJybm8o c2F2ZV9lcnJubyk7DQorCWlmIChvaykNCisJCXJldHVybiByZXR2YWw7DQor DQorLyogU2hvdWxkIG5vdCBoYXBwZW4gKi8NCisJX2NyeXB0X291dHB1dF9t YWdpYyhzZXR0aW5nLCBvdXRwdXQsIHNpemUpOw0KKwlfX3NldF9lcnJubyhF SU5WQUwpOyAvKiBwcmV0ZW5kIHdlIGRvbid0IHN1cHBvcnQgdGhpcyBoYXNo IHR5cGUgKi8NCisJcmV0dXJuIE5VTEw7DQorfQ0KKw0KK2NoYXIgKl9jcnlw dF9nZW5zYWx0X2Jsb3dmaXNoX3JuKGNvbnN0IGNoYXIgKnByZWZpeCwgdW5z aWduZWQgbG9uZyBjb3VudCwNCisJY29uc3QgY2hhciAqaW5wdXQsIGludCBz aXplLCBjaGFyICpvdXRwdXQsIGludCBvdXRwdXRfc2l6ZSkNCit7DQorCWlm IChzaXplIDwgMTYgfHwgb3V0cHV0X3NpemUgPCA3ICsgMjIgKyAxIHx8DQor CSAgICAoY291bnQgJiYgKGNvdW50IDwgNCB8fCBjb3VudCA+IDMxKSkgfHwN CisJICAgIHByZWZpeFswXSAhPSAnJCcgfHwgcHJlZml4WzFdICE9ICcyJyB8 fA0KKwkgICAgKHByZWZpeFsyXSAhPSAnYScgJiYgcHJlZml4WzJdICE9ICd5 JykpIHsNCisJCWlmIChvdXRwdXRfc2l6ZSA+IDApIG91dHB1dFswXSA9ICdc MCc7DQorCQlfX3NldF9lcnJubygob3V0cHV0X3NpemUgPCA3ICsgMjIgKyAx KSA/IEVSQU5HRSA6IEVJTlZBTCk7DQorCQlyZXR1cm4gTlVMTDsNCisJfQ0K Kw0KKwlpZiAoIWNvdW50KSBjb3VudCA9IDU7DQorDQorCW91dHB1dFswXSA9 ICckJzsNCisJb3V0cHV0WzFdID0gJzInOw0KKwlvdXRwdXRbMl0gPSBwcmVm aXhbMl07DQorCW91dHB1dFszXSA9ICckJzsNCisJb3V0cHV0WzRdID0gJzAn ICsgY291bnQgLyAxMDsNCisJb3V0cHV0WzVdID0gJzAnICsgY291bnQgJSAx MDsNCisJb3V0cHV0WzZdID0gJyQnOw0KKw0KKwlCRl9lbmNvZGUoJm91dHB1 dFs3XSwgKGNvbnN0IEJGX3dvcmQgKilpbnB1dCwgMTYpOw0KKwlvdXRwdXRb NyArIDIyXSA9ICdcMCc7DQorDQorCXJldHVybiBvdXRwdXQ7DQorfQ0KZGlm ZiAtLWdpdCBhL3NyYy9taXNjL2NyeXB0X2dlbnNhbHQuYyBiL3NyYy9taXNj L2NyeXB0X2dlbnNhbHQuYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4 IDAwMDAwMDAuLjQzZTE1ODUNCi0tLSAvZGV2L251bGwNCisrKyBiL3NyYy9t aXNjL2NyeXB0X2dlbnNhbHQuYw0KQEAgLTAsMCArMSwxMjQgQEANCisvKg0K KyAqIFdyaXR0ZW4gYnkgU29sYXIgRGVzaWduZXIgPHNvbGFyIGF0IG9wZW53 YWxsLmNvbT4gaW4gMjAwMC0yMDExLg0KKyAqIE5vIGNvcHlyaWdodCBpcyBj bGFpbWVkLCBhbmQgdGhlIHNvZnR3YXJlIGlzIGhlcmVieSBwbGFjZWQgaW4g dGhlIHB1YmxpYw0KKyAqIGRvbWFpbi4gIEluIGNhc2UgdGhpcyBhdHRlbXB0 IHRvIGRpc2NsYWltIGNvcHlyaWdodCBhbmQgcGxhY2UgdGhlIHNvZnR3YXJl DQorICogaW4gdGhlIHB1YmxpYyBkb21haW4gaXMgZGVlbWVkIG51bGwgYW5k IHZvaWQsIHRoZW4gdGhlIHNvZnR3YXJlIGlzDQorICogQ29weXJpZ2h0IChj KSAyMDAwLTIwMTEgU29sYXIgRGVzaWduZXIgYW5kIGl0IGlzIGhlcmVieSBy ZWxlYXNlZCB0byB0aGUNCisgKiBnZW5lcmFsIHB1YmxpYyB1bmRlciB0aGUg Zm9sbG93aW5nIHRlcm1zOg0KKyAqDQorICogUmVkaXN0cmlidXRpb24gYW5k IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo b3V0DQorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkLg0KKyAqDQor ICogVGhlcmUncyBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLCBleHByZXNzIG9y IGltcGxpZWQuDQorICoNCisgKiBTZWUgY3J5cHRfYmxvd2Zpc2guYyBmb3Ig bW9yZSBpbmZvcm1hdGlvbi4NCisgKg0KKyAqIFRoaXMgZmlsZSBjb250YWlu cyBzYWx0IGdlbmVyYXRpb24gZnVuY3Rpb25zIGZvciB0aGUgdHJhZGl0aW9u YWwgYW5kDQorICogb3RoZXIgY29tbW9uIGNyeXB0KDMpIGFsZ29yaXRobXMs IGV4Y2VwdCBmb3IgYmNyeXB0IHdoaWNoIGlzIGRlZmluZWQNCisgKiBlbnRp cmVseSBpbiBjcnlwdF9ibG93ZmlzaC5jLg0KKyAqLw0KKw0KKyNpbmNsdWRl IDxzdHJpbmcuaD4NCisNCisjaW5jbHVkZSA8ZXJybm8uaD4NCisjaWZuZGVm IF9fc2V0X2Vycm5vDQorI2RlZmluZSBfX3NldF9lcnJubyh2YWwpIGVycm5v ID0gKHZhbCkNCisjZW5kaWYNCisNCisvKiBKdXN0IHRvIG1ha2Ugc3VyZSB0 aGUgcHJvdG90eXBlcyBtYXRjaCB0aGUgYWN0dWFsIGRlZmluaXRpb25zICov DQorI2luY2x1ZGUgPGNyeXB0Lmg+DQorDQordW5zaWduZWQgY29uc3QgY2hh ciBfY3J5cHRfaXRvYTY0WzY0ICsgMV0gPQ0KKwkiLi8wMTIzNDU2Nzg5QUJD REVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2 d3h5eiI7DQorDQorY2hhciAqX2NyeXB0X2dlbnNhbHRfdHJhZGl0aW9uYWxf cm4oY29uc3QgY2hhciAqcHJlZml4LCB1bnNpZ25lZCBsb25nIGNvdW50LA0K Kwljb25zdCBjaGFyICppbnB1dCwgaW50IHNpemUsIGNoYXIgKm91dHB1dCwg aW50IG91dHB1dF9zaXplKQ0KK3sNCisJKHZvaWQpIHByZWZpeDsNCisNCisJ aWYgKHNpemUgPCAyIHx8IG91dHB1dF9zaXplIDwgMiArIDEgfHwgKGNvdW50 ICYmIGNvdW50ICE9IDI1KSkgew0KKwkJaWYgKG91dHB1dF9zaXplID4gMCkg b3V0cHV0WzBdID0gJ1wwJzsNCisJCV9fc2V0X2Vycm5vKChvdXRwdXRfc2l6 ZSA8IDIgKyAxKSA/IEVSQU5HRSA6IEVJTlZBTCk7DQorCQlyZXR1cm4gTlVM TDsNCisJfQ0KKw0KKwlvdXRwdXRbMF0gPSBfY3J5cHRfaXRvYTY0Wyh1bnNp Z25lZCBpbnQpaW5wdXRbMF0gJiAweDNmXTsNCisJb3V0cHV0WzFdID0gX2Ny eXB0X2l0b2E2NFsodW5zaWduZWQgaW50KWlucHV0WzFdICYgMHgzZl07DQor CW91dHB1dFsyXSA9ICdcMCc7DQorDQorCXJldHVybiBvdXRwdXQ7DQorfQ0K Kw0KK2NoYXIgKl9jcnlwdF9nZW5zYWx0X2V4dGVuZGVkX3JuKGNvbnN0IGNo YXIgKnByZWZpeCwgdW5zaWduZWQgbG9uZyBjb3VudCwNCisJY29uc3QgY2hh ciAqaW5wdXQsIGludCBzaXplLCBjaGFyICpvdXRwdXQsIGludCBvdXRwdXRf c2l6ZSkNCit7DQorCXVuc2lnbmVkIGxvbmcgdmFsdWU7DQorDQorCSh2b2lk KSBwcmVmaXg7DQorDQorLyogRXZlbiBpdGVyYXRpb24gY291bnRzIG1ha2Ug aXQgZWFzaWVyIHRvIGRldGVjdCB3ZWFrIERFUyBrZXlzIGZyb20gYSBsb29r DQorICogYXQgdGhlIGhhc2gsIHNvIHRoZXkgc2hvdWxkIGJlIGF2b2lkZWQg Ki8NCisJaWYgKHNpemUgPCAzIHx8IG91dHB1dF9zaXplIDwgMSArIDQgKyA0 ICsgMSB8fA0KKwkgICAgKGNvdW50ICYmIChjb3VudCA+IDB4ZmZmZmZmIHx8 ICEoY291bnQgJiAxKSkpKSB7DQorCQlpZiAob3V0cHV0X3NpemUgPiAwKSBv dXRwdXRbMF0gPSAnXDAnOw0KKwkJX19zZXRfZXJybm8oKG91dHB1dF9zaXpl IDwgMSArIDQgKyA0ICsgMSkgPyBFUkFOR0UgOiBFSU5WQUwpOw0KKwkJcmV0 dXJuIE5VTEw7DQorCX0NCisNCisJaWYgKCFjb3VudCkgY291bnQgPSA3MjU7 DQorDQorCW91dHB1dFswXSA9ICdfJzsNCisJb3V0cHV0WzFdID0gX2NyeXB0 X2l0b2E2NFtjb3VudCAmIDB4M2ZdOw0KKwlvdXRwdXRbMl0gPSBfY3J5cHRf aXRvYTY0Wyhjb3VudCA+PiA2KSAmIDB4M2ZdOw0KKwlvdXRwdXRbM10gPSBf Y3J5cHRfaXRvYTY0Wyhjb3VudCA+PiAxMikgJiAweDNmXTsNCisJb3V0cHV0 WzRdID0gX2NyeXB0X2l0b2E2NFsoY291bnQgPj4gMTgpICYgMHgzZl07DQor CXZhbHVlID0gKHVuc2lnbmVkIGxvbmcpKHVuc2lnbmVkIGNoYXIpaW5wdXRb MF0gfA0KKwkJKCh1bnNpZ25lZCBsb25nKSh1bnNpZ25lZCBjaGFyKWlucHV0 WzFdIDw8IDgpIHwNCisJCSgodW5zaWduZWQgbG9uZykodW5zaWduZWQgY2hh cilpbnB1dFsyXSA8PCAxNik7DQorCW91dHB1dFs1XSA9IF9jcnlwdF9pdG9h NjRbdmFsdWUgJiAweDNmXTsNCisJb3V0cHV0WzZdID0gX2NyeXB0X2l0b2E2 NFsodmFsdWUgPj4gNikgJiAweDNmXTsNCisJb3V0cHV0WzddID0gX2NyeXB0 X2l0b2E2NFsodmFsdWUgPj4gMTIpICYgMHgzZl07DQorCW91dHB1dFs4XSA9 IF9jcnlwdF9pdG9hNjRbKHZhbHVlID4+IDE4KSAmIDB4M2ZdOw0KKwlvdXRw dXRbOV0gPSAnXDAnOw0KKw0KKwlyZXR1cm4gb3V0cHV0Ow0KK30NCisNCitj aGFyICpfY3J5cHRfZ2Vuc2FsdF9tZDVfcm4oY29uc3QgY2hhciAqcHJlZml4 LCB1bnNpZ25lZCBsb25nIGNvdW50LA0KKwljb25zdCBjaGFyICppbnB1dCwg aW50IHNpemUsIGNoYXIgKm91dHB1dCwgaW50IG91dHB1dF9zaXplKQ0KK3sN CisJdW5zaWduZWQgbG9uZyB2YWx1ZTsNCisNCisJKHZvaWQpIHByZWZpeDsN CisNCisJaWYgKHNpemUgPCAzIHx8IG91dHB1dF9zaXplIDwgMyArIDQgKyAx IHx8IChjb3VudCAmJiBjb3VudCAhPSAxMDAwKSkgew0KKwkJaWYgKG91dHB1 dF9zaXplID4gMCkgb3V0cHV0WzBdID0gJ1wwJzsNCisJCV9fc2V0X2Vycm5v KChvdXRwdXRfc2l6ZSA8IDMgKyA0ICsgMSkgPyBFUkFOR0UgOiBFSU5WQUwp Ow0KKwkJcmV0dXJuIE5VTEw7DQorCX0NCisNCisJb3V0cHV0WzBdID0gJyQn Ow0KKwlvdXRwdXRbMV0gPSAnMSc7DQorCW91dHB1dFsyXSA9ICckJzsNCisJ dmFsdWUgPSAodW5zaWduZWQgbG9uZykodW5zaWduZWQgY2hhcilpbnB1dFsw XSB8DQorCQkoKHVuc2lnbmVkIGxvbmcpKHVuc2lnbmVkIGNoYXIpaW5wdXRb MV0gPDwgOCkgfA0KKwkJKCh1bnNpZ25lZCBsb25nKSh1bnNpZ25lZCBjaGFy KWlucHV0WzJdIDw8IDE2KTsNCisJb3V0cHV0WzNdID0gX2NyeXB0X2l0b2E2 NFt2YWx1ZSAmIDB4M2ZdOw0KKwlvdXRwdXRbNF0gPSBfY3J5cHRfaXRvYTY0 Wyh2YWx1ZSA+PiA2KSAmIDB4M2ZdOw0KKwlvdXRwdXRbNV0gPSBfY3J5cHRf aXRvYTY0Wyh2YWx1ZSA+PiAxMikgJiAweDNmXTsNCisJb3V0cHV0WzZdID0g X2NyeXB0X2l0b2E2NFsodmFsdWUgPj4gMTgpICYgMHgzZl07DQorCW91dHB1 dFs3XSA9ICdcMCc7DQorDQorCWlmIChzaXplID49IDYgJiYgb3V0cHV0X3Np emUgPj0gMyArIDQgKyA0ICsgMSkgew0KKwkJdmFsdWUgPSAodW5zaWduZWQg bG9uZykodW5zaWduZWQgY2hhcilpbnB1dFszXSB8DQorCQkJKCh1bnNpZ25l ZCBsb25nKSh1bnNpZ25lZCBjaGFyKWlucHV0WzRdIDw8IDgpIHwNCisJCQko KHVuc2lnbmVkIGxvbmcpKHVuc2lnbmVkIGNoYXIpaW5wdXRbNV0gPDwgMTYp Ow0KKwkJb3V0cHV0WzddID0gX2NyeXB0X2l0b2E2NFt2YWx1ZSAmIDB4M2Zd Ow0KKwkJb3V0cHV0WzhdID0gX2NyeXB0X2l0b2E2NFsodmFsdWUgPj4gNikg JiAweDNmXTsNCisJCW91dHB1dFs5XSA9IF9jcnlwdF9pdG9hNjRbKHZhbHVl ID4+IDEyKSAmIDB4M2ZdOw0KKwkJb3V0cHV0WzEwXSA9IF9jcnlwdF9pdG9h NjRbKHZhbHVlID4+IDE4KSAmIDB4M2ZdOw0KKwkJb3V0cHV0WzExXSA9ICdc MCc7DQorCX0NCisNCisJcmV0dXJuIG91dHB1dDsNCit9DQo= --8323328-1469176627-1342884209=:1301--