From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 17413 invoked by alias); 1 Aug 2007 23:24:30 -0000 Received: (qmail 17403 invoked by uid 22791); 1 Aug 2007 23:24:29 -0000 X-Spam-Check-By: sourceware.org Received: from mx.mips.com (HELO dns0.mips.com) (63.167.95.198) by sourceware.org (qpsmtpd/0.31) with ESMTP; Wed, 01 Aug 2007 23:24:24 +0000 Received: from mercury.mips.com (mercury [192.168.64.101]) by dns0.mips.com (8.12.11/8.12.11) with ESMTP id l71NOFUO024811; Wed, 1 Aug 2007 16:24:15 -0700 (PDT) Received: from exchange.MIPS.COM (exchange [192.168.20.29]) by mercury.mips.com (8.13.5/8.13.5) with ESMTP id l71NOJ8I006944; Wed, 1 Aug 2007 16:24:19 -0700 (PDT) Content-class: urn:content-classes:message MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----_=_NextPart_001_01C7D493.61D27714" Subject: [ping][patch] Fixed-point patch 2/10 Date: Wed, 01 Aug 2007 23:24:00 -0000 Message-ID: <3CB54817FDF733459B230DD27C690CEC03EE8EF2@Exchange.mips.com> From: "Fu, Chao-Ying" To: Cc: "Thekkath, Radhika" , "Stephens, Nigel" , "Mark Mitchell" X-IsSubscribed: yes Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org X-SW-Source: 2007-08/txt/msg00088.txt.bz2 This is a multi-part message in MIME format. ------_=_NextPart_001_01C7D493.61D27714 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-length: 1537 Hi, Since there is no response, I re-sent the fixed-point=20 patch #2. The patch #3 to #10 will be sent out soon. (Note that these patches are managed by Quilt.) Can maintainers review these patches? Thanks a lot! > 1. Merge in machine modes to support signed and unsigned > fract and accum modes. Handle scalar and vector modes. DONE! > 2. Merge in fixed-value.h and fixed-value.c to handle fixed-point values. (fixed-value.diff) > 3. Merge in TREE structures for fixed-point types and constants. > 4. Merge in C front-end changes to parse _Sat, _Fract and _Accum. > 5. Merge in RTL structures for fixed-point constants and operators. > 6. Merge in libcpp to parse fixed-point constants. > 7. Merge in changes to support "case" of FIXED_POINT_TYPE, FIXED_CST, > and CONST_FIXED in .c and .h files. > 8. Merge in the MIPS backend that supports fixed-point instructions. > 9. Merge in configure/build system changes for the runtime library. > 10. Merge in testsuite (from gcc.dg/fixed-point) that only run > when the compiler is configured to enable fixed-point. Regards, Chao-ying gcc/ChangeLog 2007-08-01 Chao-ying Fu * fixed-value.h: New file. * fixed-value.c: New file. * Makefile.in (OBJS-common): Add fixed-value.o. (fixed-value.o): New rule. (GTFILES): Add fixed-value.h. * double-int.c (double_int_scmp): Use casts of unsigned HOST_WIDE_I= NT to compare a.low and b.low. * gengtype.c (main): Handle FIXED_VALUE_TYPE type as scalar typedef. ------_=_NextPart_001_01C7D493.61D27714 Content-Type: application/octet-stream; name="fixed-value.diff" Content-Transfer-Encoding: base64 Content-Description: fixed-value.diff Content-Disposition: attachment; filename="fixed-value.diff" Content-length: 54095 SW5kZXg6IGdjYzR4L2djYy9nY2MvZml4ZWQtdmFsdWUuaAo9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09Ci0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDow MC4wMDAwMDAwMDAgKzAwMDAKKysrIGdjYzR4L2djYy9nY2MvZml4ZWQtdmFs dWUuaAkyMDA3LTA4LTAxIDE1OjU1OjI2LjAwMDAwMDAwMCAtMDcwMApAQCAt MCwwICsxLDEwMCBAQAorLyogRml4ZWQtcG9pbnQgYXJpdGhtZXRpYyBzdXBw b3J0LgorICAgQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbiwgSW5jLgorCitUaGlzIGZpbGUgaXMgcGFydCBvZiBH Q0MuCisKK0dDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCit0aGUgdGVybXMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi eSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNp b24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIKK3ZlcnNpb24u CisKK0dDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp bGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkKK1dBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklM SVRZIG9yCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2ZvciBtb3JlIGRl dGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIEdD Qzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorPGh0dHA6 Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2lmbmRlZiBHQ0Nf RklYRURfVkFMVUVfSAorI2RlZmluZSBHQ0NfRklYRURfVkFMVUVfSAorCisj aW5jbHVkZSAibWFjaG1vZGUuaCIKKyNpbmNsdWRlICJyZWFsLmgiCisjaW5j bHVkZSAiZG91YmxlLWludC5oIgorCitzdHJ1Y3QgZml4ZWRfdmFsdWUgR1RZ KCgpKQoreworICBkb3VibGVfaW50IGRhdGE7CS8qIFN0b3JlIGRhdGEgdXAg dG8gMiB3aWRlIGludGVnZXJzLiAgKi8KKyAgdW5zaWduZWQgaW50IG1vZGU7 CS8qIFVzZSBtYWNoaW5lIG1vZGUgdG8ga25vdyBJQklUIGFuZCBGQklULiAg Ki8KK307CisKKyNkZWZpbmUgRklYRURfVkFMVUVfVFlQRSBzdHJ1Y3QgZml4 ZWRfdmFsdWUKKworI2RlZmluZSBNQVhfRkNPTlNUMAkxOAkvKiBGb3Igc3Rv cmluZyAxOCBmaXhlZC1wb2ludCB6ZXJvcyBwZXIKKwkJCQkgICBmcmFjdCwg dWZyYWN0LCBhY2N1bSwgYW5kIHVhY2N1bSBtb2RlcyAuICAqLworI2RlZmlu ZSBNQVhfRkNPTlNUMQk4CS8qIEZvciBzdG9yaW5nIDggZml4ZWQtcG9pbnQg b25lcyBwZXIgYWNjdW0KKwkJCQkgICBhbmQgdWFjY3VtIG1vZGVzLiAgKi8K Ky8qIENvbnN0YW50IGZpeGVkLXBvaW50IHZhbHVlcyAwIGFuZCAxLiAgKi8K K2V4dGVybiBGSVhFRF9WQUxVRV9UWVBFIGZjb25zdDBbTUFYX0ZDT05TVDBd OworZXh0ZXJuIEZJWEVEX1ZBTFVFX1RZUEUgZmNvbnN0MVtNQVhfRkNPTlNU MV07CisKKy8qIE1hY3JvcyB0byBhY2Nlc3MgZmNvbnN0MCBhbmQgZmNvbnN0 MSB2aWEgbWFjaGluZSBtb2Rlcy4gICovCisjZGVmaW5lIEZDT05TVDAobW9k ZSkJZmNvbnN0MFttb2RlIC0gUVFtb2RlXQorI2RlZmluZSBGQ09OU1QxKG1v ZGUpCWZjb25zdDFbbW9kZSAtIEhBbW9kZV0KKworLyogUmV0dXJuIGEgQ09O U1RfRklYRUQgd2l0aCB2YWx1ZSBSIGFuZCBtb2RlIE0uICAqLworI2RlZmlu ZSBDT05TVF9GSVhFRF9GUk9NX0ZJWEVEX1ZBTFVFKHIsIG0pIFwKKyAgY29u c3RfZml4ZWRfZnJvbV9maXhlZF92YWx1ZSAociwgbSkKK2V4dGVybiBydHgg Y29uc3RfZml4ZWRfZnJvbV9maXhlZF92YWx1ZSAoRklYRURfVkFMVUVfVFlQ RSwgZW51bSBtYWNoaW5lX21vZGUpOworCisvKiBJbml0aWFsaXplIGZyb20g YSBkZWNpbWFsIG9yIGhleGFkZWNpbWFsIHN0cmluZy4gICovCitleHRlcm4g dm9pZCBmaXhlZF9mcm9tX3N0cmluZyAoRklYRURfVkFMVUVfVFlQRSAqLCBj b25zdCBjaGFyICosCisJCQkgICAgICAgZW51bSBtYWNoaW5lX21vZGUpOwor CisvKiBJbiB0cmVlLmM6IHdyYXAgdXAgYSBGSVhFRF9WQUxVRV9UWVBFIGlu IGEgdHJlZSBub2RlLiAgKi8KK2V4dGVybiB0cmVlIGJ1aWxkX2ZpeGVkICh0 cmVlLCBGSVhFRF9WQUxVRV9UWVBFKTsKKworLyogRXh0ZW5kIG9yIHRydW5j YXRlIHRvIGEgbmV3IG1vZGUuICAqLworZXh0ZXJuIGJvb2wgZml4ZWRfY29u dmVydCAoRklYRURfVkFMVUVfVFlQRSAqLCBlbnVtIG1hY2hpbmVfbW9kZSwK KwkJCSAgIGNvbnN0IEZJWEVEX1ZBTFVFX1RZUEUgKiwgYm9vbCk7CisKKy8q IENvbnZlcnQgdG8gYSBmaXhlZC1wb2ludCBtb2RlIGZyb20gYW4gaW50ZWdl ci4gICovCitleHRlcm4gYm9vbCBmaXhlZF9jb252ZXJ0X2Zyb21faW50IChG SVhFRF9WQUxVRV9UWVBFICosIGVudW0gbWFjaGluZV9tb2RlLAorCQkJCSAg ICBkb3VibGVfaW50LCBib29sLCBib29sKTsKKworLyogQ29udmVydCB0byBh IGZpeGVkLXBvaW50IG1vZGUgZnJvbSBhIHJlYWwuICAqLworZXh0ZXJuIGJv b2wgZml4ZWRfY29udmVydF9mcm9tX3JlYWwgKEZJWEVEX1ZBTFVFX1RZUEUg KiwgZW51bSBtYWNoaW5lX21vZGUsCisJCQkJICAgICBjb25zdCBSRUFMX1ZB TFVFX1RZUEUgKiwgYm9vbCk7CisKKy8qIENvbnZlcnQgdG8gYSByZWFsIG1v ZGUgZnJvbSBhIGZpeGVkLXBvaW50LiAgKi8KK2V4dGVybiB2b2lkIHJlYWxf Y29udmVydF9mcm9tX2ZpeGVkIChSRUFMX1ZBTFVFX1RZUEUgKiwgZW51bSBt YWNoaW5lX21vZGUsCisJCQkJICAgICBjb25zdCBGSVhFRF9WQUxVRV9UWVBF ICopOworCisvKiBDb21wYXJlIHR3byBmaXhlZC1wb2ludCBvYmplY3RzIGZv ciBiaXR3aXNlIGlkZW50aXR5LiAgKi8KK2V4dGVybiBib29sIGZpeGVkX2lk ZW50aWNhbCAoY29uc3QgRklYRURfVkFMVUVfVFlQRSAqLCBjb25zdCBGSVhF RF9WQUxVRV9UWVBFICopOworCisvKiBDYWxjdWxhdGUgYSBoYXNoIHZhbHVl LiAgKi8KK2V4dGVybiB1bnNpZ25lZCBpbnQgZml4ZWRfaGFzaCAoY29uc3Qg RklYRURfVkFMVUVfVFlQRSAqKTsKKworI2RlZmluZSBGSVhFRF9WQUxVRVNf SURFTlRJQ0FMKHgsIHkpCWZpeGVkX2lkZW50aWNhbCAoJih4KSwgJih5KSkK KworLyogRGV0ZXJtaW5lIHdoZXRoZXIgYSBmaXhlZC1wb2ludCB2YWx1ZSBY IGlzIG5lZ2F0aXZlLiAgKi8KKyNkZWZpbmUgRklYRURfVkFMVUVfTkVHQVRJ VkUoeCkJCWZpeGVkX2lzbmVnICgmKHgpKQorCisvKiBSZW5kZXIgRiBhcyBh IGRlY2ltYWwgZmxvYXRpbmcgcG9pbnQgY29uc3RhbnQuICAqLworZXh0ZXJu IHZvaWQgZml4ZWRfdG9fZGVjaW1hbCAoY2hhciAqc3RyLCBjb25zdCBGSVhF RF9WQUxVRV9UWVBFICosIHNpemVfdCk7CisKKy8qIEJpbmFyeSBvciB1bmFy eSBhcml0aG1ldGljIG9uIHRyZWVfY29kZS4gICovCitleHRlcm4gYm9vbCBm aXhlZF9hcml0aG1ldGljIChGSVhFRF9WQUxVRV9UWVBFICosIGludCwgY29u c3QgRklYRURfVkFMVUVfVFlQRSAqLAorCQkJICAgICAgY29uc3QgRklYRURf VkFMVUVfVFlQRSAqLCBib29sKTsKKworLyogQ29tcGFyZSBmaXhlZC1wb2lu dCB2YWx1ZXMgYnkgdHJlZV9jb2RlLiAgKi8KK2V4dGVybiBib29sIGZpeGVk X2NvbXBhcmUgKGludCwgY29uc3QgRklYRURfVkFMVUVfVFlQRSAqLAorCQkJ ICAgY29uc3QgRklYRURfVkFMVUVfVFlQRSAqKTsKKworLyogRGV0ZXJtaW5l IHdoZXRoZXIgYSBmaXhlZC1wb2ludCB2YWx1ZSBYIGlzIG5lZ2F0aXZlLiAg Ki8KK2V4dGVybiBib29sIGZpeGVkX2lzbmVnIChjb25zdCBGSVhFRF9WQUxV RV9UWVBFICopOworCisjZW5kaWYgLyogR0NDX0ZJWEVEX1ZBTFVFX0ggKi8K SW5kZXg6IGdjYzR4L2djYy9nY2MvZml4ZWQtdmFsdWUuYwo9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09Ci0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDowMDow MC4wMDAwMDAwMDAgKzAwMDAKKysrIGdjYzR4L2djYy9nY2MvZml4ZWQtdmFs dWUuYwkyMDA3LTA4LTAxIDE1OjU1OjM1LjAwMDAwMDAwMCAtMDcwMApAQCAt MCwwICsxLDExNDAgQEAKKy8qIEZpeGVkLXBvaW50IGFyaXRobWV0aWMgc3Vw cG9ydC4KKyAgIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBmaWxlIGlzIHBhcnQgb2Yg R0NDLgorCitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgordGhlIHRlcm1zIG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQg YnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJz aW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCit2ZXJzaW9u LgorCitHQ0MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCitXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJ TElUWSBvcgorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT ZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCitmb3IgbW9yZSBk ZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCBH Q0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKKzxodHRw Oi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpbmNsdWRlICJj b25maWcuaCIKKyNpbmNsdWRlICJzeXN0ZW0uaCIKKyNpbmNsdWRlICJjb3Jl dHlwZXMuaCIKKyNpbmNsdWRlICJ0bS5oIgorI2luY2x1ZGUgInRyZWUuaCIK KyNpbmNsdWRlICJ0b3BsZXYuaCIKKyNpbmNsdWRlICJmaXhlZC12YWx1ZS5o IgorCisvKiBDb21wYXJlIHR3byBmaXhlZCBvYmplY3RzIGZvciBiaXR3aXNl IGlkZW50aXR5LiAgKi8KKworYm9vbAorZml4ZWRfaWRlbnRpY2FsIChjb25z dCBGSVhFRF9WQUxVRV9UWVBFICphLCBjb25zdCBGSVhFRF9WQUxVRV9UWVBF ICpiKQoreworICByZXR1cm4gKGEtPm1vZGUgPT0gYi0+bW9kZQorCSAgJiYg YS0+ZGF0YS5oaWdoID09IGItPmRhdGEuaGlnaAorCSAgJiYgYS0+ZGF0YS5s b3cgPT0gYi0+ZGF0YS5sb3cpOworfQorCisvKiBDYWxjdWxhdGUgYSBoYXNo IHZhbHVlLiAgKi8KKwordW5zaWduZWQgaW50CitmaXhlZF9oYXNoIChjb25z dCBGSVhFRF9WQUxVRV9UWVBFICpmKQoreworICByZXR1cm4gKHVuc2lnbmVk IGludCkgKGYtPmRhdGEubG93IF4gZi0+ZGF0YS5oaWdoKTsKK30KKworLyog RGVmaW5lIHRoZSBlbnVtIGNvZGUgZm9yIHRoZSByYW5nZSBvZiB0aGUgZml4 ZWQtcG9pbnQgdmFsdWUuICAqLworZW51bSBmaXhlZF92YWx1ZV9yYW5nZV9j b2RlIHsKKyAgRklYRURfT0ssCQkvKiBUaGUgdmFsdWUgaXMgd2l0aGluIHRo ZSByYW5nZS4gICovCisgIEZJWEVEX1VOREVSRkxPVywJLyogVGhlIHZhbHVl IGlzIGxlc3MgdGhhbiB0aGUgbWluaW11bS4gICovCisgIEZJWEVEX0dUX01B WF9FUFMsCS8qIFRoZSB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gdGhlIG1heGlt dW0sIGJ1dCBub3QgZXF1YWwKKwkJCSAgIHRvIHRoZSBtYXhpbXVtIHBsdXMg dGhlIGVwc2lsb24uICAqLworICBGSVhFRF9NQVhfRVBTCQkvKiBUaGUgdmFs dWUgZXF1YWxzIHRoZSBtYXhpbXVtIHBsdXMgdGhlIGVwc2lsb24uICAqLwor fTsKKworLyogQ2hlY2sgUkVBTF9WQUxVRSBhZ2FpbnN0IHRoZSByYW5nZSBv ZiB0aGUgZml4ZWQtcG9pbnQgbW9kZS4KKyAgIFJldHVybiBGSVhFRF9PSywg aWYgaXQgaXMgd2l0aGluIHRoZSByYW5nZS4KKyAgICAgICAgICBGSVhFRF9V TkRFUkZMT1csIGlmIGl0IGlzIGxlc3MgdGhhbiB0aGUgbWluaW11bS4KKyAg ICAgICAgICBGSVhFRF9HVF9NQVhfRVBTLCBpZiBpdCBpcyBncmVhdGVyIHRo YW4gdGhlIG1heGltdW0sIGJ1dCBub3QgZXF1YWwgdG8KKwkgICAgdGhlIG1h eGltdW0gcGx1cyB0aGUgZXBzaWxvbi4KKyAgICAgICAgICBGSVhFRF9NQVhf RVBTLCBpZiBpdCBpcyBlcXVhbCB0byB0aGUgbWF4aW11bSBwbHVzIHRoZSBl cHNpbG9uLiAgKi8KKworc3RhdGljIGVudW0gZml4ZWRfdmFsdWVfcmFuZ2Vf Y29kZQorY2hlY2tfcmVhbF9mb3JfZml4ZWRfbW9kZSAoUkVBTF9WQUxVRV9U WVBFICpyZWFsX3ZhbHVlLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlKQorewor ICBSRUFMX1ZBTFVFX1RZUEUgbWF4X3ZhbHVlLCBtaW5fdmFsdWUsIGVwc2ls b25fdmFsdWU7CisKKyAgcmVhbF8yZXhwTiAoJm1heF92YWx1ZSwgR0VUX01P REVfSUJJVCAobW9kZSkpOworICByZWFsXzJleHBOICgmZXBzaWxvbl92YWx1 ZSwgLUdFVF9NT0RFX0ZCSVQgKG1vZGUpKTsKKworICBpZiAoU0lHTkVEX0ZJ WEVEX1BPSU5UX01PREVfUCAobW9kZSkpCisgICAgbWluX3ZhbHVlID0gUkVB TF9WQUxVRV9ORUdBVEUgKG1heF92YWx1ZSk7CisgIGVsc2UKKyAgICByZWFs X2Zyb21fc3RyaW5nICgmbWluX3ZhbHVlLCAiMC4wIik7CisKKyAgaWYgKHJl YWxfY29tcGFyZSAoTFRfRVhQUiwgcmVhbF92YWx1ZSwgJm1pbl92YWx1ZSkp CisgICAgcmV0dXJuIEZJWEVEX1VOREVSRkxPVzsKKyAgaWYgKHJlYWxfY29t cGFyZSAoRVFfRVhQUiwgcmVhbF92YWx1ZSwgJm1heF92YWx1ZSkpCisgICAg cmV0dXJuIEZJWEVEX01BWF9FUFM7CisgIHJlYWxfYXJpdGhtZXRpYyAoJm1h eF92YWx1ZSwgTUlOVVNfRVhQUiwgJm1heF92YWx1ZSwgJmVwc2lsb25fdmFs dWUpOworICBpZiAocmVhbF9jb21wYXJlIChHVF9FWFBSLCByZWFsX3ZhbHVl LCAmbWF4X3ZhbHVlKSkKKyAgICByZXR1cm4gRklYRURfR1RfTUFYX0VQUzsK KyAgcmV0dXJuIEZJWEVEX09LOworfQorCisvKiBJbml0aWFsaXplIGZyb20g YSBkZWNpbWFsIG9yIGhleGFkZWNpbWFsIHN0cmluZy4gICovCisKK3ZvaWQK K2ZpeGVkX2Zyb21fc3RyaW5nIChGSVhFRF9WQUxVRV9UWVBFICpmLCBjb25z dCBjaGFyICpzdHIsIGVudW0gbWFjaGluZV9tb2RlIG1vZGUpCit7CisgIFJF QUxfVkFMVUVfVFlQRSByZWFsX3ZhbHVlLCBmaXhlZF92YWx1ZSwgYmFzZV92 YWx1ZTsKKyAgdW5zaWduZWQgaW50IGZiaXQ7CisgIGVudW0gZml4ZWRfdmFs dWVfcmFuZ2VfY29kZSB0ZW1wOworCisgIGYtPm1vZGUgPSBtb2RlOworICBm Yml0ID0gR0VUX01PREVfRkJJVCAobW9kZSk7CisKKyAgcmVhbF9mcm9tX3N0 cmluZyAoJnJlYWxfdmFsdWUsIHN0cik7CisgIHRlbXAgPSBjaGVja19yZWFs X2Zvcl9maXhlZF9tb2RlICgmcmVhbF92YWx1ZSwgZi0+bW9kZSk7CisgIC8q IFdlIGRvbid0IHdhbnQgdG8gd2FybiB0aGUgY2FzZSB3aGVuIHRoZSBfRnJh Y3QgdmFsdWUgaXMgMS4wLiAgKi8KKyAgaWYgKHRlbXAgPT0gRklYRURfVU5E RVJGTE9XCisgICAgICB8fCB0ZW1wID09IEZJWEVEX0dUX01BWF9FUFMKKyAg ICAgIHx8ICh0ZW1wID09IEZJWEVEX01BWF9FUFMgJiYgQUxMX0FDQ1VNX01P REVfUCAoZi0+bW9kZSkpKQorICAgIHdhcm5pbmcgKE9QVF9Xb3ZlcmZsb3cs CisJICAgICAibGFyZ2UgZml4ZWQtcG9pbnQgY29uc3RhbnQgaW1wbGljaXRs eSB0cnVuY2F0ZWQgdG8gZml4ZWQtcG9pbnQgdHlwZSIpOworICByZWFsXzJl eHBOICgmYmFzZV92YWx1ZSwgZmJpdCk7CisgIHJlYWxfYXJpdGhtZXRpYyAo JmZpeGVkX3ZhbHVlLCBNVUxUX0VYUFIsICZyZWFsX3ZhbHVlLCAmYmFzZV92 YWx1ZSk7CisgIHJlYWxfdG9faW50ZWdlcjIgKChIT1NUX1dJREVfSU5UICop JmYtPmRhdGEubG93LCAmZi0+ZGF0YS5oaWdoLAorCQkgICAgJmZpeGVkX3Zh bHVlKTsKKworICBpZiAodGVtcCA9PSBGSVhFRF9NQVhfRVBTICYmIEFMTF9G UkFDVF9NT0RFX1AgKGYtPm1vZGUpKQorICAgIHsKKyAgICAgIC8qIEZyb20g dGhlIHNwZWMsIHdlIG5lZWQgdG8gZXZhbHVhdGUgMSB0byB0aGUgbWF4aW1h bCB2YWx1ZS4gICovCisgICAgICBmLT5kYXRhLmxvdyA9IC0xOworICAgICAg Zi0+ZGF0YS5oaWdoID0gLTE7CisgICAgICBmLT5kYXRhID0gZG91YmxlX2lu dF9leHQgKGYtPmRhdGEsCisJCQkJR0VUX01PREVfRkJJVCAoZi0+bW9kZSkK KwkJCQkrIEdFVF9NT0RFX0lCSVQgKGYtPm1vZGUpLCAxKTsKKyAgICB9Cisg IGVsc2UKKyAgICBmLT5kYXRhID0gZG91YmxlX2ludF9leHQgKGYtPmRhdGEs CisJCQkgICAgICBTSUdORURfRklYRURfUE9JTlRfTU9ERV9QIChmLT5tb2Rl KQorCQkJICAgICAgKyBHRVRfTU9ERV9GQklUIChmLT5tb2RlKQorCQkJICAg ICAgKyBHRVRfTU9ERV9JQklUIChmLT5tb2RlKSwKKwkJCSAgICAgIFVOU0lH TkVEX0ZJWEVEX1BPSU5UX01PREVfUCAoZi0+bW9kZSkpOworfQorCisvKiBS ZW5kZXIgRiBhcyBhIGRlY2ltYWwgZmxvYXRpbmcgcG9pbnQgY29uc3RhbnQu ICAqLworCit2b2lkCitmaXhlZF90b19kZWNpbWFsIChjaGFyICpzdHIsIGNv bnN0IEZJWEVEX1ZBTFVFX1RZUEUgKmZfb3JpZywKKwkJICBzaXplX3QgYnVm X3NpemUpCit7CisgIFJFQUxfVkFMVUVfVFlQRSByZWFsX3ZhbHVlLCBiYXNl X3ZhbHVlLCBmaXhlZF92YWx1ZTsKKworICByZWFsXzJleHBOICgmYmFzZV92 YWx1ZSwgR0VUX01PREVfRkJJVCAoZl9vcmlnLT5tb2RlKSk7CisgIHJlYWxf ZnJvbV9pbnRlZ2VyICgmcmVhbF92YWx1ZSwgVk9JRG1vZGUsIGZfb3JpZy0+ ZGF0YS5sb3csIGZfb3JpZy0+ZGF0YS5oaWdoLAorCQkgICAgIFVOU0lHTkVE X0ZJWEVEX1BPSU5UX01PREVfUCAoZl9vcmlnLT5tb2RlKSk7CisgIHJlYWxf YXJpdGhtZXRpYyAoJmZpeGVkX3ZhbHVlLCBSRElWX0VYUFIsICZyZWFsX3Zh bHVlLCAmYmFzZV92YWx1ZSk7CisgIHJlYWxfdG9fZGVjaW1hbCAoc3RyLCAm Zml4ZWRfdmFsdWUsIGJ1Zl9zaXplLCAwLCAxKTsKK30KKworLyogSWYgU0FU X1AsIHNhdHVyYXRlIEEgdG8gdGhlIG1heGltdW0gb3IgdGhlIG1pbmltdW0s IGFuZCBzYXZlIHRvICpGIGJhc2VkIG9uCisgICB0aGUgbWFjaGluZSBtb2Rl IE1PREUuCisgICBEbyBub3QgbW9kaWZ5ICpGIG90aGVyd2lzZS4KKyAgIFRo aXMgZnVuY3Rpb24gYXNzdW1lcyB0aGUgd2lkdGggb2YgZG91YmxlX2ludCBp cyBncmVhdGVyIHRoYW4gdGhlIHdpZHRoCisgICBvZiB0aGUgZml4ZWQtcG9p bnQgdmFsdWUgKHRoZSBzdW0gb2YgYSBwb3NzaWJsZSBzaWduIGJpdCwgcG9z c2libGUgaWJpdHMsCisgICBhbmQgZmJpdHMpLgorICAgUmV0dXJuIHRydWUs IGlmICFTQVRfUCBhbmQgb3ZlcmZsb3cuICAqLworCitzdGF0aWMgYm9vbAor Zml4ZWRfc2F0dXJhdGUxIChlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLCBkb3Vi bGVfaW50IGEsIGRvdWJsZV9pbnQgKmYsCisJCSBib29sIHNhdF9wKQorewor ICBib29sIG92ZXJmbG93X3AgPSBmYWxzZTsKKyAgYm9vbCB1bnNpZ25lZF9w ID0gVU5TSUdORURfRklYRURfUE9JTlRfTU9ERV9QIChtb2RlKTsKKyAgaW50 IGlfZl9iaXRzID0gR0VUX01PREVfSUJJVCAobW9kZSkgKyBHRVRfTU9ERV9G QklUIChtb2RlKTsKKworICBpZiAodW5zaWduZWRfcCkgLyogVW5zaWduZWQg dHlwZS4gICovCisgICAgeworICAgICAgZG91YmxlX2ludCBtYXg7CisgICAg ICBtYXgubG93ID0gLTE7CisgICAgICBtYXguaGlnaCA9IC0xOworICAgICAg bWF4ID0gZG91YmxlX2ludF9leHQgKG1heCwgaV9mX2JpdHMsIDEpOworICAg ICAgaWYgKGRvdWJsZV9pbnRfY21wIChhLCBtYXgsIDEpID09IDEpCisJewor CSAgaWYgKHNhdF9wKQorCSAgICAqZiA9IG1heDsKKwkgIGVsc2UKKwkgICAg b3ZlcmZsb3dfcCA9IHRydWU7CisJfQorICAgIH0KKyAgZWxzZSAvKiBTaWdu ZWQgdHlwZS4gICovCisgICAgeworICAgICAgZG91YmxlX2ludCBtYXgsIG1p bjsKKyAgICAgIG1heC5oaWdoID0gLTE7CisgICAgICBtYXgubG93ID0gLTE7 CisgICAgICBtYXggPSBkb3VibGVfaW50X2V4dCAobWF4LCBpX2ZfYml0cywg MSk7CisgICAgICBtaW4uaGlnaCA9IDA7CisgICAgICBtaW4ubG93ID0gMTsK KyAgICAgIGxzaGlmdF9kb3VibGUgKG1pbi5sb3csIG1pbi5oaWdoLCBpX2Zf Yml0cywKKwkJICAgICAyICogSE9TVF9CSVRTX1BFUl9XSURFX0lOVCwKKwkJ ICAgICAmbWluLmxvdywgJm1pbi5oaWdoLCAxKTsKKyAgICAgIG1pbiA9IGRv dWJsZV9pbnRfZXh0IChtaW4sIDEgKyBpX2ZfYml0cywgMCk7CisgICAgICBp ZiAoZG91YmxlX2ludF9jbXAgKGEsIG1heCwgMCkgPT0gMSkKKwl7CisJICBp ZiAoc2F0X3ApCisJICAgICpmID0gbWF4OworCSAgZWxzZQorCSAgICBvdmVy Zmxvd19wID0gdHJ1ZTsKKwl9CisgICAgICBlbHNlIGlmIChkb3VibGVfaW50 X2NtcCAoYSwgbWluLCAwKSA9PSAtMSkKKwl7CisJICBpZiAoc2F0X3ApCisJ ICAgICpmID0gbWluOworCSAgZWxzZQorCSAgICBvdmVyZmxvd19wID0gdHJ1 ZTsKKwl9CisgICAgfQorICByZXR1cm4gb3ZlcmZsb3dfcDsKK30KKworLyog SWYgU0FUX1AsIHNhdHVyYXRlIHtBX0hJR0gsIEFfTE9XfSB0byB0aGUgbWF4 aW11bSBvciB0aGUgbWluaW11bSwgYW5kCisgICBzYXZlIHRvICpGIGJhc2Vk IG9uIHRoZSBtYWNoaW5lIG1vZGUgTU9ERS4KKyAgIERvIG5vdCBtb2RpZnkg KkYgb3RoZXJ3aXNlLgorICAgVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoZSB3 aWR0aCBvZiB0d28gZG91YmxlX2ludCBpcyBncmVhdGVyIHRoYW4gdGhlIHdp ZHRoCisgICBvZiB0aGUgZml4ZWQtcG9pbnQgdmFsdWUgKHRoZSBzdW0gb2Yg YSBwb3NzaWJsZSBzaWduIGJpdCwgcG9zc2libGUgaWJpdHMsCisgICBhbmQg ZmJpdHMpLgorICAgUmV0dXJuIHRydWUsIGlmICFTQVRfUCBhbmQgb3ZlcmZs b3cuICAqLworCitzdGF0aWMgYm9vbAorZml4ZWRfc2F0dXJhdGUyIChlbnVt IG1hY2hpbmVfbW9kZSBtb2RlLCBkb3VibGVfaW50IGFfaGlnaCwgZG91Ymxl X2ludCBhX2xvdywKKwkJIGRvdWJsZV9pbnQgKmYsIGJvb2wgc2F0X3ApCit7 CisgIGJvb2wgb3ZlcmZsb3dfcCA9IGZhbHNlOworICBib29sIHVuc2lnbmVk X3AgPSBVTlNJR05FRF9GSVhFRF9QT0lOVF9NT0RFX1AgKG1vZGUpOworICBp bnQgaV9mX2JpdHMgPSBHRVRfTU9ERV9JQklUIChtb2RlKSArIEdFVF9NT0RF X0ZCSVQgKG1vZGUpOworCisgIGlmICh1bnNpZ25lZF9wKSAvKiBVbnNpZ25l ZCB0eXBlLiAgKi8KKyAgICB7CisgICAgICBkb3VibGVfaW50IG1heF9yLCBt YXhfczsKKyAgICAgIG1heF9yLmhpZ2ggPSAwOworICAgICAgbWF4X3IubG93 ID0gMDsKKyAgICAgIG1heF9zLmhpZ2ggPSAtMTsKKyAgICAgIG1heF9zLmxv dyA9IC0xOworICAgICAgbWF4X3MgPSBkb3VibGVfaW50X2V4dCAobWF4X3Ms IGlfZl9iaXRzLCAxKTsKKyAgICAgIGlmIChkb3VibGVfaW50X2NtcCAoYV9o aWdoLCBtYXhfciwgMSkgPT0gMQorCSAgfHwgKGRvdWJsZV9pbnRfZXF1YWxf cCAoYV9oaWdoLCBtYXhfcikgJiYKKwkgICAgICBkb3VibGVfaW50X2NtcCAo YV9sb3csIG1heF9zLCAxKSA9PSAxKSkKKwl7CisJICBpZiAoc2F0X3ApCisJ ICAgICpmID0gbWF4X3M7CisJICBlbHNlCisJICAgIG92ZXJmbG93X3AgPSB0 cnVlOworCX0KKyAgICB9CisgIGVsc2UgLyogU2lnbmVkIHR5cGUuICAqLwor ICAgIHsKKyAgICAgIGRvdWJsZV9pbnQgbWF4X3IsIG1heF9zLCBtaW5fciwg bWluX3M7CisgICAgICBtYXhfci5oaWdoID0gMDsKKyAgICAgIG1heF9yLmxv dyA9IDA7CisgICAgICBtYXhfcy5oaWdoID0gLTE7CisgICAgICBtYXhfcy5s b3cgPSAtMTsKKyAgICAgIG1heF9zID0gZG91YmxlX2ludF9leHQgKG1heF9z LCBpX2ZfYml0cywgMSk7CisgICAgICBtaW5fci5oaWdoID0gLTE7CisgICAg ICBtaW5fci5sb3cgPSAtMTsKKyAgICAgIG1pbl9zLmhpZ2ggPSAwOworICAg ICAgbWluX3MubG93ID0gMTsKKyAgICAgIGxzaGlmdF9kb3VibGUgKG1pbl9z LmxvdywgbWluX3MuaGlnaCwgaV9mX2JpdHMsCisJCSAgICAgMiAqIEhPU1Rf QklUU19QRVJfV0lERV9JTlQsCisJCSAgICAgJm1pbl9zLmxvdywgJm1pbl9z LmhpZ2gsIDEpOworICAgICAgbWluX3MgPSBkb3VibGVfaW50X2V4dCAobWlu X3MsIDEgKyBpX2ZfYml0cywgMCk7CisgICAgICBpZiAoZG91YmxlX2ludF9j bXAgKGFfaGlnaCwgbWF4X3IsIDApID09IDEKKwkgIHx8IChkb3VibGVfaW50 X2VxdWFsX3AgKGFfaGlnaCwgbWF4X3IpICYmCisJICAgICAgZG91YmxlX2lu dF9jbXAgKGFfbG93LCBtYXhfcywgMSkgPT0gMSkpCisJeworCSAgaWYgKHNh dF9wKQorCSAgICAqZiA9IG1heF9zOworCSAgZWxzZQorCSAgICBvdmVyZmxv d19wID0gdHJ1ZTsKKwl9CisgICAgICBlbHNlIGlmIChkb3VibGVfaW50X2Nt cCAoYV9oaWdoLCBtaW5fciwgMCkgPT0gLTEKKwkgICAgICAgfHwgKGRvdWJs ZV9pbnRfZXF1YWxfcCAoYV9oaWdoLCBtaW5fcikgJiYKKwkJICAgZG91Ymxl X2ludF9jbXAgKGFfbG93LCBtaW5fcywgMSkgPT0gLTEpKQorCXsKKwkgIGlm IChzYXRfcCkKKwkgICAgKmYgPSBtaW5fczsKKwkgIGVsc2UKKwkgICAgb3Zl cmZsb3dfcCA9IHRydWU7CisJfQorICAgIH0KKyAgcmV0dXJuIG92ZXJmbG93 X3A7Cit9CisKKy8qIFJldHVybiB0aGUgc2lnbiBiaXQgYmFzZWQgb24gSV9G X0JJVFMuICAqLworCitzdGF0aWMgaW5saW5lIGludAorZ2V0X2ZpeGVkX3Np Z25fYml0IChkb3VibGVfaW50IGEsIGludCBpX2ZfYml0cykKK3sKKyAgaWYg KGlfZl9iaXRzIDwgSE9TVF9CSVRTX1BFUl9XSURFX0lOVCkKKyAgICByZXR1 cm4gKGEubG93ID4+IGlfZl9iaXRzKSAmIDE7CisgIGVsc2UKKyAgICByZXR1 cm4gKGEuaGlnaCA+PiAoaV9mX2JpdHMgLSBIT1NUX0JJVFNfUEVSX1dJREVf SU5UKSkgJiAxOworfQorCisvKiBDYWxjdWxhdGUgRiA9IEEgKyAoU1VCVFJB Q1RfUCA/IC1CIDogQikuCisgICBJZiBTQVRfUCwgc2F0dXJhdGUgdGhlIHJl c3VsdCB0byB0aGUgbWF4IG9yIHRoZSBtaW4uCisgICBSZXR1cm4gdHJ1ZSwg aWYgIVNBVF9QIGFuZCBvdmVyZmxvdy4gICovCisKK3N0YXRpYyBib29sCitk b19maXhlZF9hZGQgKEZJWEVEX1ZBTFVFX1RZUEUgKmYsIGNvbnN0IEZJWEVE X1ZBTFVFX1RZUEUgKmEsCisJICAgICAgY29uc3QgRklYRURfVkFMVUVfVFlQ RSAqYiwgYm9vbCBzdWJ0cmFjdF9wLCBib29sIHNhdF9wKQoreworICBib29s IG92ZXJmbG93X3AgPSBmYWxzZTsKKyAgZG91YmxlX2ludCB0ZW1wID0gc3Vi dHJhY3RfcCA/IGRvdWJsZV9pbnRfbmVnIChiLT5kYXRhKSA6IGItPmRhdGE7 CisgIGJvb2wgdW5zaWduZWRfcCA9IFVOU0lHTkVEX0ZJWEVEX1BPSU5UX01P REVfUCAoYS0+bW9kZSk7CisgIGludCBpX2ZfYml0cyA9IEdFVF9NT0RFX0lC SVQgKGEtPm1vZGUpICsgR0VUX01PREVfRkJJVCAoYS0+bW9kZSk7CisgIGYt Pm1vZGUgPSBhLT5tb2RlOworICBmLT5kYXRhID0gZG91YmxlX2ludF9hZGQg KGEtPmRhdGEsIHRlbXApOworICBpZiAodW5zaWduZWRfcCkgLyogVW5zaWdu ZWQgdHlwZS4gICovCisgICAgeworICAgICAgaWYgKHN1YnRyYWN0X3ApIC8q IFVuc2lnbmVkIHN1YnRyYWN0aW9uLiAgKi8KKwl7CisJICBpZiAoZG91Ymxl X2ludF9jbXAgKGEtPmRhdGEsIGItPmRhdGEsIDEpID09IC0xKQorCSAgICB7 CisJICAgICAgaWYgKHNhdF9wKQorCQl7CisJCSAgZi0+ZGF0YS5oaWdoID0g MDsKKwkJICBmLT5kYXRhLmxvdyA9IDA7CisJCSB9CisJICAgICAgZWxzZQor CQlvdmVyZmxvd19wID0gdHJ1ZTsKKwkgICAgfQorCX0KKyAgICAgIGVsc2Ug LyogVW5zaWduZWQgYWRkaXRpb24uICAqLworCXsKKwkgIGYtPmRhdGEgPSBk b3VibGVfaW50X2V4dCAoZi0+ZGF0YSwgaV9mX2JpdHMsIDEpOworCSAgaWYg KGRvdWJsZV9pbnRfY21wIChmLT5kYXRhLCBhLT5kYXRhLCAxKSA9PSAtMQor CSAgICAgIHx8IGRvdWJsZV9pbnRfY21wIChmLT5kYXRhLCBiLT5kYXRhLCAx KSA9PSAtMSkKKwkgICAgeworCSAgICAgIGlmIChzYXRfcCkKKwkJeworCQkg IGYtPmRhdGEuaGlnaCA9IC0xOworCQkgIGYtPmRhdGEubG93ID0gLTE7CisJ CX0KKwkgICAgICBlbHNlCisJCW92ZXJmbG93X3AgPSB0cnVlOworCSAgICB9 CisJfQorICAgIH0KKyAgZWxzZSAvKiBTaWduZWQgdHlwZS4gICovCisgICAg eworICAgICAgaWYgKCghc3VidHJhY3RfcAorCSAgICYmIChnZXRfZml4ZWRf c2lnbl9iaXQgKGEtPmRhdGEsIGlfZl9iaXRzKQorCSAgICAgICA9PSBnZXRf Zml4ZWRfc2lnbl9iaXQgKGItPmRhdGEsIGlfZl9iaXRzKSkKKwkgICAmJiAo Z2V0X2ZpeGVkX3NpZ25fYml0IChhLT5kYXRhLCBpX2ZfYml0cykKKwkgICAg ICAgIT0gZ2V0X2ZpeGVkX3NpZ25fYml0IChmLT5kYXRhLCBpX2ZfYml0cykp KQorCSAgfHwgKHN1YnRyYWN0X3AKKwkgICAgICAmJiAoZ2V0X2ZpeGVkX3Np Z25fYml0IChhLT5kYXRhLCBpX2ZfYml0cykKKwkJICAhPSBnZXRfZml4ZWRf c2lnbl9iaXQgKGItPmRhdGEsIGlfZl9iaXRzKSkKKwkgICAgICAmJiAoZ2V0 X2ZpeGVkX3NpZ25fYml0IChhLT5kYXRhLCBpX2ZfYml0cykKKwkJICAhPSBn ZXRfZml4ZWRfc2lnbl9iaXQgKGYtPmRhdGEsIGlfZl9iaXRzKSkpKQorCXsK KwkgIGlmIChzYXRfcCkKKwkgICAgeworCSAgICAgIGYtPmRhdGEubG93ID0g MTsKKwkgICAgICBmLT5kYXRhLmhpZ2ggPSAwOworCSAgICAgIGxzaGlmdF9k b3VibGUgKGYtPmRhdGEubG93LCBmLT5kYXRhLmhpZ2gsIGlfZl9iaXRzLAor CQkJICAgICAyICogSE9TVF9CSVRTX1BFUl9XSURFX0lOVCwKKwkJCSAgICAg JmYtPmRhdGEubG93LCAmZi0+ZGF0YS5oaWdoLCAxKTsKKwkgICAgICBpZiAo Z2V0X2ZpeGVkX3NpZ25fYml0IChhLT5kYXRhLCBpX2ZfYml0cykgPT0gMCkK KwkJeworCQkgIGRvdWJsZV9pbnQgb25lOworCQkgIG9uZS5sb3cgPSAxOwor CQkgIG9uZS5oaWdoID0gMDsKKwkJICBmLT5kYXRhID0gZG91YmxlX2ludF9h ZGQgKGYtPmRhdGEsIGRvdWJsZV9pbnRfbmVnIChvbmUpKTsKKwkJfQorCSAg ICB9CisJICBlbHNlCisJICAgIG92ZXJmbG93X3AgPSB0cnVlOworCX0KKyAg ICB9CisgIGYtPmRhdGEgPSBkb3VibGVfaW50X2V4dCAoZi0+ZGF0YSwgKCF1 bnNpZ25lZF9wKSArIGlfZl9iaXRzLCB1bnNpZ25lZF9wKTsKKyAgcmV0dXJu IG92ZXJmbG93X3A7Cit9CisKKy8qIENhbGN1bGF0ZSBGID0gQSAqIEIuCisg ICBJZiBTQVRfUCwgc2F0dXJhdGUgdGhlIHJlc3VsdCB0byB0aGUgbWF4IG9y IHRoZSBtaW4uCisgICBSZXR1cm4gdHJ1ZSwgaWYgIVNBVF9QIGFuZCBvdmVy Zmxvdy4gICovCisKK3N0YXRpYyBib29sCitkb19maXhlZF9tdWx0aXBseSAo RklYRURfVkFMVUVfVFlQRSAqZiwgY29uc3QgRklYRURfVkFMVUVfVFlQRSAq YSwKKwkJICAgY29uc3QgRklYRURfVkFMVUVfVFlQRSAqYiwgYm9vbCBzYXRf cCkKK3sKKyAgYm9vbCBvdmVyZmxvd19wID0gZmFsc2U7CisgIGJvb2wgdW5z aWduZWRfcCA9IFVOU0lHTkVEX0ZJWEVEX1BPSU5UX01PREVfUCAoYS0+bW9k ZSk7CisgIGludCBpX2ZfYml0cyA9IEdFVF9NT0RFX0lCSVQgKGEtPm1vZGUp ICsgR0VUX01PREVfRkJJVCAoYS0+bW9kZSk7CisgIGYtPm1vZGUgPSBhLT5t b2RlOworICBpZiAoR0VUX01PREVfUFJFQ0lTSU9OIChmLT5tb2RlKSA8PSBI T1NUX0JJVFNfUEVSX1dJREVfSU5UKQorICAgIHsKKyAgICAgIGYtPmRhdGEg PSBkb3VibGVfaW50X211bCAoYS0+ZGF0YSwgYi0+ZGF0YSk7CisgICAgICBs c2hpZnRfZG91YmxlIChmLT5kYXRhLmxvdywgZi0+ZGF0YS5oaWdoLAorCQkg ICAgICgtR0VUX01PREVfRkJJVCAoZi0+bW9kZSkpLAorCQkgICAgIDIgKiBI T1NUX0JJVFNfUEVSX1dJREVfSU5ULAorCQkgICAgICZmLT5kYXRhLmxvdywg JmYtPmRhdGEuaGlnaCwgIXVuc2lnbmVkX3ApOworICAgICAgb3ZlcmZsb3df cCA9IGZpeGVkX3NhdHVyYXRlMSAoZi0+bW9kZSwgZi0+ZGF0YSwgJmYtPmRh dGEsIHNhdF9wKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICAvKiBU aGUgcmVzdWx0IG9mIG11bHRpcGxpY2F0aW9uIGV4cGFuZHMgdG8gdHdvIGRv dWJsZV9pbnQuICAqLworICAgICAgZG91YmxlX2ludCBhX2hpZ2gsIGFfbG93 LCBiX2hpZ2gsIGJfbG93OworICAgICAgZG91YmxlX2ludCBoaWdoX2hpZ2gs IGhpZ2hfbG93LCBsb3dfaGlnaCwgbG93X2xvdzsKKyAgICAgIGRvdWJsZV9p bnQgciwgcywgdGVtcDEsIHRlbXAyOworICAgICAgaW50IGNhcnJ5ID0gMDsK KworICAgICAgLyogRGVjb21wb3NlIGEgYW5kIGIgdG8gZm91ciBkb3VibGVf aW50LiAgKi8KKyAgICAgIGFfaGlnaC5sb3cgPSBhLT5kYXRhLmhpZ2g7Cisg ICAgICBhX2hpZ2guaGlnaCA9IDA7CisgICAgICBhX2xvdy5sb3cgPSBhLT5k YXRhLmxvdzsKKyAgICAgIGFfbG93LmhpZ2ggPSAwOworICAgICAgYl9oaWdo LmxvdyA9IGItPmRhdGEuaGlnaDsKKyAgICAgIGJfaGlnaC5oaWdoID0gMDsK KyAgICAgIGJfbG93LmxvdyA9IGItPmRhdGEubG93OworICAgICAgYl9sb3cu aGlnaCA9IDA7CisKKyAgICAgIC8qIFBlcmZvcm0gZm91ciBtdWx0aXBsaWNh dGlvbnMuICAqLworICAgICAgbG93X2xvdyA9IGRvdWJsZV9pbnRfbXVsIChh X2xvdywgYl9sb3cpOworICAgICAgbG93X2hpZ2ggPSBkb3VibGVfaW50X211 bCAoYV9sb3csIGJfaGlnaCk7CisgICAgICBoaWdoX2xvdyA9IGRvdWJsZV9p bnRfbXVsIChhX2hpZ2gsIGJfbG93KTsKKyAgICAgIGhpZ2hfaGlnaCA9IGRv dWJsZV9pbnRfbXVsIChhX2hpZ2gsIGJfaGlnaCk7CisKKyAgICAgIC8qIEFj Y3VtdWxhdGUgZm91ciByZXN1bHRzIHRvIHtyLCBzfS4gICovCisgICAgICB0 ZW1wMS5oaWdoID0gaGlnaF9sb3cubG93OworICAgICAgdGVtcDEubG93ID0g MDsKKyAgICAgIHMgPSBkb3VibGVfaW50X2FkZCAobG93X2xvdywgdGVtcDEp OworICAgICAgaWYgKGRvdWJsZV9pbnRfY21wIChzLCBsb3dfbG93LCAxKSA9 PSAtMQorCSAgfHwgZG91YmxlX2ludF9jbXAgKHMsIHRlbXAxLCAxKSA9PSAt MSkKKwljYXJyeSArKzsgLyogQ2FycnkgKi8KKyAgICAgIHRlbXAxLmhpZ2gg PSBzLmhpZ2g7CisgICAgICB0ZW1wMS5sb3cgPSBzLmxvdzsKKyAgICAgIHRl bXAyLmhpZ2ggPSBsb3dfaGlnaC5sb3c7CisgICAgICB0ZW1wMi5sb3cgPSAw OworICAgICAgcyA9IGRvdWJsZV9pbnRfYWRkICh0ZW1wMSwgdGVtcDIpOwor ICAgICAgaWYgKGRvdWJsZV9pbnRfY21wIChzLCB0ZW1wMSwgMSkgPT0gLTEK KwkgIHx8IGRvdWJsZV9pbnRfY21wIChzLCB0ZW1wMiwgMSkgPT0gLTEpCisJ Y2FycnkgKys7IC8qIENhcnJ5ICovCisKKyAgICAgIHRlbXAxLmxvdyA9IGhp Z2hfbG93LmhpZ2g7CisgICAgICB0ZW1wMS5oaWdoID0gMDsKKyAgICAgIHIg PSBkb3VibGVfaW50X2FkZCAoaGlnaF9oaWdoLCB0ZW1wMSk7CisgICAgICB0 ZW1wMS5sb3cgPSBsb3dfaGlnaC5oaWdoOworICAgICAgdGVtcDEuaGlnaCA9 IDA7CisgICAgICByID0gZG91YmxlX2ludF9hZGQgKHIsIHRlbXAxKTsKKyAg ICAgIHRlbXAxLmxvdyA9IGNhcnJ5OworICAgICAgdGVtcDEuaGlnaCA9IDA7 CisgICAgICByID0gZG91YmxlX2ludF9hZGQgKHIsIHRlbXAxKTsKKworICAg ICAgLyogV2UgbmVlZCB0byBhZGQgbmVnKGIpIHRvIHIsIGlmIGEgPCAwLiAg Ki8KKyAgICAgIGlmICghdW5zaWduZWRfcCAmJiBhLT5kYXRhLmhpZ2ggPCAw KQorCXIgPSBkb3VibGVfaW50X2FkZCAociwgZG91YmxlX2ludF9uZWcgKGIt PmRhdGEpKTsKKyAgICAgIC8qIFdlIG5lZWQgdG8gYWRkIG5lZyhhKSB0byBy LCBpZiBiIDwgMC4gICovCisgICAgICBpZiAoIXVuc2lnbmVkX3AgJiYgYi0+ ZGF0YS5oaWdoIDwgMCkKKwlyID0gZG91YmxlX2ludF9hZGQgKHIsIGRvdWJs ZV9pbnRfbmVnIChhLT5kYXRhKSk7CisKKyAgICAgIC8qIFNoaWZ0IHJpZ2h0 IHRoZSByZXN1bHQgYnkgRkJJVC4gICovCisgICAgICBpZiAoR0VUX01PREVf RkJJVCAoZi0+bW9kZSkgPT0gMiAqIEhPU1RfQklUU19QRVJfV0lERV9JTlQp CisJeworCSAgcy5sb3cgPSByLmxvdzsKKwkgIHMuaGlnaCA9IHIuaGlnaDsK KwkgIGlmICh1bnNpZ25lZF9wKQorCSAgICB7CisJICAgICAgci5sb3cgPSAw OworCSAgICAgIHIuaGlnaCA9IDA7CisJICAgIH0KKwkgIGVsc2UKKwkgICAg eworCSAgICAgIHIubG93ID0gLTE7CisJICAgICAgci5oaWdoID0gLTE7CisJ ICAgIH0KKwkgIGYtPmRhdGEubG93ID0gcy5sb3c7CisJICBmLT5kYXRhLmhp Z2ggPSBzLmhpZ2g7CisJfQorICAgICAgZWxzZQorCXsKKwkgIGxzaGlmdF9k b3VibGUgKHMubG93LCBzLmhpZ2gsCisJCQkgKC1HRVRfTU9ERV9GQklUIChm LT5tb2RlKSksCisJCQkgMiAqIEhPU1RfQklUU19QRVJfV0lERV9JTlQsCisJ CQkgJnMubG93LCAmcy5oaWdoLCAwKTsKKwkgIGxzaGlmdF9kb3VibGUgKHIu bG93LCByLmhpZ2gsCisJCQkgKDIgKiBIT1NUX0JJVFNfUEVSX1dJREVfSU5U CisJCQkgIC0gR0VUX01PREVfRkJJVCAoZi0+bW9kZSkpLAorCQkJIDIgKiBI T1NUX0JJVFNfUEVSX1dJREVfSU5ULAorCQkJICZmLT5kYXRhLmxvdywgJmYt PmRhdGEuaGlnaCwgMCk7CisJICBmLT5kYXRhLmxvdyA9IGYtPmRhdGEubG93 IHwgcy5sb3c7CisJICBmLT5kYXRhLmhpZ2ggPSBmLT5kYXRhLmhpZ2ggfCBz LmhpZ2g7CisJICBzLmxvdyA9IGYtPmRhdGEubG93OworCSAgcy5oaWdoID0g Zi0+ZGF0YS5oaWdoOworCSAgbHNoaWZ0X2RvdWJsZSAoci5sb3csIHIuaGln aCwKKwkJCSAoLUdFVF9NT0RFX0ZCSVQgKGYtPm1vZGUpKSwKKwkJCSAyICog SE9TVF9CSVRTX1BFUl9XSURFX0lOVCwKKwkJCSAmci5sb3csICZyLmhpZ2gs ICF1bnNpZ25lZF9wKTsKKwl9CisKKyAgICAgIG92ZXJmbG93X3AgPSBmaXhl ZF9zYXR1cmF0ZTIgKGYtPm1vZGUsIHIsIHMsICZmLT5kYXRhLCBzYXRfcCk7 CisgICAgfQorCisgIGYtPmRhdGEgPSBkb3VibGVfaW50X2V4dCAoZi0+ZGF0 YSwgKCF1bnNpZ25lZF9wKSArIGlfZl9iaXRzLCB1bnNpZ25lZF9wKTsKKyAg cmV0dXJuIG92ZXJmbG93X3A7Cit9CisKKy8qIENhbGN1bGF0ZSBGID0gQSAv IEIuCisgICBJZiBTQVRfUCwgc2F0dXJhdGUgdGhlIHJlc3VsdCB0byB0aGUg bWF4IG9yIHRoZSBtaW4uCisgICBSZXR1cm4gdHJ1ZSwgaWYgIVNBVF9QIGFu ZCBvdmVyZmxvdy4gICovCisKK3N0YXRpYyBib29sCitkb19maXhlZF9kaXZp ZGUgKEZJWEVEX1ZBTFVFX1RZUEUgKmYsIGNvbnN0IEZJWEVEX1ZBTFVFX1RZ UEUgKmEsCisJCSBjb25zdCBGSVhFRF9WQUxVRV9UWVBFICpiLCBib29sIHNh dF9wKQoreworICBib29sIG92ZXJmbG93X3AgPSBmYWxzZTsKKyAgYm9vbCB1 bnNpZ25lZF9wID0gVU5TSUdORURfRklYRURfUE9JTlRfTU9ERV9QIChhLT5t b2RlKTsKKyAgaW50IGlfZl9iaXRzID0gR0VUX01PREVfSUJJVCAoYS0+bW9k ZSkgKyBHRVRfTU9ERV9GQklUIChhLT5tb2RlKTsKKyAgZi0+bW9kZSA9IGEt Pm1vZGU7CisgIGlmIChHRVRfTU9ERV9QUkVDSVNJT04gKGYtPm1vZGUpIDw9 IEhPU1RfQklUU19QRVJfV0lERV9JTlQpCisgICAgeworICAgICAgbHNoaWZ0 X2RvdWJsZSAoYS0+ZGF0YS5sb3csIGEtPmRhdGEuaGlnaCwKKwkJICAgICBH RVRfTU9ERV9GQklUIChmLT5tb2RlKSwKKwkJICAgICAyICogSE9TVF9CSVRT X1BFUl9XSURFX0lOVCwKKwkJICAgICAmZi0+ZGF0YS5sb3csICZmLT5kYXRh LmhpZ2gsICF1bnNpZ25lZF9wKTsKKyAgICAgIGYtPmRhdGEgPSBkb3VibGVf aW50X2RpdiAoZi0+ZGF0YSwgYi0+ZGF0YSwgdW5zaWduZWRfcCwgVFJVTkNf RElWX0VYUFIpOworICAgICAgb3ZlcmZsb3dfcCA9IGZpeGVkX3NhdHVyYXRl MSAoZi0+bW9kZSwgZi0+ZGF0YSwgJmYtPmRhdGEsIHNhdF9wKTsKKyAgICB9 CisgIGVsc2UKKyAgICB7CisgICAgICBkb3VibGVfaW50IHBvc19hLCBwb3Nf YiwgciwgczsKKyAgICAgIGRvdWJsZV9pbnQgcXVvX3IsIHF1b19zLCBtb2Qs IHRlbXA7CisgICAgICBpbnQgbnVtX29mX25lZyA9IDA7CisgICAgICBpbnQg aTsKKworICAgICAgLyogSWYgYSA8IDAsIG5lZ2F0ZSBhLiAgKi8KKyAgICAg IGlmICghdW5zaWduZWRfcCAmJiBhLT5kYXRhLmhpZ2ggPCAwKQorCXsKKwkg IHBvc19hID0gZG91YmxlX2ludF9uZWcgKGEtPmRhdGEpOworCSAgbnVtX29m X25lZyArKzsKKwl9CisgICAgICBlbHNlCisJcG9zX2EgPSBhLT5kYXRhOwor CisgICAgICAvKiBJZiBiIDwgMCwgbmVnYXRlIGIuICAqLworICAgICAgaWYg KCF1bnNpZ25lZF9wICYmIGItPmRhdGEuaGlnaCA8IDApCisJeworCSAgcG9z X2IgPSBkb3VibGVfaW50X25lZyAoYi0+ZGF0YSk7CisJICBudW1fb2ZfbmVn ICsrOworCX0KKyAgICAgIGVsc2UKKwlwb3NfYiA9IGItPmRhdGE7CisKKyAg ICAgIC8qIExlZnQgc2hpZnQgcG9zX2EgdG8ge3IsIHN9IGJ5IEZCSVQuICAq LworICAgICAgaWYgKEdFVF9NT0RFX0ZCSVQgKGYtPm1vZGUpID09IDIgKiBI T1NUX0JJVFNfUEVSX1dJREVfSU5UKQorCXsKKwkgIHIgPSBwb3NfYTsKKwkg IHMuaGlnaCA9IDA7CisJICBzLmxvdyA9IDA7CisJfQorICAgICAgZWxzZQor IAl7CisJICBsc2hpZnRfZG91YmxlIChwb3NfYS5sb3csIHBvc19hLmhpZ2gs CisJCQkgR0VUX01PREVfRkJJVCAoZi0+bW9kZSksCisJCQkgMiAqIEhPU1Rf QklUU19QRVJfV0lERV9JTlQsCisJCQkgJnMubG93LCAmcy5oaWdoLCAwKTsK KwkgIGxzaGlmdF9kb3VibGUgKHBvc19hLmxvdywgcG9zX2EuaGlnaCwKKwkJ CSAtICgyICogSE9TVF9CSVRTX1BFUl9XSURFX0lOVAorCQkJICAgIC0gR0VU X01PREVfRkJJVCAoZi0+bW9kZSkpLAorCQkJIDIgKiBIT1NUX0JJVFNfUEVS X1dJREVfSU5ULAorCQkJICZyLmxvdywgJnIuaGlnaCwgMCk7CisgCX0KKwor ICAgICAgLyogRGl2aWRlIHIgYnkgcG9zX2IgdG8gcXVvX3IuICBUaGUgcmVt YW5pZGVyIGlzIGluIG1vZC4gICovCisgICAgICBkaXZfYW5kX3JvdW5kX2Rv dWJsZSAoVFJVTkNfRElWX0VYUFIsIDEsIHIubG93LCByLmhpZ2gsIHBvc19i LmxvdywKKwkJCSAgICBwb3NfYi5oaWdoLCAmcXVvX3IubG93LCAmcXVvX3Iu aGlnaCwgJm1vZC5sb3csCisJCQkgICAgJm1vZC5oaWdoKTsKKworICAgICAg cXVvX3MuaGlnaCA9IDA7CisgICAgICBxdW9fcy5sb3cgPSAwOworCisgICAg ICBmb3IgKGkgPSAwOyBpIDwgMiAqIEhPU1RfQklUU19QRVJfV0lERV9JTlQ7 IGkrKykKKwl7CisJICAvKiBSZWNvcmQgdGhlIGxlZnRtb3N0IGJpdCBvZiBt b2QuICAqLworCSAgaW50IGxlZnRtb3N0X21vZCA9IChtb2QuaGlnaCA8IDAp OworCisJICAvKiBTaGlmdCBsZWZ0IG1vZCBieSAxIGJpdC4gICovCisJICBs c2hpZnRfZG91YmxlIChtb2QubG93LCBtb2QuaGlnaCwgMSwgMiAqIEhPU1Rf QklUU19QRVJfV0lERV9JTlQsCisJCQkgJm1vZC5sb3csICZtb2QuaGlnaCwg MCk7CisKKwkgIC8qIFRlc3QgdGhlIGxlZnRtb3N0IGJpdCBvZiBzIHRvIGFk ZCB0byBtb2QuICAqLworCSAgaWYgKHMuaGlnaCA8IDApCisJICAgIG1vZC5s b3cgKz0gMTsKKworCSAgLyogU2hpZnQgbGVmdCBxdW9fcyBieSAxIGJpdC4g ICovCisJICBsc2hpZnRfZG91YmxlIChxdW9fcy5sb3csIHF1b19zLmhpZ2gs IDEsIDIgKiBIT1NUX0JJVFNfUEVSX1dJREVfSU5ULAorCQkJICZxdW9fcy5s b3csICZxdW9fcy5oaWdoLCAwKTsKKworCSAgLyogVHJ5IHRvIGNhbGN1bGF0 ZSAobW9kIC0gcG9zX2IpLiAgKi8KKwkgIHRlbXAgPSBkb3VibGVfaW50X2Fk ZCAobW9kLCBkb3VibGVfaW50X25lZyAocG9zX2IpKTsKKworCSAgaWYgKGxl ZnRtb3N0X21vZCA9PSAxIHx8IGRvdWJsZV9pbnRfY21wIChtb2QsIHBvc19i LCAxKSAhPSAtMSkKKwkgICAgeworCSAgICAgIHF1b19zLmxvdyArPSAxOwor CSAgICAgIG1vZCA9IHRlbXA7CisJICAgIH0KKworCSAgLyogU2hpZnQgbGVm dCBzIGJ5IDEgYml0LiAgKi8KKwkgIGxzaGlmdF9kb3VibGUgKHMubG93LCBz LmhpZ2gsIDEsIDIgKiBIT1NUX0JJVFNfUEVSX1dJREVfSU5ULAorCQkJICZz LmxvdywgJnMuaGlnaCwgMCk7CisKKwl9CisKKyAgICAgIGlmIChudW1fb2Zf bmVnID09IDEpCisJeworCSAgcXVvX3MgPSBkb3VibGVfaW50X25lZyAocXVv X3MpOworCSAgaWYgKHF1b19zLmhpZ2ggPT0gMCAmJiBxdW9fcy5sb3cgPT0g MCkKKwkgICAgcXVvX3IgPSBkb3VibGVfaW50X25lZyAocXVvX3IpOworCSAg ZWxzZQorCSAgICB7CisJICAgICAgcXVvX3IubG93ID0gfnF1b19yLmxvdzsK KwkgICAgICBxdW9fci5oaWdoID0gfnF1b19yLmhpZ2g7CisJICAgIH0KKwl9 CisKKyAgICAgIGYtPmRhdGEgPSBxdW9fczsKKyAgICAgIG92ZXJmbG93X3Ag PSBmaXhlZF9zYXR1cmF0ZTIgKGYtPm1vZGUsIHF1b19yLCBxdW9fcywgJmYt PmRhdGEsIHNhdF9wKTsKKyAgICB9CisKKyAgZi0+ZGF0YSA9IGRvdWJsZV9p bnRfZXh0IChmLT5kYXRhLCAoIXVuc2lnbmVkX3ApICsgaV9mX2JpdHMsIHVu c2lnbmVkX3ApOworICByZXR1cm4gb3ZlcmZsb3dfcDsKK30KKworLyogQ2Fs Y3VsYXRlIEYgPSBBIDw8IEIgaWYgTEVGVF9QLiAgT3RoZXJ3aWVzLCBGID0g QSA+PiBCLgorICAgSWYgU0FUX1AsIHNhdHVyYXRlIHRoZSByZXN1bHQgdG8g dGhlIG1heCBvciB0aGUgbWluLgorICAgUmV0dXJuIHRydWUsIGlmICFTQVRf UCBhbmQgb3ZlcmZsb3cuICAqLworCitzdGF0aWMgYm9vbAorZG9fZml4ZWRf c2hpZnQgKEZJWEVEX1ZBTFVFX1RZUEUgKmYsIGNvbnN0IEZJWEVEX1ZBTFVF X1RZUEUgKmEsCisJICAgICAgY29uc3QgRklYRURfVkFMVUVfVFlQRSAqYiwg Ym9vbCBsZWZ0X3AsIGJvb2wgc2F0X3ApCit7CisgIGJvb2wgb3ZlcmZsb3df cCA9IGZhbHNlOworICBib29sIHVuc2lnbmVkX3AgPSBVTlNJR05FRF9GSVhF RF9QT0lOVF9NT0RFX1AgKGEtPm1vZGUpOworICBpbnQgaV9mX2JpdHMgPSBH RVRfTU9ERV9JQklUIChhLT5tb2RlKSArIEdFVF9NT0RFX0ZCSVQgKGEtPm1v ZGUpOworICBmLT5tb2RlID0gYS0+bW9kZTsKKworICBpZiAoYi0+ZGF0YS5s b3cgPT0gMCkKKyAgICB7CisgICAgICBmLT5kYXRhID0gYS0+ZGF0YTsKKyAg ICAgIHJldHVybiBvdmVyZmxvd19wOworICAgIH0KKworICBpZiAoR0VUX01P REVfUFJFQ0lTSU9OIChmLT5tb2RlKSA8PSBIT1NUX0JJVFNfUEVSX1dJREVf SU5UIHx8ICghbGVmdF9wKSkKKyAgICB7CisgICAgICBsc2hpZnRfZG91Ymxl IChhLT5kYXRhLmxvdywgYS0+ZGF0YS5oaWdoLAorCQkgICAgIGxlZnRfcCA/ IGItPmRhdGEubG93IDogKC1iLT5kYXRhLmxvdyksCisJCSAgICAgMiAqIEhP U1RfQklUU19QRVJfV0lERV9JTlQsCisJCSAgICAgJmYtPmRhdGEubG93LCAm Zi0+ZGF0YS5oaWdoLCAhdW5zaWduZWRfcCk7CisgICAgICBpZiAobGVmdF9w KSAvKiBPbmx5IGxlZnQgc2hpZnQgc2F0dXJhdGVzLiAgKi8KKwlvdmVyZmxv d19wID0gZml4ZWRfc2F0dXJhdGUxIChmLT5tb2RlLCBmLT5kYXRhLCAmZi0+ ZGF0YSwgc2F0X3ApOworICAgIH0KKyAgZWxzZSAvKiBXZSBuZWVkIHR3byBk b3VibGVfaW50IHRvIHN0b3JlIHRoZSBsZWZ0LXNoaWZ0IHJlc3VsdC4gICov CisgICAgeworICAgICAgZG91YmxlX2ludCB0ZW1wX2hpZ2gsIHRlbXBfbG93 OworICAgICAgaWYgKGItPmRhdGEubG93ID09IDIgKiBIT1NUX0JJVFNfUEVS X1dJREVfSU5UKQorCXsKKwkgIHRlbXBfaGlnaCA9IGEtPmRhdGE7CisJICB0 ZW1wX2xvdy5oaWdoID0gMDsKKwkgIHRlbXBfbG93LmxvdyA9IDA7CisJfQor ICAgICAgZWxzZQorCXsKKwkgIGxzaGlmdF9kb3VibGUgKGEtPmRhdGEubG93 LCBhLT5kYXRhLmhpZ2gsCisJCQkgYi0+ZGF0YS5sb3csCisJCQkgMiAqIEhP U1RfQklUU19QRVJfV0lERV9JTlQsCisJCQkgJnRlbXBfbG93LmxvdywgJnRl bXBfbG93LmhpZ2gsICF1bnNpZ25lZF9wKTsKKwkgIC8qIExvZ2ljYWwgc2hp ZnQgcmlnaHQgdG8gdGVtcF9oaWdoLiAgKi8KKwkgIGxzaGlmdF9kb3VibGUg KGEtPmRhdGEubG93LCBhLT5kYXRhLmhpZ2gsCisJCQkgYi0+ZGF0YS5sb3cg LSAyICogSE9TVF9CSVRTX1BFUl9XSURFX0lOVCwKKwkJCSAyICogSE9TVF9C SVRTX1BFUl9XSURFX0lOVCwKKwkJCSAmdGVtcF9oaWdoLmxvdywgJnRlbXBf aGlnaC5oaWdoLCAwKTsKKwl9CisgICAgICBpZiAoIXVuc2lnbmVkX3AgJiYg YS0+ZGF0YS5oaWdoIDwgMCkgLyogU2lnbmVkLWV4dGVuZCB0ZW1wX2hpZ2gu ICAqLworCXRlbXBfaGlnaCA9IGRvdWJsZV9pbnRfZXh0ICh0ZW1wX2hpZ2gs IGItPmRhdGEubG93LCB1bnNpZ25lZF9wKTsKKyAgICAgIGYtPmRhdGEgPSB0 ZW1wX2xvdzsKKyAgICAgIG92ZXJmbG93X3AgPSBmaXhlZF9zYXR1cmF0ZTIg KGYtPm1vZGUsIHRlbXBfaGlnaCwgdGVtcF9sb3csICZmLT5kYXRhLAorCQkJ CSAgICBzYXRfcCk7CisgICAgfQorICBmLT5kYXRhID0gZG91YmxlX2ludF9l eHQgKGYtPmRhdGEsICghdW5zaWduZWRfcCkgKyBpX2ZfYml0cywgdW5zaWdu ZWRfcCk7CisgIHJldHVybiBvdmVyZmxvd19wOworfQorCisvKiBDYWxjdWxh dGUgRiA9IC1BLgorICAgSWYgU0FUX1AsIHNhdHVyYXRlIHRoZSByZXN1bHQg dG8gdGhlIG1heCBvciB0aGUgbWluLgorICAgUmV0dXJuIHRydWUsIGlmICFT QVRfUCBhbmQgb3ZlcmZsb3cuICAqLworCitzdGF0aWMgYm9vbAorZG9fZml4 ZWRfbmVnIChGSVhFRF9WQUxVRV9UWVBFICpmLCBjb25zdCBGSVhFRF9WQUxV RV9UWVBFICphLCBib29sIHNhdF9wKQoreworICBib29sIG92ZXJmbG93X3Ag PSBmYWxzZTsKKyAgYm9vbCB1bnNpZ25lZF9wID0gVU5TSUdORURfRklYRURf UE9JTlRfTU9ERV9QIChhLT5tb2RlKTsKKyAgaW50IGlfZl9iaXRzID0gR0VU X01PREVfSUJJVCAoYS0+bW9kZSkgKyBHRVRfTU9ERV9GQklUIChhLT5tb2Rl KTsKKyAgZi0+bW9kZSA9IGEtPm1vZGU7CisgIGYtPmRhdGEgPSBkb3VibGVf aW50X25lZyAoYS0+ZGF0YSk7CisgIGYtPmRhdGEgPSBkb3VibGVfaW50X2V4 dCAoZi0+ZGF0YSwgKCF1bnNpZ25lZF9wKSArIGlfZl9iaXRzLCB1bnNpZ25l ZF9wKTsKKworICBpZiAodW5zaWduZWRfcCkgLyogVW5zaWduZWQgdHlwZS4g ICovCisgICAgeworICAgICAgaWYgKGYtPmRhdGEubG93ICE9IDAgfHwgZi0+ ZGF0YS5oaWdoICE9IDApCisJeworCSAgaWYgKHNhdF9wKQorCSAgICB7CisJ ICAgICAgZi0+ZGF0YS5sb3cgPSAwOworCSAgICAgIGYtPmRhdGEuaGlnaCA9 IDA7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgb3ZlcmZsb3dfcCA9IHRydWU7 CisJfQorICAgIH0KKyAgZWxzZSAvKiBTaWduZWQgdHlwZS4gICovCisgICAg eworICAgICAgaWYgKCEoZi0+ZGF0YS5oaWdoID09IDAgJiYgZi0+ZGF0YS5s b3cgPT0gMCkKKwkgICYmIGYtPmRhdGEuaGlnaCA9PSBhLT5kYXRhLmhpZ2gg JiYgZi0+ZGF0YS5sb3cgPT0gYS0+ZGF0YS5sb3cgKQorCXsKKwkgIGlmIChz YXRfcCkKKwkgICAgeworCSAgICAgIC8qIFNhdHVyYXRlIHRvIHRoZSBtYXhp bXVtIGJ5IHN1YnRyYWN0aW5nIGYtPmRhdGEgYnkgb25lLiAgKi8KKwkgICAg ICBmLT5kYXRhLmxvdyA9IC0xOworCSAgICAgIGYtPmRhdGEuaGlnaCA9IC0x OworCSAgICAgIGYtPmRhdGEgPSBkb3VibGVfaW50X2V4dCAoZi0+ZGF0YSwg aV9mX2JpdHMsIDEpOworCSAgICB9CisJICBlbHNlCisJICAgIG92ZXJmbG93 X3AgPSB0cnVlOworCX0KKyAgICB9CisgIHJldHVybiBvdmVyZmxvd19wOwor fQorCisvKiBQZXJmb3JtIHRoZSBiaW5hcnkgb3IgdW5hcnkgb3BlcmF0aW9u IGRlc2NyaWJlZCBieSBDT0RFLgorICAgTm90ZSB0aGF0IE9QMCBhbmQgT1Ax IG11c3QgaGF2ZSB0aGUgc2FtZSBtb2RlIGZvciBiaW5hcnkgb3BlcmF0b3Jz LgorICAgRm9yIGEgdW5hcnkgb3BlcmF0aW9uLCBsZWF2ZSBPUDEgTlVMTC4K KyAgIFJldHVybiB0cnVlLCBpZiAhU0FUX1AgYW5kIG92ZXJmbG93LiAgKi8K KworYm9vbAorZml4ZWRfYXJpdGhtZXRpYyAoRklYRURfVkFMVUVfVFlQRSAq ZiwgaW50IGljb2RlLCBjb25zdCBGSVhFRF9WQUxVRV9UWVBFICpvcDAsCisJ CSAgY29uc3QgRklYRURfVkFMVUVfVFlQRSAqb3AxLCBib29sIHNhdF9wKQor eworICBzd2l0Y2ggKGljb2RlKQorICAgIHsKKyAgICBjYXNlIE5FR0FURV9F WFBSOgorICAgICAgcmV0dXJuIGRvX2ZpeGVkX25lZyAoZiwgb3AwLCBzYXRf cCk7CisgICAgICBicmVhazsKKworICAgIGNhc2UgUExVU19FWFBSOgorICAg ICAgZ2NjX2Fzc2VydCAob3AwLT5tb2RlID09IG9wMS0+bW9kZSk7CisgICAg ICByZXR1cm4gZG9fZml4ZWRfYWRkIChmLCBvcDAsIG9wMSwgZmFsc2UsIHNh dF9wKTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBNSU5VU19FWFBSOgor ICAgICAgZ2NjX2Fzc2VydCAob3AwLT5tb2RlID09IG9wMS0+bW9kZSk7Cisg ICAgICByZXR1cm4gZG9fZml4ZWRfYWRkIChmLCBvcDAsIG9wMSwgdHJ1ZSwg c2F0X3ApOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1VTFRfRVhQUjoK KyAgICAgIGdjY19hc3NlcnQgKG9wMC0+bW9kZSA9PSBvcDEtPm1vZGUpOwor ICAgICAgcmV0dXJuIGRvX2ZpeGVkX211bHRpcGx5IChmLCBvcDAsIG9wMSwg c2F0X3ApOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFRSVU5DX0RJVl9F WFBSOgorICAgICAgZ2NjX2Fzc2VydCAob3AwLT5tb2RlID09IG9wMS0+bW9k ZSk7CisgICAgICByZXR1cm4gZG9fZml4ZWRfZGl2aWRlIChmLCBvcDAsIG9w MSwgc2F0X3ApOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIExTSElGVF9F WFBSOgorICAgICAgcmV0dXJuIGRvX2ZpeGVkX3NoaWZ0IChmLCBvcDAsIG9w MSwgdHJ1ZSwgc2F0X3ApOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFJT SElGVF9FWFBSOgorICAgICAgcmV0dXJuIGRvX2ZpeGVkX3NoaWZ0IChmLCBv cDAsIG9wMSwgZmFsc2UsIHNhdF9wKTsKKyAgICAgIGJyZWFrOworCisgICAg ZGVmYXVsdDoKKyAgICAgIGdjY191bnJlYWNoYWJsZSAoKTsKKyAgICB9Cisg IHJldHVybiBmYWxzZTsKK30KKworLyogQ29tcGFyZSBmaXhlZC1wb2ludCB2 YWx1ZXMgYnkgdHJlZV9jb2RlLgorICAgTm90ZSB0aGF0IE9QMCBhbmQgT1Ax IG11c3QgaGF2ZSB0aGUgc2FtZSBtb2RlLiAgKi8KKworYm9vbAorZml4ZWRf Y29tcGFyZSAoaW50IGljb2RlLCBjb25zdCBGSVhFRF9WQUxVRV9UWVBFICpv cDAsCisJICAgICAgIGNvbnN0IEZJWEVEX1ZBTFVFX1RZUEUgKm9wMSkKK3sK KyAgZW51bSB0cmVlX2NvZGUgY29kZSA9IGljb2RlOworICBnY2NfYXNzZXJ0 IChvcDAtPm1vZGUgPT0gb3AxLT5tb2RlKTsKKworICBzd2l0Y2ggKGNvZGUp CisgICAgeworICAgIGNhc2UgTkVfRVhQUjoKKyAgICAgIHJldHVybiAhZG91 YmxlX2ludF9lcXVhbF9wIChvcDAtPmRhdGEsIG9wMS0+ZGF0YSk7CisKKyAg ICBjYXNlIEVRX0VYUFI6CisgICAgICByZXR1cm4gZG91YmxlX2ludF9lcXVh bF9wIChvcDAtPmRhdGEsIG9wMS0+ZGF0YSk7CisKKyAgICBjYXNlIExUX0VY UFI6CisgICAgICByZXR1cm4gZG91YmxlX2ludF9jbXAgKG9wMC0+ZGF0YSwg b3AxLT5kYXRhLAorCQkJICAgICBVTlNJR05FRF9GSVhFRF9QT0lOVF9NT0RF X1AgKG9wMC0+bW9kZSkpID09IC0xOworCisgICAgY2FzZSBMRV9FWFBSOgor ICAgICAgcmV0dXJuIGRvdWJsZV9pbnRfY21wIChvcDAtPmRhdGEsIG9wMS0+ ZGF0YSwKKwkJCSAgICAgVU5TSUdORURfRklYRURfUE9JTlRfTU9ERV9QIChv cDAtPm1vZGUpKSAhPSAxOworCisgICAgY2FzZSBHVF9FWFBSOgorICAgICAg cmV0dXJuIGRvdWJsZV9pbnRfY21wIChvcDAtPmRhdGEsIG9wMS0+ZGF0YSwK KwkJCSAgICAgVU5TSUdORURfRklYRURfUE9JTlRfTU9ERV9QIChvcDAtPm1v ZGUpKSA9PSAxOworCisgICAgY2FzZSBHRV9FWFBSOgorICAgICAgcmV0dXJu IGRvdWJsZV9pbnRfY21wIChvcDAtPmRhdGEsIG9wMS0+ZGF0YSwKKwkJCSAg ICAgVU5TSUdORURfRklYRURfUE9JTlRfTU9ERV9QIChvcDAtPm1vZGUpKSAh PSAtMTsKKworICAgIGRlZmF1bHQ6CisgICAgICBnY2NfdW5yZWFjaGFibGUg KCk7CisgICAgfQorfQorCisvKiBFeHRlbmQgb3IgdHJ1bmNhdGUgdG8gYSBu ZXcgbW9kZS4KKyAgIElmIFNBVF9QLCBzYXR1cmF0ZSB0aGUgcmVzdWx0IHRv IHRoZSBtYXggb3IgdGhlIG1pbi4KKyAgIFJldHVybiB0cnVlLCBpZiAhU0FU X1AgYW5kIG92ZXJmbG93LiAgKi8KKworYm9vbAorZml4ZWRfY29udmVydCAo RklYRURfVkFMVUVfVFlQRSAqZiwgZW51bSBtYWNoaW5lX21vZGUgbW9kZSwK KyAgICAgICAgICAgICAgIGNvbnN0IEZJWEVEX1ZBTFVFX1RZUEUgKmEsIGJv b2wgc2F0X3ApCit7CisgIGJvb2wgb3ZlcmZsb3dfcCA9IGZhbHNlOworICBp ZiAobW9kZSA9PSBhLT5tb2RlKQorICAgIHsKKyAgICAgICpmID0gKmE7Cisg ICAgICByZXR1cm4gb3ZlcmZsb3dfcDsKKyAgICB9CisKKyAgaWYgKEdFVF9N T0RFX0ZCSVQgKG1vZGUpID4gR0VUX01PREVfRkJJVCAoYS0+bW9kZSkpCisg ICAgeworICAgICAgLyogTGVmdCBzaGlmdCBhIHRvIHRlbXBfaGlnaCwgdGVt cF9sb3cgYmFzZWQgb24gYS0+bW9kZS4gICovCisgICAgICBkb3VibGVfaW50 IHRlbXBfaGlnaCwgdGVtcF9sb3c7CisgICAgICBpbnQgYW1vdW50ID0gR0VU X01PREVfRkJJVCAobW9kZSkgLSBHRVRfTU9ERV9GQklUIChhLT5tb2RlKTsK KyAgICAgIGxzaGlmdF9kb3VibGUgKGEtPmRhdGEubG93LCBhLT5kYXRhLmhp Z2gsCisJCSAgICAgYW1vdW50LAorCQkgICAgIDIgKiBIT1NUX0JJVFNfUEVS X1dJREVfSU5ULAorCQkgICAgICZ0ZW1wX2xvdy5sb3csICZ0ZW1wX2xvdy5o aWdoLAorCQkgICAgIFNJR05FRF9GSVhFRF9QT0lOVF9NT0RFX1AgKGEtPm1v ZGUpKTsKKyAgICAgIC8qIExvZ2ljYWwgc2hpZnQgcmlnaHQgdG8gdGVtcF9o aWdoLiAgKi8KKyAgICAgIGxzaGlmdF9kb3VibGUgKGEtPmRhdGEubG93LCBh LT5kYXRhLmhpZ2gsCisJCSAgICAgYW1vdW50IC0gMiAqIEhPU1RfQklUU19Q RVJfV0lERV9JTlQsCisJCSAgICAgMiAqIEhPU1RfQklUU19QRVJfV0lERV9J TlQsCisJCSAgICAgJnRlbXBfaGlnaC5sb3csICZ0ZW1wX2hpZ2guaGlnaCwg MCk7CisgICAgICBpZiAoU0lHTkVEX0ZJWEVEX1BPSU5UX01PREVfUCAoYS0+ bW9kZSkKKwkgICYmIGEtPmRhdGEuaGlnaCA8IDApIC8qIFNpZ25lZC1leHRl bmQgdGVtcF9oaWdoLiAgKi8KKwl0ZW1wX2hpZ2ggPSBkb3VibGVfaW50X2V4 dCAodGVtcF9oaWdoLCBhbW91bnQsIDApOworICAgICAgZi0+bW9kZSA9IG1v ZGU7CisgICAgICBmLT5kYXRhID0gdGVtcF9sb3c7CisgICAgICBpZiAoU0lH TkVEX0ZJWEVEX1BPSU5UX01PREVfUCAoYS0+bW9kZSkgPT0KKwkgIFNJR05F RF9GSVhFRF9QT0lOVF9NT0RFX1AgKGYtPm1vZGUpKQorCW92ZXJmbG93X3Ag PSBmaXhlZF9zYXR1cmF0ZTIgKGYtPm1vZGUsIHRlbXBfaGlnaCwgdGVtcF9s b3csICZmLT5kYXRhLAorCQkJCSAgICAgIHNhdF9wKTsKKyAgICAgIGVsc2UK Kwl7CisJICAvKiBUYWtlIGNhcmUgb2YgdGhlIGNhc2VzIHdoZW4gY29udmVy dGluZyBiZXR3ZWVuIHNpZ25lZCBhbmQKKwkgICAgIHVuc2lnbmVkLiAgKi8K KwkgIGlmIChTSUdORURfRklYRURfUE9JTlRfTU9ERV9QIChhLT5tb2RlKSkK KwkgICAgeworCSAgICAgIC8qIFNpZ25lZCAtPiBVbnNpZ25lZC4gICovCisJ ICAgICAgaWYgKGEtPmRhdGEuaGlnaCA8IDApCisJCXsKKwkJICBpZiAoc2F0 X3ApCisJCSAgICB7CisJCSAgICAgIGYtPmRhdGEubG93ID0gMDsgIC8qIFNl dCB0byB6ZXJvLiAgKi8KKwkJICAgICAgZi0+ZGF0YS5oaWdoID0gMDsgIC8q IFNldCB0byB6ZXJvLiAgKi8KKwkJICAgIH0KKwkJICBlbHNlCisJCSAgICBv dmVyZmxvd19wID0gdHJ1ZTsKKwkJfQorCSAgICAgIGVsc2UKKwkJb3ZlcmZs b3dfcCA9IGZpeGVkX3NhdHVyYXRlMiAoZi0+bW9kZSwgdGVtcF9oaWdoLCB0 ZW1wX2xvdywKKwkJCQkJICAgICAgJmYtPmRhdGEsIHNhdF9wKTsKKwkgICAg fQorCSAgZWxzZQorCSAgICB7CisJICAgICAgLyogVW5zaWduZWQgLT4gU2ln bmVkLiAgKi8KKwkgICAgICBpZiAodGVtcF9oaWdoLmhpZ2ggPCAwKQorCQl7 CisJCSAgaWYgKHNhdF9wKQorCQkgICAgeworCQkgICAgICAvKiBTZXQgdG8g bWF4aW11bS4gICovCisJCSAgICAgIGYtPmRhdGEubG93ID0gLTE7ICAvKiBT ZXQgdG8gYWxsIG9uZXMuICAqLworCQkgICAgICBmLT5kYXRhLmhpZ2ggPSAt MTsgIC8qIFNldCB0byBhbGwgb25lcy4gICovCisJCSAgICAgIGYtPmRhdGEg PSBkb3VibGVfaW50X2V4dCAoZi0+ZGF0YSwKKwkJCQkJCUdFVF9NT0RFX0ZC SVQgKGYtPm1vZGUpCisJCQkJCQkrIEdFVF9NT0RFX0lCSVQgKGYtPm1vZGUp LAorCQkJCQkJMSk7IC8qIENsZWFyIHRoZSBzaWduLiAgKi8KKwkJICAgIH0K KwkJICBlbHNlCisJCSAgICBvdmVyZmxvd19wID0gdHJ1ZTsKKwkJfQorCSAg ICAgIGVsc2UKKwkJb3ZlcmZsb3dfcCA9IGZpeGVkX3NhdHVyYXRlMiAoZi0+ bW9kZSwgdGVtcF9oaWdoLCB0ZW1wX2xvdywKKwkJCQkJICAgICAgJmYtPmRh dGEsIHNhdF9wKTsKKwkgICAgfQorCX0KKyAgICB9CisgIGVsc2UKKyAgICB7 CisgICAgICAvKiBSaWdodCBzaGlmdCBhIHRvIHRlbXAgYmFzZWQgb24gYS0+ bW9kZS4gICovCisgICAgICBkb3VibGVfaW50IHRlbXA7CisgICAgICBsc2hp ZnRfZG91YmxlIChhLT5kYXRhLmxvdywgYS0+ZGF0YS5oaWdoLAorCQkgICAg IEdFVF9NT0RFX0ZCSVQgKG1vZGUpIC0gR0VUX01PREVfRkJJVCAoYS0+bW9k ZSksCisJCSAgICAgMiAqIEhPU1RfQklUU19QRVJfV0lERV9JTlQsCisJCSAg ICAgJnRlbXAubG93LCAmdGVtcC5oaWdoLAorCQkgICAgIFNJR05FRF9GSVhF RF9QT0lOVF9NT0RFX1AgKGEtPm1vZGUpKTsKKyAgICAgIGYtPm1vZGUgPSBt b2RlOworICAgICAgZi0+ZGF0YSA9IHRlbXA7CisgICAgICBpZiAoU0lHTkVE X0ZJWEVEX1BPSU5UX01PREVfUCAoYS0+bW9kZSkgPT0KKwkgIFNJR05FRF9G SVhFRF9QT0lOVF9NT0RFX1AgKGYtPm1vZGUpKQorCW92ZXJmbG93X3AgPSBm aXhlZF9zYXR1cmF0ZTEgKGYtPm1vZGUsIGYtPmRhdGEsICZmLT5kYXRhLCBz YXRfcCk7CisgICAgICBlbHNlCisJeworCSAgLyogVGFrZSBjYXJlIG9mIHRo ZSBjYXNlcyB3aGVuIGNvbnZlcnRpbmcgYmV0d2VlbiBzaWduZWQgYW5kCisJ ICAgICB1bnNpZ25lZC4gICovCisJICBpZiAoU0lHTkVEX0ZJWEVEX1BPSU5U X01PREVfUCAoYS0+bW9kZSkpCisJICAgIHsKKwkgICAgICAvKiBTaWduZWQg LT4gVW5zaWduZWQuICAqLworCSAgICAgIGlmIChhLT5kYXRhLmhpZ2ggPCAw KQorCQl7CisJCSAgaWYgKHNhdF9wKQorCQkgICAgeworCQkgICAgICBmLT5k YXRhLmxvdyA9IDA7ICAvKiBTZXQgdG8gemVyby4gICovCisJCSAgICAgIGYt PmRhdGEuaGlnaCA9IDA7ICAvKiBTZXQgdG8gemVyby4gICovCisJCSAgICB9 CisJCSAgZWxzZQorCQkgICAgb3ZlcmZsb3dfcCA9IHRydWU7CisJCX0KKwkg ICAgICBlbHNlCisJCW92ZXJmbG93X3AgPSBmaXhlZF9zYXR1cmF0ZTEgKGYt Pm1vZGUsIGYtPmRhdGEsICZmLT5kYXRhLAorCQkJCQkgICAgICBzYXRfcCk7 CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIC8qIFVuc2lnbmVk IC0+IFNpZ25lZC4gICovCisJICAgICAgaWYgKHRlbXAuaGlnaCA8IDApCisJ CXsKKwkJICBpZiAoc2F0X3ApCisJCSAgICB7CisJCSAgICAgIC8qIFNldCB0 byBtYXhpbXVtLiAgKi8KKwkJICAgICAgZi0+ZGF0YS5sb3cgPSAtMTsgIC8q IFNldCB0byBhbGwgb25lcy4gICovCisJCSAgICAgIGYtPmRhdGEuaGlnaCA9 IC0xOyAgLyogU2V0IHRvIGFsbCBvbmVzLiAgKi8KKwkJICAgICAgZi0+ZGF0 YSA9IGRvdWJsZV9pbnRfZXh0IChmLT5kYXRhLAorCQkJCQkJR0VUX01PREVf RkJJVCAoZi0+bW9kZSkKKwkJCQkJCSsgR0VUX01PREVfSUJJVCAoZi0+bW9k ZSksCisJCQkJCQkxKTsgLyogQ2xlYXIgdGhlIHNpZ24uICAqLworCQkgICAg fQorCQkgIGVsc2UKKwkJICAgIG92ZXJmbG93X3AgPSB0cnVlOworCQl9CisJ ICAgICAgZWxzZQorCQlvdmVyZmxvd19wID0gZml4ZWRfc2F0dXJhdGUxIChm LT5tb2RlLCBmLT5kYXRhLCAmZi0+ZGF0YSwKKwkJCQkJICAgICAgc2F0X3Ap OworCSAgICB9CisJfQorICAgIH0KKworICBmLT5kYXRhID0gZG91YmxlX2lu dF9leHQgKGYtPmRhdGEsCisJCQkgICAgU0lHTkVEX0ZJWEVEX1BPSU5UX01P REVfUCAoZi0+bW9kZSkKKwkJCSAgICArIEdFVF9NT0RFX0ZCSVQgKGYtPm1v ZGUpCisJCQkgICAgKyBHRVRfTU9ERV9JQklUIChmLT5tb2RlKSwKKwkJCSAg ICBVTlNJR05FRF9GSVhFRF9QT0lOVF9NT0RFX1AgKGYtPm1vZGUpKTsKKyAg cmV0dXJuIG92ZXJmbG93X3A7Cit9CisKKy8qIENvbnZlcnQgdG8gYSBuZXcg Zml4ZWQtcG9pbnQgbW9kZSBmcm9tIGFuIGludGVnZXIuCisgICBJZiBVTlNJ R05FRF9QLCB0aGlzIGludGVnZXIgaXMgdW5zaWduZWQuCisgICBJZiBTQVRf UCwgc2F0dXJhdGUgdGhlIHJlc3VsdCB0byB0aGUgbWF4IG9yIHRoZSBtaW4u CisgICBSZXR1cm4gdHJ1ZSwgaWYgIVNBVF9QIGFuZCBvdmVyZmxvdy4gICov CisKK2Jvb2wKK2ZpeGVkX2NvbnZlcnRfZnJvbV9pbnQgKEZJWEVEX1ZBTFVF X1RZUEUgKmYsIGVudW0gbWFjaGluZV9tb2RlIG1vZGUsCisJCQlkb3VibGVf aW50IGEsIGJvb2wgdW5zaWduZWRfcCwgYm9vbCBzYXRfcCkKK3sKKyAgYm9v bCBvdmVyZmxvd19wID0gZmFsc2U7CisgIC8qIExlZnQgc2hpZnQgYSB0byB0 ZW1wX2hpZ2gsIHRlbXBfbG93LiAgKi8KKyAgZG91YmxlX2ludCB0ZW1wX2hp Z2gsIHRlbXBfbG93OworICBpbnQgYW1vdW50ID0gR0VUX01PREVfRkJJVCAo bW9kZSk7CisgIGlmIChhbW91bnQgPT0gMiAqIEhPU1RfQklUU19QRVJfV0lE RV9JTlQpCisgICAgeworICAgICAgIHRlbXBfaGlnaCA9IGE7CisgICAgICAg dGVtcF9sb3cubG93ID0gMDsKKyAgICAgICB0ZW1wX2xvdy5oaWdoID0gMDsK KyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBsc2hpZnRfZG91YmxlIChh LmxvdywgYS5oaWdoLAorCQkgICAgIGFtb3VudCwKKwkJICAgICAyICogSE9T VF9CSVRTX1BFUl9XSURFX0lOVCwKKwkJICAgICAmdGVtcF9sb3cubG93LCAm dGVtcF9sb3cuaGlnaCwgMCk7CisKKyAgICAgIC8qIExvZ2ljYWwgc2hpZnQg cmlnaHQgdG8gdGVtcF9oaWdoLiAgKi8KKyAgICAgIGxzaGlmdF9kb3VibGUg KGEubG93LCBhLmhpZ2gsCisJCSAgICAgYW1vdW50IC0gMiAqIEhPU1RfQklU U19QRVJfV0lERV9JTlQsCisJCSAgICAgMiAqIEhPU1RfQklUU19QRVJfV0lE RV9JTlQsCisJCSAgICAgJnRlbXBfaGlnaC5sb3csICZ0ZW1wX2hpZ2guaGln aCwgMCk7CisgICAgfQorICBpZiAoIXVuc2lnbmVkX3AgJiYgYS5oaWdoIDwg MCkgLyogU2lnbmVkLWV4dGVuZCB0ZW1wX2hpZ2guICAqLworICAgIHRlbXBf aGlnaCA9IGRvdWJsZV9pbnRfZXh0ICh0ZW1wX2hpZ2gsIGFtb3VudCwgMCk7 CisKKyAgZi0+bW9kZSA9IG1vZGU7CisgIGYtPmRhdGEgPSB0ZW1wX2xvdzsK KworICBpZiAodW5zaWduZWRfcCA9PSBVTlNJR05FRF9GSVhFRF9QT0lOVF9N T0RFX1AgKGYtPm1vZGUpKQorICAgIG92ZXJmbG93X3AgPSBmaXhlZF9zYXR1 cmF0ZTIgKGYtPm1vZGUsIHRlbXBfaGlnaCwgdGVtcF9sb3csICZmLT5kYXRh LAorCQkJCSAgc2F0X3ApOworICBlbHNlCisgICAgeworICAgICAgLyogVGFr ZSBjYXJlIG9mIHRoZSBjYXNlcyB3aGVuIGNvbnZlcnRpbmcgYmV0d2VlbiBz aWduZWQgYW5kIHVuc2lnbmVkLiAgKi8KKyAgICAgIGlmICghdW5zaWduZWRf cCkKKwl7CisJICAvKiBTaWduZWQgLT4gVW5zaWduZWQuICAqLworCSAgaWYg KGEuaGlnaCA8IDApCisJICAgIHsKKwkgICAgICBpZiAoc2F0X3ApCisJCXsK KwkJICBmLT5kYXRhLmxvdyA9IDA7ICAvKiBTZXQgdG8gemVyby4gICovCisJ CSAgZi0+ZGF0YS5oaWdoID0gMDsgIC8qIFNldCB0byB6ZXJvLiAgKi8KKwkJ fQorCSAgICAgIGVsc2UKKwkJb3ZlcmZsb3dfcCA9IHRydWU7CisJICAgIH0K KwkgIGVsc2UKKwkgICAgb3ZlcmZsb3dfcCA9IGZpeGVkX3NhdHVyYXRlMiAo Zi0+bW9kZSwgdGVtcF9oaWdoLCB0ZW1wX2xvdywKKwkJCQkJICAmZi0+ZGF0 YSwgc2F0X3ApOworCX0KKyAgICAgIGVsc2UKKwl7CisJICAvKiBVbnNpZ25l ZCAtPiBTaWduZWQuICAqLworCSAgaWYgKHRlbXBfaGlnaC5oaWdoIDwgMCkK KwkgICAgeworCSAgICAgIGlmIChzYXRfcCkKKwkJeworCQkgIC8qIFNldCB0 byBtYXhpbXVtLiAgKi8KKwkJICBmLT5kYXRhLmxvdyA9IC0xOyAgLyogU2V0 IHRvIGFsbCBvbmVzLiAgKi8KKwkJICBmLT5kYXRhLmhpZ2ggPSAtMTsgIC8q IFNldCB0byBhbGwgb25lcy4gICovCisJCSAgZi0+ZGF0YSA9IGRvdWJsZV9p bnRfZXh0IChmLT5kYXRhLAorCQkJCQkgICAgR0VUX01PREVfRkJJVCAoZi0+ bW9kZSkKKwkJCQkJICAgICsgR0VUX01PREVfSUJJVCAoZi0+bW9kZSksCisJ CQkJCSAgICAxKTsgLyogQ2xlYXIgdGhlIHNpZ24uICAqLworCQl9CisJICAg ICAgZWxzZQorCQlvdmVyZmxvd19wID0gdHJ1ZTsKKwkgICAgfQorCSAgZWxz ZQorCSAgICBvdmVyZmxvd19wID0gZml4ZWRfc2F0dXJhdGUyIChmLT5tb2Rl LCB0ZW1wX2hpZ2gsIHRlbXBfbG93LAorCQkJCQkgICZmLT5kYXRhLCBzYXRf cCk7CisJfQorICAgIH0KKyAgZi0+ZGF0YSA9IGRvdWJsZV9pbnRfZXh0IChm LT5kYXRhLAorCQkJICAgIFNJR05FRF9GSVhFRF9QT0lOVF9NT0RFX1AgKGYt Pm1vZGUpCisJCQkgICAgKyBHRVRfTU9ERV9GQklUIChmLT5tb2RlKQorCQkJ ICAgICsgR0VUX01PREVfSUJJVCAoZi0+bW9kZSksCisJCQkgICAgVU5TSUdO RURfRklYRURfUE9JTlRfTU9ERV9QIChmLT5tb2RlKSk7CisgIHJldHVybiBv dmVyZmxvd19wOworfQorCisvKiBDb252ZXJ0IHRvIGEgbmV3IGZpeGVkLXBv aW50IG1vZGUgZnJvbSBhIHJlYWwuCisgICBJZiBTQVRfUCwgc2F0dXJhdGUg dGhlIHJlc3VsdCB0byB0aGUgbWF4IG9yIHRoZSBtaW4uCisgICBSZXR1cm4g dHJ1ZSwgaWYgIVNBVF9QIGFuZCBvdmVyZmxvdy4gICovCisKK2Jvb2wKK2Zp eGVkX2NvbnZlcnRfZnJvbV9yZWFsIChGSVhFRF9WQUxVRV9UWVBFICpmLCBl bnVtIG1hY2hpbmVfbW9kZSBtb2RlLAorCQkJIGNvbnN0IFJFQUxfVkFMVUVf VFlQRSAqYSwgYm9vbCBzYXRfcCkKK3sKKyAgYm9vbCBvdmVyZmxvd19wID0g ZmFsc2U7CisgIFJFQUxfVkFMVUVfVFlQRSByZWFsX3ZhbHVlLCBmaXhlZF92 YWx1ZSwgYmFzZV92YWx1ZTsKKyAgYm9vbCB1bnNpZ25lZF9wID0gVU5TSUdO RURfRklYRURfUE9JTlRfTU9ERV9QIChtb2RlKTsKKyAgaW50IGlfZl9iaXRz ID0gR0VUX01PREVfSUJJVCAobW9kZSkgKyBHRVRfTU9ERV9GQklUIChtb2Rl KTsKKyAgdW5zaWduZWQgaW50IGZiaXQgPSBHRVRfTU9ERV9GQklUIChtb2Rl KTsKKyAgZW51bSBmaXhlZF92YWx1ZV9yYW5nZV9jb2RlIHRlbXA7CisKKyAg cmVhbF92YWx1ZSA9ICphOworICBmLT5tb2RlID0gbW9kZTsKKyAgcmVhbF8y ZXhwTiAoJmJhc2VfdmFsdWUsIGZiaXQpOworICByZWFsX2FyaXRobWV0aWMg KCZmaXhlZF92YWx1ZSwgTVVMVF9FWFBSLCAmcmVhbF92YWx1ZSwgJmJhc2Vf dmFsdWUpOworICByZWFsX3RvX2ludGVnZXIyICgoSE9TVF9XSURFX0lOVCAq KSZmLT5kYXRhLmxvdywgJmYtPmRhdGEuaGlnaCwgJmZpeGVkX3ZhbHVlKTsK KyAgdGVtcCA9IGNoZWNrX3JlYWxfZm9yX2ZpeGVkX21vZGUgKCZyZWFsX3Zh bHVlLCBtb2RlKTsKKyAgaWYgKHRlbXAgPT0gRklYRURfVU5ERVJGTE9XKSAv KiBNaW5pbXVtLiAgKi8KKyAgICB7CisgICAgICBpZiAoc2F0X3ApCisJewor CSAgaWYgKHVuc2lnbmVkX3ApCisJICAgIHsKKwkgICAgICBmLT5kYXRhLmxv dyA9IDA7CisJICAgICAgZi0+ZGF0YS5oaWdoID0gMDsKKwkgICAgfQorCSAg ZWxzZQorCSAgICB7CisJICAgICAgZi0+ZGF0YS5sb3cgPSAxOworCSAgICAg IGYtPmRhdGEuaGlnaCA9IDA7CisJICAgICAgbHNoaWZ0X2RvdWJsZSAoZi0+ ZGF0YS5sb3csIGYtPmRhdGEuaGlnaCwgaV9mX2JpdHMsCisJCQkgICAgIDIg KiBIT1NUX0JJVFNfUEVSX1dJREVfSU5ULAorCQkJICAgICAmZi0+ZGF0YS5s b3csICZmLT5kYXRhLmhpZ2gsIDEpOworCSAgICAgIGYtPmRhdGEgPSBkb3Vi bGVfaW50X2V4dCAoZi0+ZGF0YSwgMSArIGlfZl9iaXRzLCAwKTsKKwkgICAg fQorCX0KKyAgICAgIGVsc2UKKwlvdmVyZmxvd19wID0gdHJ1ZTsKKyAgICB9 CisgIGVsc2UgaWYgKHRlbXAgPT0gRklYRURfR1RfTUFYX0VQUyB8fCB0ZW1w ID09IEZJWEVEX01BWF9FUFMpIC8qIE1heGltdW0uICAqLworICAgIHsKKyAg ICAgIGlmIChzYXRfcCkKKwl7CisJICBmLT5kYXRhLmxvdyA9IC0xOworCSAg Zi0+ZGF0YS5oaWdoID0gLTE7CisJICBmLT5kYXRhID0gZG91YmxlX2ludF9l eHQgKGYtPmRhdGEsIGlfZl9iaXRzLCAxKTsKKwl9CisgICAgICBlbHNlCisJ b3ZlcmZsb3dfcCA9IHRydWU7CisgICAgfQorICBmLT5kYXRhID0gZG91Ymxl X2ludF9leHQgKGYtPmRhdGEsICghdW5zaWduZWRfcCkgKyBpX2ZfYml0cywg dW5zaWduZWRfcCk7CisgIHJldHVybiBvdmVyZmxvd19wOworfQorCisvKiBD b252ZXJ0IHRvIGEgbmV3IHJlYWwgbW9kZSBmcm9tIGEgZml4ZWQtcG9pbnQu ICAqLworCit2b2lkCityZWFsX2NvbnZlcnRfZnJvbV9maXhlZCAoUkVBTF9W QUxVRV9UWVBFICpyLCBlbnVtIG1hY2hpbmVfbW9kZSBtb2RlLAorCQkJIGNv bnN0IEZJWEVEX1ZBTFVFX1RZUEUgKmYpCit7CisgIFJFQUxfVkFMVUVfVFlQ RSBiYXNlX3ZhbHVlLCBmaXhlZF92YWx1ZSwgcmVhbF92YWx1ZTsKKworICBy ZWFsXzJleHBOICgmYmFzZV92YWx1ZSwgR0VUX01PREVfRkJJVCAoZi0+bW9k ZSkpOworICByZWFsX2Zyb21faW50ZWdlciAoJmZpeGVkX3ZhbHVlLCBWT0lE bW9kZSwgZi0+ZGF0YS5sb3csIGYtPmRhdGEuaGlnaCwKKwkJICAgICBVTlNJ R05FRF9GSVhFRF9QT0lOVF9NT0RFX1AgKGYtPm1vZGUpKTsKKyAgcmVhbF9h cml0aG1ldGljICgmcmVhbF92YWx1ZSwgUkRJVl9FWFBSLCAmZml4ZWRfdmFs dWUsICZiYXNlX3ZhbHVlKTsKKyAgcmVhbF9jb252ZXJ0IChyLCBtb2RlLCAm cmVhbF92YWx1ZSk7Cit9CisKKy8qIERldGVybWluZSB3aGV0aGVyIGEgZml4 ZWQtcG9pbnQgdmFsdWUgRiBpcyBuZWdhdGl2ZS4gICovCisKK2Jvb2wKK2Zp eGVkX2lzbmVnIChjb25zdCBGSVhFRF9WQUxVRV9UWVBFICpmKQoreworICBp ZiAoU0lHTkVEX0ZJWEVEX1BPSU5UX01PREVfUCAoZi0+bW9kZSkpCisgICAg eworICAgICAgaW50IGlfZl9iaXRzID0gR0VUX01PREVfSUJJVCAoZi0+bW9k ZSkgKyBHRVRfTU9ERV9GQklUIChmLT5tb2RlKTsKKyAgICAgIGludCBzaWdu X2JpdCA9IGdldF9maXhlZF9zaWduX2JpdCAoZi0+ZGF0YSwgaV9mX2JpdHMp OworICAgICAgaWYgKHNpZ25fYml0ID09IDEpCisJcmV0dXJuIHRydWU7Cisg ICAgfQorCisgIHJldHVybiBmYWxzZTsKK30KSW5kZXg6IGdjYzR4L2djYy9n Y2MvTWFrZWZpbGUuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZ2Nj NHgub3JpZy9nY2MvZ2NjL01ha2VmaWxlLmluCTIwMDctMDgtMDEgMTU6NTM6 NTMuMDAwMDAwMDAwIC0wNzAwCisrKyBnY2M0eC9nY2MvZ2NjL01ha2VmaWxl LmluCTIwMDctMDgtMDEgMTU6NTM6NTUuMDAwMDAwMDAwIC0wNzAwCkBAIC0x MDI4LDYgKzEwMjgsNyBAQAogCWV4cG1lZC5vIFwKIAlleHByLm8gXAogCWZp bmFsLm8gXAorCWZpeGVkLXZhbHVlLm8gXAogCWZvbGQtY29uc3QubyBcCiAJ ZnVuY3Rpb24ubyBcCiAJZndwcm9wLm8gXApAQCAtMjQxMyw2ICsyNDE0LDgg QEAKICAgIHRvcGxldi5oICQoVE1fUF9IKSAkKFJFQUxfSCkKIGRmcC5vIDog ZGZwLmMgZGZwLmggJChDT05GSUdfSCkgJChTWVNURU1fSCkgY29yZXR5cGVz LmggJChUTV9IKQkkKFRSRUVfSCkgXAogICAgdG9wbGV2LmggJChUTV9QX0gp ICQoUkVBTF9IKSAkKERFQ05VTV9IKQorZml4ZWQtdmFsdWUubzogZml4ZWQt dmFsdWUuYyAkKENPTkZJR19IKSAkKFNZU1RFTV9IKSBjb3JldHlwZXMuaCAk KFRNX0gpIFwKKyAgICQoVFJFRV9IKSBmaXhlZC12YWx1ZS5oICQoUkVBTF9I KSB0b3BsZXYuaAogaW50ZWdyYXRlLm8gOiBpbnRlZ3JhdGUuYyAkKENPTkZJ R19IKSAkKFNZU1RFTV9IKSBjb3JldHlwZXMuaCAkKFRNX0gpIFwKICAgICQo UlRMX0gpICQoVFJFRV9IKSAkKEZMQUdTX0gpIGRlYnVnLmggJChJTlRFR1JB VEVfSCkgaW5zbi1jb25maWcuaCBcCiAgICAkKEVYUFJfSCkgJChSRUFMX0gp ICQoUkVHU19IKSBpbnRsLmggJChGVU5DVElPTl9IKSBvdXRwdXQuaCAkKFJF Q09HX0gpIFwKQEAgLTMwMzgsNiArMzA0MSw3IEBACiAgICQoc3JjZGlyKS9j b3ZlcmFnZS5jICQoc3JjZGlyKS9ydGwuaCBcCiAgICQoc3JjZGlyKS9vcHRh YnMuaCAkKHNyY2RpcikvdHJlZS5oICQoc3JjZGlyKS9mdW5jdGlvbi5oICQo c3JjZGlyKS9saWJmdW5jcy5oICQoU1lNVEFCX0gpIFwKICAgJChzcmNkaXIp L3JlYWwuaCAkKHNyY2RpcikvdmFycmF5LmggJChzcmNkaXIpL2luc24tYWRk ci5oICQoc3JjZGlyKS9od2ludC5oIFwKKyAgJChzcmNkaXIpL2ZpeGVkLXZh bHVlLmggXAogICAkKHNyY2RpcikvaXBhLXJlZmVyZW5jZS5oICQoc3JjZGly KS9vdXRwdXQuaCAkKHNyY2RpcikvY2ZnbG9vcC5oIFwKICAgJChzcmNkaXIp L2NzZWxpYi5oICQoc3JjZGlyKS9iYXNpYy1ibG9jay5oICAkKHNyY2Rpcikv Y2dyYXBoLmggXAogICAkKHNyY2RpcikvcmVsb2FkLmggJChzcmNkaXIpL2Nh bGxlci1zYXZlLmMgXApJbmRleDogZ2NjNHgvZ2NjL2djYy9kb3VibGUtaW50 LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZ2NjNHgub3JpZy9nY2Mv Z2NjL2RvdWJsZS1pbnQuYwkyMDA3LTA4LTAxIDE1OjUzOjUzLjAwMDAwMDAw MCAtMDcwMAorKysgZ2NjNHgvZ2NjL2djYy9kb3VibGUtaW50LmMJMjAwNy0w OC0wMSAxNTo1Mzo1NS4wMDAwMDAwMDAgLTA3MDAKQEAgLTM2Miw5ICszNjIs OSBAQAogICAgIHJldHVybiAtMTsKICAgaWYgKGEuaGlnaCA+IGIuaGlnaCkK ICAgICByZXR1cm4gMTsKLSAgaWYgKChIT1NUX1dJREVfSU5UKSBhLmxvdyA8 IChIT1NUX1dJREVfSU5UKSBiLmxvdykKKyAgaWYgKCh1bnNpZ25lZCBIT1NU X1dJREVfSU5UKSBhLmxvdyA8ICh1bnNpZ25lZCBIT1NUX1dJREVfSU5UKSBi LmxvdykKICAgICByZXR1cm4gLTE7Ci0gIGlmICgoSE9TVF9XSURFX0lOVCkg YS5sb3cgPiAoSE9TVF9XSURFX0lOVCkgYi5sb3cpCisgIGlmICgodW5zaWdu ZWQgSE9TVF9XSURFX0lOVCkgYS5sb3cgPiAodW5zaWduZWQgSE9TVF9XSURF X0lOVCkgYi5sb3cpCiAgICAgcmV0dXJuIDE7CiAKICAgcmV0dXJuIDA7Cklu ZGV4OiBnY2M0eC9nY2MvZ2NjL2dlbmd0eXBlLmMKPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQotLS0gZ2NjNHgub3JpZy9nY2MvZ2NjL2dlbmd0eXBlLmMJMjAw Ny0wOC0wMSAxNTo1Mzo1My4wMDAwMDAwMDAgLTA3MDAKKysrIGdjYzR4L2dj Yy9nY2MvZ2VuZ3R5cGUuYwkyMDA3LTA4LTAxIDE1OjUzOjU1LjAwMDAwMDAw MCAtMDcwMApAQCAtMzUzMyw2ICszNTMzLDcgQEAKICAgcG9zLmxpbmUgPSBf X0xJTkVfXyArIDE7CiAgIGRvX3NjYWxhcl90eXBlZGVmICgiQ1VNVUxBVElW RV9BUkdTIiwgJnBvcyk7IHBvcy5saW5lKys7CiAgIGRvX3NjYWxhcl90eXBl ZGVmICgiUkVBTF9WQUxVRV9UWVBFIiwgJnBvcyk7IHBvcy5saW5lKys7Cisg IGRvX3NjYWxhcl90eXBlZGVmICgiRklYRURfVkFMVUVfVFlQRSIsICZwb3Mp OyBwb3MubGluZSsrOwogICBkb19zY2FsYXJfdHlwZWRlZiAoImRvdWJsZV9p bnQiLCAmcG9zKTsgcG9zLmxpbmUrKzsKICAgZG9fc2NhbGFyX3R5cGVkZWYg KCJ1aW50OCIsICZwb3MpOyBwb3MubGluZSsrOwogICBkb19zY2FsYXJfdHlw ZWRlZiAoImp3b3JkIiwgJnBvcyk7IHBvcy5saW5lKys7Cg== ------_=_NextPart_001_01C7D493.61D27714--