Received: from makus.postgresql.org (makus.postgresql.org [98.129.198.125]) by mail.postgresql.org (Postfix) with ESMTP id EEDB1EEA155 for ; Wed, 14 Dec 2011 02:34:19 -0400 (AST) Received: from mail-iy0-f174.google.com ([209.85.210.174]) by makus.postgresql.org with esmtp (Exim 4.72) (envelope-from ) id 1RaiPv-0003lf-RG for pgsql-hackers@postgresql.org; Wed, 14 Dec 2011 06:34:20 +0000 Received: by iaeh11 with SMTP id h11so759595iae.19 for ; Tue, 13 Dec 2011 22:34:03 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=message-id:date:from:user-agent:mime-version:to:cc:subject :references:in-reply-to:content-type; bh=cwLtgWcvibEIPlUUPcKXJ8y6PtOShlSdqd3RAtgP1RQ=; b=ljpO47fawHpxO5MSazhM2nBu3UOBXzX7HRwwM0jC1Gpb+z16GMYKstGtsJTZs/h7aQ Vj3UcUkqRpTs5wVEvVcgkY9Gixp/y5f2Q0uYPVTynA/Yu7ZDn5D9mG8mHOt94R0on3Vp 0StZZzxD1hmfWCyLBl5pYRX0U9lF0/qPip6h4= Received: by 10.43.58.10 with SMTP id wi10mr10050104icb.57.1323844443416; Tue, 13 Dec 2011 22:34:03 -0800 (PST) Received: from [192.168.1.99] ([61.199.203.168]) by mx.google.com with ESMTPS id 36sm5565384ibc.6.2011.12.13.22.34.00 (version=SSLv3 cipher=OTHER); Tue, 13 Dec 2011 22:34:02 -0800 (PST) Message-ID: <4EE84360.90800@gmail.com> Date: Wed, 14 Dec 2011 15:34:08 +0900 From: Shigeru Hanada User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:8.0) Gecko/20111105 Thunderbird/8.0 MIME-Version: 1.0 To: Etsuro Fujita CC: pgsql-hackers@postgresql.org Subject: Re: WIP: Collecting statistics on CSV file data References: <4E6DE18B.4010505@lab.ntt.co.jp> <4E7861C1.2000607@gmail.com> <4E8EC1D8.3080700@lab.ntt.co.jp> <4E9C6573.8050507@gmail.com> <4E9FF04B.3050504@lab.ntt.co.jp> <4EB7C07A.5030205@gmail.com> <4EC60883.2050905@lab.ntt.co.jp> <4EC648CA.5050904@gmail.com> <4EC9CBC5.3070500@lab.ntt.co.jp> <4EE1FC38.5080707@lab.ntt.co.jp> <4EE5D862.1080809@gmail.com> <4EE74C5F.3000309@lab.ntt.co.jp> In-Reply-To: <4EE74C5F.3000309@lab.ntt.co.jp> Content-Type: multipart/mixed; boundary="------------060201060604070303020503" X-Pg-Spam-Score: -2.6 (--) X-Archive-Number: 201112/611 X-Sequence-Number: 199863 This is a multi-part message in MIME format. --------------060201060604070303020503 Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit (2011/12/13 22:00), Etsuro Fujita wrote: > Thank you for your effectiveness experiments and proposals for > improvements. I updated the patch according to your proposals. > Attached is the updated version of the patch. I think this patch could be marked as "Ready for committer" with some minor fixes. Please find attached a revised patch (v6.1). Changes from Fujita-san's patch are: * Fix a typo in src/backend/commands/analyze.c. * Connect multi-lined message string literals, because PG code style allows a line including message string literals to go past 80 columns. * Fix ATPrepSetOptions so that it uses pg_strcasecmp instead of pg_strncasecmp, becuase it's guaranteed that a) given strings are null-terminated, and b) they have no trailing. This feature would enhance cost estimation of foreign scans substantially. Great! Regards, -- Shigeru Hanada * 不明 - 自動検出 * 英語 * 日本語 * 英語 * 日本語 --------------060201060604070303020503 Content-Type: text/plain; name="postgresql-analyze-v6.1.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="postgresql-analyze-v6.1.patch" ZGlmZiAtLWdpdCBhL2NvbnRyaWIvZmlsZV9mZHcvZmlsZV9mZHcuYyBiL2NvbnRyaWIvZmls ZV9mZHcvZmlsZV9mZHcuYwppbmRleCAxY2YzYjNjLi40ZWI0ZTcyIDEwMDY0NAoqKiogYS9j b250cmliL2ZpbGVfZmR3L2ZpbGVfZmR3LmMKLS0tIGIvY29udHJpYi9maWxlX2Zkdy9maWxl X2Zkdy5jCioqKioqKioqKioqKioqKgoqKiogMjAsMjUgKioqKgotLS0gMjAsMjYgLS0tLQog ICNpbmNsdWRlICJjb21tYW5kcy9jb3B5LmgiCiAgI2luY2x1ZGUgImNvbW1hbmRzL2RlZnJl bS5oIgogICNpbmNsdWRlICJjb21tYW5kcy9leHBsYWluLmgiCisgI2luY2x1ZGUgImNvbW1h bmRzL3ZhY3V1bS5oIgogICNpbmNsdWRlICJmb3JlaWduL2Zkd2FwaS5oIgogICNpbmNsdWRl ICJmb3JlaWduL2ZvcmVpZ24uaCIKICAjaW5jbHVkZSAibWlzY2FkbWluLmgiCioqKioqKioq KioqKioqKiBzdGF0aWMgdm9pZCBmaWxlQmVnaW5Gb3JlaWduU2NhbihGb3JlaWduCioqKiAx MDEsMTA2ICoqKioKLS0tIDEwMiwxMTAgLS0tLQogIHN0YXRpYyBUdXBsZVRhYmxlU2xvdCAq ZmlsZUl0ZXJhdGVGb3JlaWduU2NhbihGb3JlaWduU2NhblN0YXRlICpub2RlKTsKICBzdGF0 aWMgdm9pZCBmaWxlUmVTY2FuRm9yZWlnblNjYW4oRm9yZWlnblNjYW5TdGF0ZSAqbm9kZSk7 CiAgc3RhdGljIHZvaWQgZmlsZUVuZEZvcmVpZ25TY2FuKEZvcmVpZ25TY2FuU3RhdGUgKm5v ZGUpOworIHN0YXRpYyB2b2lkIGZpbGVBbmFseXplRm9yZWlnblRhYmxlKFJlbGF0aW9uIG9u ZXJlbCwKKyAJCQkJCVZhY3V1bVN0bXQgKnZhY3N0bXQsCisgCQkJCQlpbnQgZWxldmVsKTsK ICAKICAvKgogICAqIEhlbHBlciBmdW5jdGlvbnMKKioqKioqKioqKioqKioqIHN0YXRpYyBM aXN0ICpnZXRfZmlsZV9mZHdfYXR0cmlidXRlX29wdGkKKioqIDExMiwxMTggKioqKgogIHN0 YXRpYyB2b2lkIGVzdGltYXRlX2Nvc3RzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZv ICpiYXNlcmVsLAogIAkJCSAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAogIAkJCSAgIENvc3Qg KnN0YXJ0dXBfY29zdCwgQ29zdCAqdG90YWxfY29zdCk7CiEgCiAgCiAgLyoKICAgKiBGb3Jl aWduLWRhdGEgd3JhcHBlciBoYW5kbGVyIGZ1bmN0aW9uOiByZXR1cm4gYSBzdHJ1Y3Qgd2l0 aCBwb2ludGVycwotLS0gMTE2LDEyNSAtLS0tCiAgc3RhdGljIHZvaWQgZXN0aW1hdGVfY29z dHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKmJhc2VyZWwsCiAgCQkJICAgY29u c3QgY2hhciAqZmlsZW5hbWUsCiAgCQkJICAgQ29zdCAqc3RhcnR1cF9jb3N0LCBDb3N0ICp0 b3RhbF9jb3N0KTsKISBzdGF0aWMgaW50CWFjcXVpcmVfc2FtcGxlX3Jvd3MoUmVsYXRpb24g b25lcmVsLAohIAkJCSAgIEhlYXBUdXBsZSAqcm93cywgaW50IHRhcmdyb3dzLAohIAkJCSAg IGRvdWJsZSAqdG90YWxyb3dzLCBkb3VibGUgKnRvdGFsZGVhZHJvd3MsCiEgCQkJICAgQmxv Y2tOdW1iZXIgKnRvdGFscGFnZXMsIGludCBlbGV2ZWwpOwogIAogIC8qCiAgICogRm9yZWln bi1kYXRhIHdyYXBwZXIgaGFuZGxlciBmdW5jdGlvbjogcmV0dXJuIGEgc3RydWN0IHdpdGgg cG9pbnRlcnMKKioqKioqKioqKioqKioqIGZpbGVfZmR3X2hhbmRsZXIoUEdfRlVOQ1RJT05f QVJHUykKKioqIDEyOSwxMzQgKioqKgotLS0gMTM2LDE0MiAtLS0tCiAgCWZkd3JvdXRpbmUt Pkl0ZXJhdGVGb3JlaWduU2NhbiA9IGZpbGVJdGVyYXRlRm9yZWlnblNjYW47CiAgCWZkd3Jv dXRpbmUtPlJlU2NhbkZvcmVpZ25TY2FuID0gZmlsZVJlU2NhbkZvcmVpZ25TY2FuOwogIAlm ZHdyb3V0aW5lLT5FbmRGb3JlaWduU2NhbiA9IGZpbGVFbmRGb3JlaWduU2NhbjsKKyAJZmR3 cm91dGluZS0+QW5hbHl6ZUZvcmVpZ25UYWJsZSA9IGZpbGVBbmFseXplRm9yZWlnblRhYmxl OwogIAogIAlQR19SRVRVUk5fUE9JTlRFUihmZHdyb3V0aW5lKTsKICB9CioqKioqKioqKioq KioqKiBmaWxlUmVTY2FuRm9yZWlnblNjYW4oRm9yZWlnblNjYW5TdGF0ZSAqCioqKiA1NzUs NTgwICoqKioKLS0tIDU4Myw2MDAgLS0tLQogIH0KICAKICAvKgorICAqIGZpbGVBbmFseXpl Rm9yZWlnblRhYmxlCisgICoJCUFuYWx5emUgZm9yZWlnbiB0YWJsZQorICAqLworIHN0YXRp YyB2b2lkCisgZmlsZUFuYWx5emVGb3JlaWduVGFibGUoUmVsYXRpb24gb25lcmVsLCBWYWN1 dW1TdG10ICp2YWNzdG10LCBpbnQgZWxldmVsKQorIHsKKyAJZG9fYW5hbHl6ZV9yZWwob25l cmVsLCB2YWNzdG10LAorIAkJCQkgICBlbGV2ZWwsIGZhbHNlLAorIAkJCQkgICBhY3F1aXJl X3NhbXBsZV9yb3dzKTsKKyB9CisgCisgLyoKICAgKiBFc3RpbWF0ZSBjb3N0cyBvZiBzY2Fu bmluZyBhIGZvcmVpZ24gdGFibGUuCiAgICovCiAgc3RhdGljIHZvaWQKKioqKioqKioqKioq KioqIGVzdGltYXRlX2Nvc3RzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHQKKioqIDU4NCw1 OTAgKioqKgogIHsKICAJc3RydWN0IHN0YXQgc3RhdF9idWY7CiAgCUJsb2NrTnVtYmVyIHBh Z2VzOwohIAlpbnQJCQl0dXBsZV93aWR0aDsKICAJZG91YmxlCQludHVwbGVzOwogIAlkb3Vi bGUJCW5yb3dzOwogIAlDb3N0CQlydW5fY29zdCA9IDA7Ci0tLSA2MDQsNjExIC0tLS0KICB7 CiAgCXN0cnVjdCBzdGF0IHN0YXRfYnVmOwogIAlCbG9ja051bWJlciBwYWdlczsKISAJQmxv Y2tOdW1iZXIJcmVscGFnZXM7CiEgCWRvdWJsZQkJcmVsdHVwbGVzOwogIAlkb3VibGUJCW50 dXBsZXM7CiAgCWRvdWJsZQkJbnJvd3M7CiAgCUNvc3QJCXJ1bl9jb3N0ID0gMDsKKioqKioq KioqKioqKioqIGVzdGltYXRlX2Nvc3RzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHQKKioq IDYwNCw2MTkgKioqKgogIAlpZiAocGFnZXMgPCAxKQogIAkJcGFnZXMgPSAxOwogIAohIAkv KgohIAkgKiBFc3RpbWF0ZSB0aGUgbnVtYmVyIG9mIHR1cGxlcyBpbiB0aGUgZmlsZS4gIFdl IGJhY2sgaW50byB0aGlzIGVzdGltYXRlCiEgCSAqIHVzaW5nIHRoZSBwbGFubmVyJ3MgaWRl YSBvZiB0aGUgcmVsYXRpb24gd2lkdGg7IHdoaWNoIGlzIGJvZ3VzIGlmIG5vdAohIAkgKiBh bGwgY29sdW1ucyBhcmUgYmVpbmcgcmVhZCwgbm90IHRvIG1lbnRpb24gdGhhdCB0aGUgdGV4 dCByZXByZXNlbnRhdGlvbgohIAkgKiBvZiBhIHJvdyBwcm9iYWJseSBpc24ndCB0aGUgc2Ft ZSBzaXplIGFzIGl0cyBpbnRlcm5hbCByZXByZXNlbnRhdGlvbi4KISAJICogRklYTUUgbGF0 ZXIuCiEgCSAqLwohIAl0dXBsZV93aWR0aCA9IE1BWEFMSUdOKGJhc2VyZWwtPndpZHRoKSAr IE1BWEFMSUdOKHNpemVvZihIZWFwVHVwbGVIZWFkZXJEYXRhKSk7CiAgCiEgCW50dXBsZXMg PSBjbGFtcF9yb3dfZXN0KChkb3VibGUpIHN0YXRfYnVmLnN0X3NpemUgLyAoZG91YmxlKSB0 dXBsZV93aWR0aCk7CiAgCiAgCS8qCiAgCSAqIE5vdyBlc3RpbWF0ZSB0aGUgbnVtYmVyIG9m IHJvd3MgcmV0dXJuZWQgYnkgdGhlIHNjYW4gYWZ0ZXIgYXBwbHlpbmcgdGhlCi0tLSA2MjUs NjU4IC0tLS0KICAJaWYgKHBhZ2VzIDwgMSkKICAJCXBhZ2VzID0gMTsKICAKISAJcmVscGFn ZXMgPSBiYXNlcmVsLT5wYWdlczsKISAJcmVsdHVwbGVzID0gYmFzZXJlbC0+dHVwbGVzOwog IAohIAlpZiAocmVscGFnZXMgPiAwKQohIAl7CiEgCQlkb3VibGUJCWRlbnNpdHk7CiEgCiEg CQlkZW5zaXR5ID0gcmVsdHVwbGVzIC8gKGRvdWJsZSkgcmVscGFnZXM7CiEgCiEgCQludHVw bGVzID0gY2xhbXBfcm93X2VzdChkZW5zaXR5ICogKGRvdWJsZSkgcGFnZXMpOwohIAl9CiEg CWVsc2UKISAJewohIAkJaW50CQkJdHVwbGVfd2lkdGg7CiEgCiEgCQkvKgohIAkJICogRXN0 aW1hdGUgdGhlIG51bWJlciBvZiB0dXBsZXMgaW4gdGhlIGZpbGUuICBXZSBiYWNrIGludG8g dGhpcwohIAkJICogZXN0aW1hdGUgdXNpbmcgdGhlIHBsYW5uZXIncyBpZGVhIG9mIHRoZSBy ZWxhdGlvbiB3aWR0aDsgd2hpY2ggaXMKISAJCSAqIGJvZ3VzIGlmIG5vdCBhbGwgY29sdW1u cyBhcmUgYmVpbmcgcmVhZCwgbm90IHRvIG1lbnRpb24gdGhhdCB0aGUKISAJCSAqIHRleHQg cmVwcmVzZW50YXRpb24gb2YgYSByb3cgcHJvYmFibHkgaXNuJ3QgdGhlIHNhbWUgc2l6ZSBh cyBpdHMKISAJCSAqIGludGVybmFsIHJlcHJlc2VudGF0aW9uLiAgRklYTUUgbGF0ZXIuCiEg CQkgKi8KISAJCXR1cGxlX3dpZHRoID0gTUFYQUxJR04oYmFzZXJlbC0+d2lkdGgpICsKISAJ CQlNQVhBTElHTihzaXplb2YoSGVhcFR1cGxlSGVhZGVyRGF0YSkpOwohIAohIAkJbnR1cGxl cyA9IGNsYW1wX3Jvd19lc3QoKGRvdWJsZSkgc3RhdF9idWYuc3Rfc2l6ZSAvCiEgCQkJCQkJ CQkoZG91YmxlKSB0dXBsZV93aWR0aCk7CiEgCX0KICAKICAJLyoKICAJICogTm93IGVzdGlt YXRlIHRoZSBudW1iZXIgb2Ygcm93cyByZXR1cm5lZCBieSB0aGUgc2NhbiBhZnRlciBhcHBs eWluZyB0aGUKKioqKioqKioqKioqKioqIGVzdGltYXRlX2Nvc3RzKFBsYW5uZXJJbmZvICpy b290LCBSZWxPcHQKKioqIDY0NSw2NDcgKioqKgotLS0gNjg0LDg3MiAtLS0tCiAgCXJ1bl9j b3N0ICs9IGNwdV9wZXJfdHVwbGUgKiBudHVwbGVzOwogIAkqdG90YWxfY29zdCA9ICpzdGFy dHVwX2Nvc3QgKyBydW5fY29zdDsKICB9CisgCisgLyoKKyAgKiBhY3F1aXJlX3NhbXBsZV9y b3dzIC0tIGFjcXVpcmUgYSByYW5kb20gc2FtcGxlIG9mIHJvd3MgZnJvbSB0aGUgdGFibGUK KyAgKgorICAqIFNlbGVjdGVkIHJvd3MgYXJlIHJldHVybmVkIGluIHRoZSBjYWxsZXItYWxs b2NhdGVkIGFycmF5IHJvd3NbXSwgd2hpY2ggbXVzdAorICAqIGhhdmUgYXQgbGVhc3QgdGFy Z3Jvd3MgZW50cmllcy4gIFRoZSBhY3R1YWwgbnVtYmVyIG9mIHJvd3Mgc2VsZWN0ZWQgaXMg CisgICogcmV0dXJuZWQgYXMgdGhlIGZ1bmN0aW9uIHJlc3VsdC4gIFdlIGFsc28gY291bnQg dGhlIG51bWJlciBvZiB2YWxpZCByb3dzIGluCisgICogdGhlIHRhYmxlLCBhbmQgcmV0dXJu IGl0IGludG8gKnRvdGFscm93cy4KKyAgKgorICAqIFRoZSByZXR1cm5lZCBsaXN0IG9mIHR1 cGxlcyBpcyBpbiBvcmRlciBieSBwaHlzaWNhbCBwb3NpdGlvbiBpbiB0aGUgdGFibGUuCisg ICogKFdlIHdpbGwgcmVseSBvbiB0aGlzIGxhdGVyIHRvIGRlcml2ZSBjb3JyZWxhdGlvbiBl c3RpbWF0ZXMuKQorICAqLworIHN0YXRpYyBpbnQKKyBhY3F1aXJlX3NhbXBsZV9yb3dzKFJl bGF0aW9uIG9uZXJlbCwgSGVhcFR1cGxlICpyb3dzLCBpbnQgdGFyZ3Jvd3MsCisgCQkJCQlk b3VibGUgKnRvdGFscm93cywgZG91YmxlICp0b3RhbGRlYWRyb3dzLAorIAkJCQkJQmxvY2tO dW1iZXIgKnRvdGFscGFnZXMsIGludCBlbGV2ZWwpCisgeworIAlpbnQJCQludW1yb3dzID0g MDsKKyAJaW50CQkJaW52YWxyb3dzID0gMDsgLyogdG90YWwgIyByb3dzIHZpb2xhdGluZwor IAkJCQkJCQkJICB0aGUgTk9UIE5VTEwgY29uc3RyYWludHMgKi8KKyAJZG91YmxlCQl2YWxp ZHJvd3MgPSAwOyAvKiB0b3RhbCAjIHJvd3MgY29sbGVjdGVkICovCisgCWRvdWJsZQkJcm93 c3Rvc2tpcCA9IC0xOyAvKiAtMSBtZWFucyBub3Qgc2V0IHlldCAqLworIAlkb3VibGUJCXJz dGF0ZTsKKyAJSGVhcFR1cGxlCXR1cGxlOworIAlUdXBsZURlc2MJdHVwRGVzYzsKKyAJVHVw bGVDb25zdHIgKmNvbnN0cjsKKyAJaW50CQkJbmF0dHM7CisgCWludAkJCWF0dHJDaGs7Cisg CURhdHVtCSAgICp2YWx1ZXM7CisgCWJvb2wJICAgKm51bGxzOworIAlib29sCQlmb3VuZDsK KyAJYm9vbAkJc2FtcGxlX2l0ID0gZmFsc2U7CisgCWNoYXIJICAgKmZpbGVuYW1lOworIAlz dHJ1Y3Qgc3RhdAlzdGF0X2J1ZjsKKyAJTGlzdAkgICAqb3B0aW9uczsKKyAJQ29weVN0YXRl CWNzdGF0ZTsKKyAJRXJyb3JDb250ZXh0Q2FsbGJhY2sgZXJyY29udGV4dDsKKyAKKyAJQXNz ZXJ0KG9uZXJlbCk7CisgCUFzc2VydCh0YXJncm93cyA+IDApOworIAorIAl0dXBEZXNjID0g UmVsYXRpb25HZXREZXNjcihvbmVyZWwpOworIAljb25zdHIgPSB0dXBEZXNjLT5jb25zdHI7 CisgCW5hdHRzID0gdHVwRGVzYy0+bmF0dHM7CisgCXZhbHVlcyA9IChEYXR1bSAqKSBwYWxs b2ModHVwRGVzYy0+bmF0dHMgKiBzaXplb2YoRGF0dW0pKTsKKyAJbnVsbHMgPSAoYm9vbCAq KSBwYWxsb2ModHVwRGVzYy0+bmF0dHMgKiBzaXplb2YoYm9vbCkpOworIAorIAkvKiBGZXRj aCBvcHRpb25zIG9mIGZvcmVpZ24gdGFibGUgKi8KKyAJZmlsZUdldE9wdGlvbnMoUmVsYXRp b25HZXRSZWxpZChvbmVyZWwpLCAmZmlsZW5hbWUsICZvcHRpb25zKTsKKyAKKyAJLyoKKyAJ ICogR2V0IHNpemUgb2YgdGhlIGZpbGUuCisgCSAqLworIAlpZiAoc3RhdChmaWxlbmFtZSwg JnN0YXRfYnVmKSA8IDApCisgCQllcmVwb3J0KEVSUk9SLAorIAkJCQkoZXJyY29kZV9mb3Jf ZmlsZV9hY2Nlc3MoKSwKKyAJCQkJIGVycm1zZygiY291bGQgbm90IHN0YXQgZmlsZSBcIiVz XCI6ICVtIiwKKyAJCQkJCQlmaWxlbmFtZSkpKTsKKyAKKyAJLyoKKyAJICogQ29udmVydCBz aXplIHRvIHBhZ2VzIGZvciB1c2UgaW4gSS9PIGNvc3QgZXN0aW1hdGUuCisgCSAqLworIAkq dG90YWxwYWdlcyA9IChzdGF0X2J1Zi5zdF9zaXplICsgKEJMQ0tTWiAtIDEpKSAvIEJMQ0tT WjsKKyAJaWYgKCp0b3RhbHBhZ2VzIDwgMSkKKyAJCSp0b3RhbHBhZ2VzID0gMTsKKyAKKyAJ LyoKKyAJICogQ3JlYXRlIENvcHlTdGF0ZSBmcm9tIEZEVyBvcHRpb25zLiAgV2UgYWx3YXlz IGFjcXVpcmUgYWxsIGNvbHVtbnMsIHNvCisgCSAqIGFzIHRvIG1hdGNoIHRoZSBleHBlY3Rl ZCBTY2FuVHVwbGVTbG90IHNpZ25hdHVyZS4KKyAJICovCisgCWNzdGF0ZSA9IEJlZ2luQ29w eUZyb20ob25lcmVsLCBmaWxlbmFtZSwgTklMLCBvcHRpb25zKTsKKyAKKyAJLyogUHJlcGFy ZSBmb3Igc2FtcGxpbmcgcm93cyAqLworIAlyc3RhdGUgPSBpbml0X3NlbGVjdGlvbl9zdGF0 ZSh0YXJncm93cyk7CisgCisgCS8qIFNldCB1cCBjYWxsYmFjayB0byBpZGVudGlmeSBlcnJv ciBsaW5lIG51bWJlci4gKi8KKyAJZXJyY29udGV4dC5jYWxsYmFjayA9IENvcHlGcm9tRXJy b3JDYWxsYmFjazsKKyAJZXJyY29udGV4dC5hcmcgPSAodm9pZCAqKSBjc3RhdGU7CisgCWVy cmNvbnRleHQucHJldmlvdXMgPSBlcnJvcl9jb250ZXh0X3N0YWNrOworIAllcnJvcl9jb250 ZXh0X3N0YWNrID0gJmVycmNvbnRleHQ7CisgCisgCWZvciAoOzspCisgCXsKKyAJCXNhbXBs ZV9pdCA9IHRydWU7CisgCisgCQkvKgorIAkJICogQ2hlY2sgZm9yIHVzZXItcmVxdWVzdGVk IGFib3J0LgorIAkJICovCisgCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOworIAorIAkJZm91 bmQgPSBOZXh0Q29weUZyb20oY3N0YXRlLCBOVUxMLCB2YWx1ZXMsIG51bGxzLCBOVUxMKTsK KyAKKyAJCWlmICghZm91bmQpCisgCQkJYnJlYWs7CisgCisgCQl0dXBsZSA9IGhlYXBfZm9y bV90dXBsZSh0dXBEZXNjLCB2YWx1ZXMsIG51bGxzKTsKKyAKKyAJCWlmIChjb25zdHIgJiYg Y29uc3RyLT5oYXNfbm90X251bGwpCisgCQl7CisgCQkJZm9yIChhdHRyQ2hrID0gMTsgYXR0 ckNoayA8PSBuYXR0czsgYXR0ckNoaysrKQorIAkJCXsKKyAJCQkJaWYgKG9uZXJlbC0+cmRf YXR0LT5hdHRyc1thdHRyQ2hrIC0gMV0tPmF0dG5vdG51bGwgJiYKKyAJCQkJCWhlYXBfYXR0 aXNudWxsKHR1cGxlLCBhdHRyQ2hrKSkKKyAJCQkJeworIAkJCQkJc2FtcGxlX2l0ID0gZmFs c2U7CisgCQkJCQlicmVhazsKKyAJCQkJfQorIAkJCX0KKyAJCX0KKyAKKyAJCWlmICghc2Ft cGxlX2l0KQorIAkJeworIAkJCWludmFscm93cyArPSAxOworIAkJCWhlYXBfZnJlZXR1cGxl KHR1cGxlKTsKKyAJCQljb250aW51ZTsKKyAJCX0KKyAKKyAJCS8qCisgCQkgKiBUaGUgZmly c3QgdGFyZ3Jvd3Mgc2FtcGxlIHJvd3MgYXJlIHNpbXBseSBjb3BpZWQgaW50byB0aGUKKyAJ CSAqIHJlc2Vydm9pci4gVGhlbiB3ZSBzdGFydCByZXBsYWNpbmcgdHVwbGVzIGluIHRoZSBz YW1wbGUKKyAJCSAqIHVudGlsIHdlIHJlYWNoIHRoZSBlbmQgb2YgdGhlIHJlbGF0aW9uLglU aGlzIGFsZ29yaXRobSBpcworIAkJICogZnJvbSBKZWZmIFZpdHRlcidzIHBhcGVyIChzZWUg ZnVsbCBjaXRhdGlvbiBiZWxvdykuIEl0CisgCQkgKiB3b3JrcyBieSByZXBlYXRlZGx5IGNv bXB1dGluZyB0aGUgbnVtYmVyIG9mIHR1cGxlcyB0byBza2lwCisgCQkgKiBiZWZvcmUgc2Vs ZWN0aW5nIGEgdHVwbGUsIHdoaWNoIHJlcGxhY2VzIGEgcmFuZG9tbHkgY2hvc2VuCisgCQkg KiBlbGVtZW50IG9mIHRoZSByZXNlcnZvaXIgKGN1cnJlbnQgc2V0IG9mIHR1cGxlcykuICBB dCBhbGwKKyAJCSAqIHRpbWVzIHRoZSByZXNlcnZvaXIgaXMgYSB0cnVlIHJhbmRvbSBzYW1w bGUgb2YgdGhlIHR1cGxlcworIAkJICogd2UndmUgcGFzc2VkIG92ZXIgc28gZmFyLCBzbyB3 aGVuIHdlIGZhbGwgb2ZmIHRoZSBlbmQgb2YKKyAJCSAqIHRoZSByZWxhdGlvbiB3ZSdyZSBk b25lLgorIAkJICovCisgCQlpZiAobnVtcm93cyA8IHRhcmdyb3dzKQorIAkJCXJvd3NbbnVt cm93cysrXSA9IGhlYXBfY29weXR1cGxlKHR1cGxlKTsKKyAJCWVsc2UKKyAJCXsKKyAJCQkv KgorIAkJCSAqIHQgaW4gVml0dGVyJ3MgcGFwZXIgaXMgdGhlIG51bWJlciBvZiByZWNvcmRz IGFscmVhZHkKKyAJCQkgKiBwcm9jZXNzZWQuICBJZiB3ZSBuZWVkIHRvIGNvbXB1dGUgYSBu ZXcgUyB2YWx1ZSwgd2UKKyAJCQkgKiBtdXN0IHVzZSB0aGUgbm90LXlldC1pbmNyZW1lbnRl ZCB2YWx1ZSBvZiBzYW1wbGVyb3dzIGFzCisgCQkJICogdC4KKyAJCQkgKi8KKyAJCQlpZiAo cm93c3Rvc2tpcCA8IDApCisgCQkJCXJvd3N0b3NraXAgPSBnZXRfbmV4dF9TKHZhbGlkcm93 cywgdGFyZ3Jvd3MsICZyc3RhdGUpOworIAorIAkJCWlmIChyb3dzdG9za2lwIDw9IDApCisg CQkJeworIAkJCQkvKgorIAkJCQkgKiBGb3VuZCBhIHN1aXRhYmxlIHR1cGxlLCBzbyBzYXZl IGl0LCByZXBsYWNpbmcgb25lCisgCQkJCSAqIG9sZCB0dXBsZSBhdCByYW5kb20KKyAJCQkJ ICovCisgCQkJCWludCBrID0gKGludCkgKHRhcmdyb3dzICogcmFuZG9tX2ZyYWN0KCkpOwor IAorIAkJCQlBc3NlcnQoayA+PSAwICYmIGsgPCB0YXJncm93cyk7CisgCQkJCWhlYXBfZnJl ZXR1cGxlKHJvd3Nba10pOworIAkJCQlyb3dzW2tdID0gaGVhcF9jb3B5dHVwbGUodHVwbGUp OworIAkJCX0KKyAKKyAJCQlyb3dzdG9za2lwIC09IDE7CisgCQl9CisgCisgCQl2YWxpZHJv d3MgKz0gMTsKKyAJCWhlYXBfZnJlZXR1cGxlKHR1cGxlKTsKKyAJfQorIAorIAkvKiBSZW1v dmUgZXJyb3IgY2FsbGJhY2suICovCisgCWVycm9yX2NvbnRleHRfc3RhY2sgPSBlcnJjb250 ZXh0LnByZXZpb3VzOworIAorIAkqdG90YWxyb3dzID0gdmFsaWRyb3dzOworIAkqdG90YWxk ZWFkcm93cyA9IDA7CisgCisgCUVuZENvcHlGcm9tKGNzdGF0ZSk7CisgCisgCXBmcmVlKHZh bHVlcyk7CisgCXBmcmVlKG51bGxzKTsKKyAKKyAJLyoKKyAJICogRW1pdCBzb21lIGludGVy ZXN0aW5nIHJlbGF0aW9uIGluZm8KKyAJICovCisgCWVyZXBvcnQoZWxldmVsLAorIAkJCShl cnJtc2coIlwiJXNcIjogc2Nhbm5lZCwgIgorIAkJCQkJImNvbnRhaW5pbmcgJWQgdmFsaWQg cm93cyBhbmQgJWQgaW52YWxpZCByb3dzOyAiCisgCQkJCQkiJWQgcm93cyBpbiBzYW1wbGUs ICVkIHRvdGFsIHJvd3MiLAorIAkJCQkJUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUob25lcmVs KSwKKyAJCQkJCShpbnQpIHZhbGlkcm93cywgaW52YWxyb3dzLAorIAkJCQkJbnVtcm93cywg KGludCkgKnRvdGFscm93cykpKTsKKyAKKyAJcmV0dXJuIG51bXJvd3M7CisgfQpkaWZmIC0t Z2l0IGEvY29udHJpYi9maWxlX2Zkdy9pbnB1dC9maWxlX2Zkdy5zb3VyY2UgYi9jb250cmli L2ZpbGVfZmR3L2lucHV0L2ZpbGVfZmR3LnNvdXJjZQppbmRleCA4ZTNkNTUzLi4yMWI2ZmI0 IDEwMDY0NAoqKiogYS9jb250cmliL2ZpbGVfZmR3L2lucHV0L2ZpbGVfZmR3LnNvdXJjZQot LS0gYi9jb250cmliL2ZpbGVfZmR3L2lucHV0L2ZpbGVfZmR3LnNvdXJjZQoqKioqKioqKioq KioqKiogRVhFQ1VURSBzdCgxMDApOwoqKiogMTExLDExNiAqKioqCi0tLSAxMTEsMTIxIC0t LS0KICBFWEVDVVRFIHN0KDEwMCk7CiAgREVBTExPQ0FURSBzdDsKICAKKyAtLSBzdGF0aXN0 aWNzIGNvbGxlY3Rpb24gdGVzdHMKKyBBTkFMWVpFIGFnZ19jc3Y7CisgU0VMRUNUIHJlbHBh Z2VzLCByZWx0dXBsZXMgRlJPTSBwZ19jbGFzcyBXSEVSRSByZWxuYW1lID0gJ2FnZ19jc3Yn OworIFNFTEVDVCAqIEZST00gcGdfc3RhdHMgV0hFUkUgdGFibGVuYW1lID0gJ2FnZ19jc3Yn OworIAogIC0tIHRhYmxlb2lkCiAgU0VMRUNUIHRhYmxlb2lkOjpyZWdjbGFzcywgYiBGUk9N IGFnZ19jc3Y7CiAgCmRpZmYgLS1naXQgYS9jb250cmliL2ZpbGVfZmR3L291dHB1dC9maWxl X2Zkdy5zb3VyY2UgYi9jb250cmliL2ZpbGVfZmR3L291dHB1dC9maWxlX2Zkdy5zb3VyY2UK aW5kZXggODRmMDc1MC4uZmUwZDY3ZiAxMDA2NDQKKioqIGEvY29udHJpYi9maWxlX2Zkdy9v dXRwdXQvZmlsZV9mZHcuc291cmNlCi0tLSBiL2NvbnRyaWIvZmlsZV9mZHcvb3V0cHV0L2Zp bGVfZmR3LnNvdXJjZQoqKioqKioqKioqKioqKiogRVhFQ1VURSBzdCgxMDApOwoqKiogMTc0 LDE3OSAqKioqCi0tLSAxNzQsMTk0IC0tLS0KICAoMSByb3cpCiAgCiAgREVBTExPQ0FURSBz dDsKKyAtLSBzdGF0aXN0aWNzIGNvbGxlY3Rpb24gdGVzdHMKKyBBTkFMWVpFIGFnZ19jc3Y7 CisgU0VMRUNUIHJlbHBhZ2VzLCByZWx0dXBsZXMgRlJPTSBwZ19jbGFzcyBXSEVSRSByZWxu YW1lID0gJ2FnZ19jc3YnOworICByZWxwYWdlcyB8IHJlbHR1cGxlcyAKKyAtLS0tLS0tLS0t Ky0tLS0tLS0tLS0tCisgICAgICAgICAxIHwgICAgICAgICAzCisgKDEgcm93KQorIAorIFNF TEVDVCAqIEZST00gcGdfc3RhdHMgV0hFUkUgdGFibGVuYW1lID0gJ2FnZ19jc3YnOworICBz Y2hlbWFuYW1lIHwgdGFibGVuYW1lIHwgYXR0bmFtZSB8IGluaGVyaXRlZCB8IG51bGxfZnJh YyB8IGF2Z193aWR0aCB8IG5fZGlzdGluY3QgfCBtb3N0X2NvbW1vbl92YWxzIHwgbW9zdF9j b21tb25fZnJlcXMgfCAgICBoaXN0b2dyYW1fYm91bmRzICAgICB8IGNvcnJlbGF0aW9uIAor IC0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LQorICBwdWJsaWMgICAgIHwgYWdnX2NzdiAgIHwgYSAgICAgICB8IGYgICAgICAgICB8ICAg ICAgICAgMCB8ICAgICAgICAgMiB8ICAgICAgICAgLTEgfCAgICAgICAgICAgICAgICAgIHwg ICAgICAgICAgICAgICAgICAgfCB7MCw0MiwxMDB9ICAgICAgICAgICAgICB8ICAgICAgICAt MC41CisgIHB1YmxpYyAgICAgfCBhZ2dfY3N2ICAgfCBiICAgICAgIHwgZiAgICAgICAgIHwg ICAgICAgICAwIHwgICAgICAgICA0IHwgICAgICAgICAtMSB8ICAgICAgICAgICAgICAgICAg fCAgICAgICAgICAgICAgICAgICB8IHswLjA5NTYxLDk5LjA5NywzMjQuNzh9IHwgICAgICAg ICAwLjUKKyAoMiByb3dzKQorIAogIC0tIHRhYmxlb2lkCiAgU0VMRUNUIHRhYmxlb2lkOjpy ZWdjbGFzcywgYiBGUk9NIGFnZ19jc3Y7CiAgIHRhYmxlb2lkIHwgICAgYiAgICAKZGlmZiAt LWdpdCBhL2RvYy9zcmMvc2dtbC9mZHdoYW5kbGVyLnNnbWwgYi9kb2Mvc3JjL3NnbWwvZmR3 aGFuZGxlci5zZ21sCmluZGV4IDc2ZmYyNDMuLjdkNjQ0M2EgMTAwNjQ0CioqKiBhL2RvYy9z cmMvc2dtbC9mZHdoYW5kbGVyLnNnbWwKLS0tIGIvZG9jL3NyYy9zZ21sL2Zkd2hhbmRsZXIu c2dtbAoqKioqKioqKioqKioqKiogRW5kRm9yZWlnblNjYW4gKEZvcmVpZ25TY2FuU3RhdGUg Km5vZGUpOwoqKiogMjI4LDIzMyAqKioqCi0tLSAyMjgsMjU3IC0tLS0KICAgICAgPC9wYXJh PgogIAogICAgICA8cGFyYT4KKyA8cHJvZ3JhbWxpc3Rpbmc+Cisgdm9pZAorIEFuYWx5emVG b3JlaWduVGFibGUgKFJlbGF0aW9uIG9uZXJlbCwKKyAgICAgICAgICAgICAgICAgICAgICBW YWN1dW1TdG10ICp2YWNzdG10LCAKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgZWxldmVs KTsKKyA8L3Byb2dyYW1saXN0aW5nPgorIAorICAgICAgQ29sbGVjdCBzdGF0aXN0aWNzIG9u IGEgZm9yZWlnbiB0YWJsZSBhbmQgc3RvcmUgdGhlIHJlc3VsdHMgaW4gdGhlCisgICAgICBw Z19jbGFzcyBhbmQgcGdfc3RhdGlzdGljcyBzeXN0ZW0gY2F0YWxvZ3MuCisgICAgICBUaGlz IGlzIG9wdGlvbmFsLCBhbmQgaWYgaW1wbGVtZW50ZWQsIGNhbGxlZCB3aGVuIDxjb21tYW5k PkFOQUxZWkUKKyAgICAgIDwvPiBjb21tYW5kIGlzIHJ1bi4KKyAgICAgIFRoZSBzdGF0aXN0 aWNzIGFyZSB1c2VkIGJ5IHRoZSBxdWVyeSBwbGFubmVyIGluIG9yZGVyIHRvIG1ha2UgZ29v ZAorICAgICAgY2hvaWNlcyBvZiBxdWVyeSBwbGFucy4KKyAgICAgIFRoZSBmdW5jdGlvbiBj YW4gYmUgaW1wbGVtZW50ZWQgYnkgd3JpdGluZyBhIHNhbXBsaW5nIGZ1bmN0aW9uIHRoYXQK KyAgICAgIGFjcXVpcmVzIGEgcmFuZG9tIHNhbXBsZSBvZiByb3dzIGZyb20gYW4gZXh0ZXJu YWwgZGF0YSBzb3VyY2UgYW5kCisgICAgICB0aGVuIGJ5IGNhbGxpbmcgPGZ1bmN0aW9uPmRv X2FuYWx5emVfcmVsPC8+LCB3aGVyZSB5b3Ugc2hvdWxkIHBhc3MKKyAgICAgIHRoZSBzYW1w bGluZyBmdW5jdGlvbiBhcyBhbiBhcmd1bWVudC4KKyAgICAgIE9yIHRoZSBmdW5jdGlvbiBj YW4gYmUgZGlyZWN0bHkgaW1wbGVtZW50ZWQgdG8gZ2V0IHRoZSBzdGF0aXN0aWNzCisgICAg ICBmcm9tIGFuIGV4dGVybmFsIGRhdGEgc291cmNlLCB0cmFuc2Zvcm0gaXQgaWYgbmVjY2Vz YXJ5LCBhbmQgc3RvcmUKKyAgICAgIGl0IGluIHRoZSBwZ19jbGFzcyBhbmQgcGdfc3RhdGlz dGljcyBzeXN0ZW0gY2F0YWxvZ3MuCisgICAgICBUaGUgZnVuY3Rpb24gbXVzdCBiZSBzZXQg dG8gTlVMTCBpZiBpdCBpc24ndCBpbXBsZW1lbnRlZC4KKyAgICAgPC9wYXJhPgorIAorICAg ICA8cGFyYT4KICAgICAgIFRoZSA8c3RydWN0bmFtZT5GZHdSb3V0aW5lPC8+IGFuZCA8c3Ry dWN0bmFtZT5GZHdQbGFuPC8+IHN0cnVjdCB0eXBlcwogICAgICAgYXJlIGRlY2xhcmVkIGlu IDxmaWxlbmFtZT5zcmMvaW5jbHVkZS9mb3JlaWduL2Zkd2FwaS5oPC8+LCB3aGljaCBzZWUK ICAgICAgIGZvciBhZGRpdGlvbmFsIGRldGFpbHMuCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3Nn bWwvbWFpbnRlbmFuY2Uuc2dtbCBiL2RvYy9zcmMvc2dtbC9tYWludGVuYW5jZS5zZ21sCmlu ZGV4IDAzY2M2YzkuLjgyNzk1ZDEgMTAwNjQ0CioqKiBhL2RvYy9zcmMvc2dtbC9tYWludGVu YW5jZS5zZ21sCi0tLSBiL2RvYy9zcmMvc2dtbC9tYWludGVuYW5jZS5zZ21sCioqKioqKioq KioqKioqKgoqKiogMjc5LDI4NCAqKioqCi0tLSAyNzksMjg4IC0tLS0KICAgICAgPGNvbW1h bmQ+QU5BTFlaRTwvPiBzdHJpY3RseSBhcyBhIGZ1bmN0aW9uIG9mIHRoZSBudW1iZXIgb2Yg cm93cwogICAgICBpbnNlcnRlZCBvciB1cGRhdGVkOyBpdCBoYXMgbm8ga25vd2xlZGdlIG9m IHdoZXRoZXIgdGhhdCB3aWxsIGxlYWQKICAgICAgdG8gbWVhbmluZ2Z1bCBzdGF0aXN0aWNh bCBjaGFuZ2VzLgorICAgICBOb3RlIHRoYXQgdGhlIGF1dG92YWN1dW0gZGFlbW9uIGRvZXMg bm90IGlzc3VlIDxjb21tYW5kPkFOQUxZWkU8Lz4KKyAgICAgY29tbWFuZHMgb24gZm9yZWln biB0YWJsZXMuICBJdCBpcyByZWNvbW1lbmRlZCB0byBydW4gbWFudWFsbHktbWFuYWdlZAor ICAgICA8Y29tbWFuZD5BTkFMWVpFPC8+IGNvbW1hbmRzIGFzIG5lZWRlZCwgd2hpY2ggdHlw aWNhbGx5IGFyZSBleGVjdXRlZAorICAgICBhY2NvcmRpbmcgdG8gYSBzY2hlZHVsZSBieSBj cm9uIG9yIFRhc2sgU2NoZWR1bGVyIHNjcmlwdHMuCiAgICAgPC9wYXJhPgogIAogICAgIDxw YXJhPgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9hbHRlcl9mb3JlaWduX3RhYmxl LnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVmL2FsdGVyX2ZvcmVpZ25fdGFibGUuc2dtbAppbmRl eCA1YzdhODZmLi45ZmJiMTA4IDEwMDY0NAoqKiogYS9kb2Mvc3JjL3NnbWwvcmVmL2FsdGVy X2ZvcmVpZ25fdGFibGUuc2dtbAotLS0gYi9kb2Mvc3JjL3NnbWwvcmVmL2FsdGVyX2ZvcmVp Z25fdGFibGUuc2dtbAoqKioqKioqKioqKioqKiogQUxURVIgRk9SRUlHTiBUQUJMRSA8cmVw bGFjZWFibGUgY2xhc3M9IgoqKiogMzYsNDEgKioqKgotLS0gMzYsNDQgLS0tLQogICAgICBE Uk9QIFsgQ09MVU1OIF0gWyBJRiBFWElTVFMgXSA8cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFN RVRFUiI+Y29sdW1uPC9yZXBsYWNlYWJsZT4gWyBSRVNUUklDVCB8IENBU0NBREUgXQogICAg ICBBTFRFUiBbIENPTFVNTiBdIDxyZXBsYWNlYWJsZSBjbGFzcz0iUEFSQU1FVEVSIj5jb2x1 bW48L3JlcGxhY2VhYmxlPiBbIFNFVCBEQVRBIF0gVFlQRSA8cmVwbGFjZWFibGUgY2xhc3M9 IlBBUkFNRVRFUiI+dHlwZTwvcmVwbGFjZWFibGU+CiAgICAgIEFMVEVSIFsgQ09MVU1OIF0g PHJlcGxhY2VhYmxlIGNsYXNzPSJQQVJBTUVURVIiPmNvbHVtbjwvcmVwbGFjZWFibGU+IHsg U0VUIHwgRFJPUCB9IE5PVCBOVUxMCisgICAgIEFMVEVSIFsgQ09MVU1OIF0gPHJlcGxhY2Vh YmxlIGNsYXNzPSJQQVJBTUVURVIiPmNvbHVtbjwvcmVwbGFjZWFibGU+IFNFVCBTVEFUSVNU SUNTIDxyZXBsYWNlYWJsZSBjbGFzcz0iUEFSQU1FVEVSIj5pbnRlZ2VyPC9yZXBsYWNlYWJs ZT4KKyAgICAgQUxURVIgWyBDT0xVTU4gXSA8cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFNRVRF UiI+Y29sdW1uPC9yZXBsYWNlYWJsZT4gU0VUICggPHJlcGxhY2VhYmxlIGNsYXNzPSJQQVJB TUVURVIiPmF0dHJpYnV0ZV9vcHRpb248L3JlcGxhY2VhYmxlPiA9IDxyZXBsYWNlYWJsZSBj bGFzcz0iUEFSQU1FVEVSIj52YWx1ZTwvcmVwbGFjZWFibGU+IFssIC4uLiBdICkKKyAgICAg QUxURVIgWyBDT0xVTU4gXSA8cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFNRVRFUiI+Y29sdW1u PC9yZXBsYWNlYWJsZT4gUkVTRVQgKCA8cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFNRVRFUiI+ YXR0cmlidXRlX29wdGlvbjwvcmVwbGFjZWFibGU+IFssIC4uLiBdICkKICAgICAgQUxURVIg WyBDT0xVTU4gXSA8cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFNRVRFUiI+Y29sdW1uPC9yZXBs YWNlYWJsZT4gT1BUSU9OUyAoIFsgQUREIHwgU0VUIHwgRFJPUCBdIDxyZXBsYWNlYWJsZSBj bGFzcz0iUEFSQU1FVEVSIj5vcHRpb248L3JlcGxhY2VhYmxlPiBbJzxyZXBsYWNlYWJsZSBj bGFzcz0iUEFSQU1FVEVSIj52YWx1ZTwvcmVwbGFjZWFibGU+J10gWywgLi4uIF0pCiAgICAg IE9XTkVSIFRPIDxyZXBsYWNlYWJsZSBjbGFzcz0iUEFSQU1FVEVSIj5uZXdfb3duZXI8L3Jl cGxhY2VhYmxlPgogICAgICBPUFRJT05TICggWyBBREQgfCBTRVQgfCBEUk9QIF0gPHJlcGxh Y2VhYmxlIGNsYXNzPSJQQVJBTUVURVIiPm9wdGlvbjwvcmVwbGFjZWFibGU+IFsnPHJlcGxh Y2VhYmxlIGNsYXNzPSJQQVJBTUVURVIiPnZhbHVlPC9yZXBsYWNlYWJsZT4nXSBbLCAuLi4g XSkKKioqKioqKioqKioqKioqIEFMVEVSIEZPUkVJR04gVEFCTEUgPHJlcGxhY2VhYmxlIGNs YXNzPSIKKioqIDk0LDk5ICoqKioKLS0tIDk3LDE0NiAtLS0tCiAgICAgPC92YXJsaXN0ZW50 cnk+CiAgCiAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgPHRlcm0+PGxpdGVyYWw+U0VUIFNU QVRJU1RJQ1M8L2xpdGVyYWw+PC90ZXJtPgorICAgICA8bGlzdGl0ZW0+CisgICAgICA8cGFy YT4KKyAgICAgICBUaGlzIGZvcm0KKyAgICAgICBzZXRzIHRoZSBwZXItY29sdW1uIHN0YXRp c3RpY3MtZ2F0aGVyaW5nIHRhcmdldCBmb3Igc3Vic2VxdWVudAorICAgICAgIDx4cmVmIGxp bmtlbmQ9InNxbC1hbmFseXplIj4gb3BlcmF0aW9ucy4KKyAgICAgICBUaGUgdGFyZ2V0IGNh biBiZSBzZXQgaW4gdGhlIHJhbmdlIDAgdG8gMTAwMDA7IGFsdGVybmF0aXZlbHksIHNldCBp dAorICAgICAgIHRvIC0xIHRvIHJldmVydCB0byB1c2luZyB0aGUgc3lzdGVtIGRlZmF1bHQg c3RhdGlzdGljcworICAgICAgIHRhcmdldCAoPHhyZWYgbGlua2VuZD0iZ3VjLWRlZmF1bHQt c3RhdGlzdGljcy10YXJnZXQiPikuCisgICAgICA8L3BhcmE+CisgICAgIDwvbGlzdGl0ZW0+ CisgICAgPC92YXJsaXN0ZW50cnk+CisgCisgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgPHRl cm0+PGxpdGVyYWw+U0VUICggPHJlcGxhY2VhYmxlIGNsYXNzPSJQQVJBTUVURVIiPmF0dHJp YnV0ZV9vcHRpb248L3JlcGxhY2VhYmxlPiA9IDxyZXBsYWNlYWJsZSBjbGFzcz0iUEFSQU1F VEVSIj52YWx1ZTwvcmVwbGFjZWFibGU+IFssIC4uLiBdICk8L2xpdGVyYWw+PC90ZXJtPgor ICAgICA8dGVybT48bGl0ZXJhbD5SRVNFVCAoIDxyZXBsYWNlYWJsZSBjbGFzcz0iUEFSQU1F VEVSIj5hdHRyaWJ1dGVfb3B0aW9uPC9yZXBsYWNlYWJsZT4gWywgLi4uIF0gKTwvbGl0ZXJh bD48L3Rlcm0+CisgICAgIDxsaXN0aXRlbT4KKyAgICAgIDxwYXJhPgorICAgICAgIFRoaXMg Zm9ybQorICAgICAgIHNldHMgb3IgcmVzZXRzIGEgcGVyLWF0dHJpYnV0ZSBvcHRpb24uICBD dXJyZW50bHksIHRoZSBvbmx5IGRlZmluZWQKKyAgICAgICBwZXItYXR0cmlidXRlIG9wdGlv biBpcyA8bGl0ZXJhbD5uX2Rpc3RpbmN0PC8+LCB3aGljaCBvdmVycmlkZXMKKyAgICAgICB0 aGUgbnVtYmVyLW9mLWRpc3RpbmN0LXZhbHVlcyBlc3RpbWF0ZXMgbWFkZSBieSBzdWJzZXF1 ZW50CisgICAgICAgPHhyZWYgbGlua2VuZD0ic3FsLWFuYWx5emUiPiBvcGVyYXRpb25zLiAK KyAgICAgICBXaGVuIHNldCB0byBhIHBvc2l0aXZlIHZhbHVlLCA8Y29tbWFuZD5BTkFMWVpF PC8+IHdpbGwgYXNzdW1lIHRoYXQKKyAgICAgICB0aGUgY29sdW1uIGNvbnRhaW5zIGV4YWN0 bHkgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgZGlzdGluY3Qgbm9ubnVsbAorICAgICAgIHZh bHVlcy4KKyAgICAgICBXaGVuIHNldCB0byBhIG5lZ2F0aXZlIHZhbHVlLCB3aGljaCBtdXN0 IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbAorICAgICAgIHRvIC0xLCA8Y29tbWFuZD5BTkFM WVpFPC8+IHdpbGwgYXNzdW1lIHRoYXQgdGhlIG51bWJlciBvZiBkaXN0aW5jdAorICAgICAg IG5vbm51bGwgdmFsdWVzIGluIHRoZSBjb2x1bW4gaXMgbGluZWFyIGluIHRoZSBzaXplIG9m IHRoZSBmb3JlaWduCisgICAgICAgdGFibGU7IHRoZSBleGFjdCBjb3VudCBpcyB0byBiZSBj b21wdXRlZCBieSBtdWx0aXBseWluZyB0aGUgZXN0aW1hdGVkCisgICAgICAgZm9yZWlnbiB0 YWJsZSBzaXplIGJ5IHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGUgZ2l2ZW4gbnVtYmVyLgor ICAgICAgIEZvciBleGFtcGxlLAorICAgICAgIGEgdmFsdWUgb2YgLTEgaW1wbGllcyB0aGF0 IGFsbCB2YWx1ZXMgaW4gdGhlIGNvbHVtbiBhcmUgZGlzdGluY3QsCisgICAgICAgd2hpbGUg YSB2YWx1ZSBvZiAtMC41IGltcGxpZXMgdGhhdCBlYWNoIHZhbHVlIGFwcGVhcnMgdHdpY2Ug b24gdGhlCisgICAgICAgYXZlcmFnZS4KKyAgICAgICBUaGlzIGNhbiBiZSB1c2VmdWwgd2hl biB0aGUgc2l6ZSBvZiB0aGUgZm9yZWlnbiB0YWJsZSBjaGFuZ2VzIG92ZXIKKyAgICAgICB0 aW1lLCBzaW5jZSB0aGUgbXVsdGlwbGljYXRpb24gYnkgdGhlIG51bWJlciBvZiByb3dzIGlu IHRoZSBmb3JlaWduCisgICAgICAgdGFibGUgaXMgbm90IHBlcmZvcm1lZCB1bnRpbCBxdWVy eSBwbGFubmluZyB0aW1lLiAgU3BlY2lmeSBhIHZhbHVlCisgICAgICAgb2YgMCB0byByZXZl cnQgdG8gZXN0aW1hdGluZyB0aGUgbnVtYmVyIG9mIGRpc3RpbmN0IHZhbHVlcyBub3JtYWxs eS4KKyAgICAgIDwvcGFyYT4KKyAgICAgPC9saXN0aXRlbT4KKyAgICA8L3Zhcmxpc3RlbnRy eT4KKyAKKyAgICA8dmFybGlzdGVudHJ5PgogICAgICA8dGVybT48bGl0ZXJhbD5PV05FUjwv bGl0ZXJhbD48L3Rlcm0+CiAgICAgIDxsaXN0aXRlbT4KICAgICAgIDxwYXJhPgpkaWZmIC0t Z2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9hbmFseXplLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVm L2FuYWx5emUuc2dtbAppbmRleCA3NTQ1ZmE1Li5mZTEzYjJiIDEwMDY0NAoqKiogYS9kb2Mv c3JjL3NnbWwvcmVmL2FuYWx5emUuc2dtbAotLS0gYi9kb2Mvc3JjL3NnbWwvcmVmL2FuYWx5 emUuc2dtbAoqKioqKioqKioqKioqKiogQU5BTFlaRSBbIFZFUkJPU0UgXSBbIDxyZXBsYWNl YWJsZSBjbGFzcwoqKiogMzksNDcgKioqKgogIAogICAgPHBhcmE+CiAgICAgV2l0aCBubyBw YXJhbWV0ZXIsIDxjb21tYW5kPkFOQUxZWkU8L2NvbW1hbmQ+IGV4YW1pbmVzIGV2ZXJ5IHRh YmxlIGluIHRoZQohICAgIGN1cnJlbnQgZGF0YWJhc2UuICBXaXRoIGEgcGFyYW1ldGVyLCA8 Y29tbWFuZD5BTkFMWVpFPC9jb21tYW5kPiBleGFtaW5lcwohICAgIG9ubHkgdGhhdCB0YWJs ZS4gIEl0IGlzIGZ1cnRoZXIgcG9zc2libGUgdG8gZ2l2ZSBhIGxpc3Qgb2YgY29sdW1uIG5h bWVzLAohICAgIGluIHdoaWNoIGNhc2Ugb25seSB0aGUgc3RhdGlzdGljcyBmb3IgdGhvc2Ug Y29sdW1ucyBhcmUgY29sbGVjdGVkLgogICAgPC9wYXJhPgogICA8L3JlZnNlY3QxPgogIAot LS0gMzksNDkgLS0tLQogIAogICAgPHBhcmE+CiAgICAgV2l0aCBubyBwYXJhbWV0ZXIsIDxj b21tYW5kPkFOQUxZWkU8L2NvbW1hbmQ+IGV4YW1pbmVzIGV2ZXJ5IHRhYmxlIGluIHRoZQoh ICAgIGN1cnJlbnQgZGF0YWJhc2UgZXhjZXB0IGZvciBmb3JlaWduIHRhYmxlcy4gIFdpdGgg YSBwYXJhbWV0ZXIsIDxjb21tYW5kPgohICAgIEFOQUxZWkU8L2NvbW1hbmQ+IGV4YW1pbmVz IG9ubHkgdGhhdCB0YWJsZS4gIEZvciBhIGZvcmVpZ24gdGFibGUsIGl0IGlzCiEgICAgbmVj ZXNzYXJ5IHRvIHNwZWNpZnkgdGhlIG5hbWUgb2YgdGhhdCB0YWJsZS4gIEl0IGlzIGZ1cnRo ZXIgcG9zc2libGUgdG8gCiEgICAgZ2l2ZSBhIGxpc3Qgb2YgY29sdW1uIG5hbWVzLCBpbiB3 aGljaCBjYXNlIG9ubHkgdGhlIHN0YXRpc3RpY3MgZm9yIHRob3NlCiEgICAgY29sdW1ucyBh cmUgY29sbGVjdGVkLgogICAgPC9wYXJhPgogICA8L3JlZnNlY3QxPgogIAoqKioqKioqKioq KioqKiogQU5BTFlaRSBbIFZFUkJPU0UgXSBbIDxyZXBsYWNlYWJsZSBjbGFzcwoqKiogNjMs NjkgKioqKgogICAgICA8bGlzdGl0ZW0+CiAgICAgICA8cGFyYT4KICAgICAgICBUaGUgbmFt ZSAocG9zc2libHkgc2NoZW1hLXF1YWxpZmllZCkgb2YgYSBzcGVjaWZpYyB0YWJsZSB0bwoh ICAgICAgIGFuYWx5emUuIERlZmF1bHRzIHRvIGFsbCB0YWJsZXMgaW4gdGhlIGN1cnJlbnQg ZGF0YWJhc2UuCiAgICAgICA8L3BhcmE+CiAgICAgIDwvbGlzdGl0ZW0+CiAgICAgPC92YXJs aXN0ZW50cnk+Ci0tLSA2NSw3MiAtLS0tCiAgICAgIDxsaXN0aXRlbT4KICAgICAgIDxwYXJh PgogICAgICAgIFRoZSBuYW1lIChwb3NzaWJseSBzY2hlbWEtcXVhbGlmaWVkKSBvZiBhIHNw ZWNpZmljIHRhYmxlIHRvCiEgICAgICAgYW5hbHl6ZS4gRGVmYXVsdHMgdG8gYWxsIHRhYmxl cyBpbiB0aGUgY3VycmVudCBkYXRhYmFzZSBleGNlcHQKISAgICAgICBmb3IgZm9yZWlnbiB0 YWJsZXMuCiAgICAgICA8L3BhcmE+CiAgICAgIDwvbGlzdGl0ZW0+CiAgICAgPC92YXJsaXN0 ZW50cnk+CioqKioqKioqKioqKioqKiBBTkFMWVpFIFsgVkVSQk9TRSBdIFsgPHJlcGxhY2Vh YmxlIGNsYXNzCioqKiAxMzcsMTQzICoqKioKICAgICBJbiByYXJlIHNpdHVhdGlvbnMsIHRo aXMgbm9uLWRldGVybWluaXNtIHdpbGwgY2F1c2UgdGhlIHBsYW5uZXIncwogICAgIGNob2lj ZXMgb2YgcXVlcnkgcGxhbnMgdG8gY2hhbmdlIGFmdGVyIDxjb21tYW5kPkFOQUxZWkU8L2Nv bW1hbmQ+IGlzIHJ1bi4KICAgICBUbyBhdm9pZCB0aGlzLCByYWlzZSB0aGUgYW1vdW50IG9m IHN0YXRpc3RpY3MgY29sbGVjdGVkIGJ5CiEgICAgPGNvbW1hbmQ+QU5BTFlaRTwvY29tbWFu ZD4sIGFzIGRlc2NyaWJlZCBiZWxvdy4KICAgIDwvcGFyYT4KICAKICAgIDxwYXJhPgotLS0g MTQwLDE0OCAtLS0tCiAgICAgSW4gcmFyZSBzaXR1YXRpb25zLCB0aGlzIG5vbi1kZXRlcm1p bmlzbSB3aWxsIGNhdXNlIHRoZSBwbGFubmVyJ3MKICAgICBjaG9pY2VzIG9mIHF1ZXJ5IHBs YW5zIHRvIGNoYW5nZSBhZnRlciA8Y29tbWFuZD5BTkFMWVpFPC9jb21tYW5kPiBpcyBydW4u CiAgICAgVG8gYXZvaWQgdGhpcywgcmFpc2UgdGhlIGFtb3VudCBvZiBzdGF0aXN0aWNzIGNv bGxlY3RlZCBieQohICAgIDxjb21tYW5kPkFOQUxZWkU8L2NvbW1hbmQ+LCBhcyBkZXNjcmli ZWQgYmVsb3cuICBOb3RlIHRoYXQgdGhlIHRpbWUKISAgICBuZWVkZWQgdG8gYW5hbHl6ZSBv biBmb3JlaWduIHRhYmxlcyBkZXBlbmRzIG9uIHRoZSBpbXBsZW1lbnRhdGlvbiBvZgohICAg IHRoZSBmb3JlaWduIGRhdGEgd3JhcHBlciB2aWEgd2hpY2ggc3VjaCB0YWJsZXMgYXJlIGF0 dGFjaGVkLgogICAgPC9wYXJhPgogIAogICAgPHBhcmE+CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9jb21tYW5kcy9hbmFseXplLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9hbmFseXpl LmMKaW5kZXggYzNkMzk1OC4uZmE1ZmE3ZSAxMDA2NDQKKioqIGEvc3JjL2JhY2tlbmQvY29t bWFuZHMvYW5hbHl6ZS5jCi0tLSBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2FuYWx5emUuYwoq KioqKioqKioqKioqKioKKioqIDIzLDI4ICoqKioKLS0tIDIzLDI5IC0tLS0KICAjaW5jbHVk ZSAiYWNjZXNzL3hhY3QuaCIKICAjaW5jbHVkZSAiY2F0YWxvZy9pbmRleC5oIgogICNpbmNs dWRlICJjYXRhbG9nL2luZGV4aW5nLmgiCisgI2luY2x1ZGUgImNhdGFsb2cvcGdfY2xhc3Mu aCIKICAjaW5jbHVkZSAiY2F0YWxvZy9wZ19jb2xsYXRpb24uaCIKICAjaW5jbHVkZSAiY2F0 YWxvZy9wZ19pbmhlcml0c19mbi5oIgogICNpbmNsdWRlICJjYXRhbG9nL3BnX25hbWVzcGFj ZS5oIgoqKioqKioqKioqKioqKioKKioqIDMwLDM1ICoqKioKLS0tIDMxLDM4IC0tLS0KICAj aW5jbHVkZSAiY29tbWFuZHMvdGFibGVjbWRzLmgiCiAgI2luY2x1ZGUgImNvbW1hbmRzL3Zh Y3V1bS5oIgogICNpbmNsdWRlICJleGVjdXRvci9leGVjdXRvci5oIgorICNpbmNsdWRlICJm b3JlaWduL2ZvcmVpZ24uaCIKKyAjaW5jbHVkZSAiZm9yZWlnbi9mZHdhcGkuaCIKICAjaW5j bHVkZSAibWlzY2FkbWluLmgiCiAgI2luY2x1ZGUgIm5vZGVzL25vZGVGdW5jcy5oIgogICNp bmNsdWRlICJwYXJzZXIvcGFyc2Vfb3Blci5oIgoqKioqKioqKioqKioqKiogdHlwZWRlZiBz dHJ1Y3QgQW5sSW5kZXhEYXRhCioqKiA3OCw5MSAqKioqCiAgaW50CQkJZGVmYXVsdF9zdGF0 aXN0aWNzX3RhcmdldCA9IDEwMDsKICAKICAvKiBBIGZldyB2YXJpYWJsZXMgdGhhdCBkb24n dCBzZWVtIHdvcnRoIHBhc3NpbmcgYXJvdW5kIGFzIHBhcmFtZXRlcnMgKi8KLSBzdGF0aWMg aW50CWVsZXZlbCA9IC0xOwotIAogIHN0YXRpYyBNZW1vcnlDb250ZXh0IGFubF9jb250ZXh0 ID0gTlVMTDsKICAKICBzdGF0aWMgQnVmZmVyQWNjZXNzU3RyYXRlZ3kgdmFjX3N0cmF0ZWd5 OwogIAogIAotIHN0YXRpYyB2b2lkIGRvX2FuYWx5emVfcmVsKFJlbGF0aW9uIG9uZXJlbCwg VmFjdXVtU3RtdCAqdmFjc3RtdCwgYm9vbCBpbmgpOwogIHN0YXRpYyB2b2lkIEJsb2NrU2Ft cGxlcl9Jbml0KEJsb2NrU2FtcGxlciBicywgQmxvY2tOdW1iZXIgbmJsb2NrcywKICAJCQkJ ICBpbnQgc2FtcGxlc2l6ZSk7CiAgc3RhdGljIGJvb2wgQmxvY2tTYW1wbGVyX0hhc01vcmUo QmxvY2tTYW1wbGVyIGJzKTsKLS0tIDgxLDkxIC0tLS0KKioqKioqKioqKioqKioqIHN0YXRp YyB2b2lkIGNvbXB1dGVfaW5kZXhfc3RhdHMoUmVsYXRpb24KKioqIDk2LDExMCAqKioqCiAg CQkJCQlNZW1vcnlDb250ZXh0IGNvbF9jb250ZXh0KTsKICBzdGF0aWMgVmFjQXR0clN0YXRz ICpleGFtaW5lX2F0dHJpYnV0ZShSZWxhdGlvbiBvbmVyZWwsIGludCBhdHRudW0sCiAgCQkJ CSAgTm9kZSAqaW5kZXhfZXhwcik7CiEgc3RhdGljIGludCBhY3F1aXJlX3NhbXBsZV9yb3dz KFJlbGF0aW9uIG9uZXJlbCwgSGVhcFR1cGxlICpyb3dzLAohIAkJCQkJaW50IHRhcmdyb3dz LCBkb3VibGUgKnRvdGFscm93cywgZG91YmxlICp0b3RhbGRlYWRyb3dzKTsKISBzdGF0aWMg ZG91YmxlIHJhbmRvbV9mcmFjdCh2b2lkKTsKISBzdGF0aWMgZG91YmxlIGluaXRfc2VsZWN0 aW9uX3N0YXRlKGludCBuKTsKISBzdGF0aWMgZG91YmxlIGdldF9uZXh0X1MoZG91YmxlIHQs IGludCBuLCBkb3VibGUgKnN0YXRlcHRyKTsKISBzdGF0aWMgaW50CWNvbXBhcmVfcm93cyhj b25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKTsKICBzdGF0aWMgaW50IGFjcXVpcmVfaW5o ZXJpdGVkX3NhbXBsZV9yb3dzKFJlbGF0aW9uIG9uZXJlbCwKICAJCQkJCQkJICBIZWFwVHVw bGUgKnJvd3MsIGludCB0YXJncm93cywKISAJCQkJCQkJICBkb3VibGUgKnRvdGFscm93cywg ZG91YmxlICp0b3RhbGRlYWRyb3dzKTsKICBzdGF0aWMgdm9pZCB1cGRhdGVfYXR0c3RhdHMo T2lkIHJlbGlkLCBib29sIGluaCwKICAJCQkJaW50IG5hdHRzLCBWYWNBdHRyU3RhdHMgKip2 YWNhdHRyc3RhdHMpOwogIHN0YXRpYyBEYXR1bSBzdGRfZmV0Y2hfZnVuYyhWYWNBdHRyU3Rh dHNQIHN0YXRzLCBpbnQgcm93bnVtLCBib29sICppc051bGwpOwotLS0gOTYsMTEwIC0tLS0K ICAJCQkJCU1lbW9yeUNvbnRleHQgY29sX2NvbnRleHQpOwogIHN0YXRpYyBWYWNBdHRyU3Rh dHMgKmV4YW1pbmVfYXR0cmlidXRlKFJlbGF0aW9uIG9uZXJlbCwgaW50IGF0dG51bSwKICAJ CQkJICBOb2RlICppbmRleF9leHByKTsKISBzdGF0aWMgaW50IGFjcXVpcmVfc2FtcGxlX3Jv d3MoUmVsYXRpb24gb25lcmVsLAohIAkJCQkJCQkgICBIZWFwVHVwbGUgKnJvd3MsIGludCB0 YXJncm93cywKISAJCQkJCQkJICAgZG91YmxlICp0b3RhbHJvd3MsIGRvdWJsZSAqdG90YWxk ZWFkcm93cywKISAJCQkJCQkJICAgQmxvY2tOdW1iZXIgKnRvdGFscGFnZXMsIGludCBlbGV2 ZWwpOwogIHN0YXRpYyBpbnQgYWNxdWlyZV9pbmhlcml0ZWRfc2FtcGxlX3Jvd3MoUmVsYXRp b24gb25lcmVsLAogIAkJCQkJCQkgIEhlYXBUdXBsZSAqcm93cywgaW50IHRhcmdyb3dzLAoh IAkJCQkJCQkgIGRvdWJsZSAqdG90YWxyb3dzLCBkb3VibGUgKnRvdGFsZGVhZHJvd3MsCiEg CQkJCQkJCSAgQmxvY2tOdW1iZXIgKnRvdGFscGFnZXMsIGludCBlbGV2ZWwpOwohIHN0YXRp YyBpbnQJY29tcGFyZV9yb3dzKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpOwogIHN0 YXRpYyB2b2lkIHVwZGF0ZV9hdHRzdGF0cyhPaWQgcmVsaWQsIGJvb2wgaW5oLAogIAkJCQlp bnQgbmF0dHMsIFZhY0F0dHJTdGF0cyAqKnZhY2F0dHJzdGF0cyk7CiAgc3RhdGljIERhdHVt IHN0ZF9mZXRjaF9mdW5jKFZhY0F0dHJTdGF0c1Agc3RhdHMsIGludCByb3dudW0sIGJvb2wg KmlzTnVsbCk7CioqKioqKioqKioqKioqKiBzdGF0aWMgYm9vbCBzdGRfdHlwYW5hbHl6ZShW YWNBdHRyU3RhdHMgCioqKiAxMTksMTI1ICoqKioKLS0tIDExOSwxMjcgLS0tLQogIHZvaWQK ICBhbmFseXplX3JlbChPaWQgcmVsaWQsIFZhY3V1bVN0bXQgKnZhY3N0bXQsIEJ1ZmZlckFj Y2Vzc1N0cmF0ZWd5IGJzdHJhdGVneSkKICB7CisgCWludAkJCWVsZXZlbDsKICAJUmVsYXRp b24Jb25lcmVsOworIAlGZHdSb3V0aW5lICpmZHdyb3V0aW5lOwogIAogIAkvKiBTZXQgdXAg c3RhdGljIHZhcmlhYmxlcyAqLwogIAlpZiAodmFjc3RtdC0+b3B0aW9ucyAmIFZBQ09QVF9W RVJCT1NFKQoqKioqKioqKioqKioqKiogYW5hbHl6ZV9yZWwoT2lkIHJlbGlkLCBWYWN1dW1T dG10ICp2YWNzdAoqKiogMTg0LDE5MyAqKioqCiAgCX0KICAKICAJLyoKISAJICogQ2hlY2sg dGhhdCBpdCdzIGEgcGxhaW4gdGFibGU7IHdlIHVzZWQgdG8gZG8gdGhpcyBpbiBnZXRfcmVs X29pZHMoKSBidXQKISAJICogc2VlbXMgc2FmZXIgdG8gY2hlY2sgYWZ0ZXIgd2UndmUgbG9j a2VkIHRoZSByZWxhdGlvbi4KICAJICovCiEgCWlmIChvbmVyZWwtPnJkX3JlbC0+cmVsa2lu ZCAhPSBSRUxLSU5EX1JFTEFUSU9OKQogIAl7CiAgCQkvKiBObyBuZWVkIGZvciBhIFdBUk5J TkcgaWYgd2UgYWxyZWFkeSBjb21wbGFpbmVkIGR1cmluZyBWQUNVVU0gKi8KICAJCWlmICgh KHZhY3N0bXQtPm9wdGlvbnMgJiBWQUNPUFRfVkFDVVVNKSkKLS0tIDE4NiwxOTcgLS0tLQog IAl9CiAgCiAgCS8qCiEgCSAqIENoZWNrIHRoYXQgaXQncyBhIHBsYWluIHRhYmxlIG9yIGZv cmVpZ24gdGFibGU7IHdlIHVzZWQgdG8gZG8gdGhpcwohIAkgKiBpbiBnZXRfcmVsX29pZHMo KSBidXQgc2VlbXMgc2FmZXIgdG8gY2hlY2sgYWZ0ZXIgd2UndmUgbG9ja2VkIHRoZQohIAkg KiByZWxhdGlvbi4KICAJICovCiEgCWlmIChvbmVyZWwtPnJkX3JlbC0+cmVsa2luZCAhPSBS RUxLSU5EX1JFTEFUSU9OICYmCiEgCQlvbmVyZWwtPnJkX3JlbC0+cmVsa2luZCAhPSBSRUxL SU5EX0ZPUkVJR05fVEFCTEUpCiAgCXsKICAJCS8qIE5vIG5lZWQgZm9yIGEgV0FSTklORyBp ZiB3ZSBhbHJlYWR5IGNvbXBsYWluZWQgZHVyaW5nIFZBQ1VVTSAqLwogIAkJaWYgKCEodmFj c3RtdC0+b3B0aW9ucyAmIFZBQ09QVF9WQUNVVU0pKQoqKioqKioqKioqKioqKiogYW5hbHl6 ZV9yZWwoT2lkIHJlbGlkLCBWYWN1dW1TdG10ICp2YWNzdAoqKiogMjExLDIxNyAqKioqCiAg CX0KICAKICAJLyoKISAJICogV2UgY2FuIEFOQUxZWkUgYW55IHRhYmxlIGV4Y2VwdCBwZ19z dGF0aXN0aWMuIFNlZSB1cGRhdGVfYXR0c3RhdHMKICAJICovCiAgCWlmIChSZWxhdGlvbkdl dFJlbGlkKG9uZXJlbCkgPT0gU3RhdGlzdGljUmVsYXRpb25JZCkKICAJewotLS0gMjE1LDIy MyAtLS0tCiAgCX0KICAKICAJLyoKISAJICogV2UgY2FuIEFOQUxZWkUgYW55IHRhYmxlIGV4 Y2VwdCBwZ19zdGF0aXN0aWMuICBTZWUgdXBkYXRlX2F0dHN0YXRzLiAgSW4KISAJICogYWRk aXRpb24sIHdlIGNhbiBBTkFMWVpFIGZvcmVpZ24gdGFibGVzIGlmIEFuYWx5emVGb3JlaWdu VGFibGUgY2FsbGJhY2sKISAJICogcm91dGluZXMgb2YgdW5kZXJseWluZyBmb3JlaWduLWRh dGEgd3JhcHBlcnMgYXJlIGltcGxlbWVudGVkLgogIAkgKi8KICAJaWYgKFJlbGF0aW9uR2V0 UmVsaWQob25lcmVsKSA9PSBTdGF0aXN0aWNSZWxhdGlvbklkKQogIAl7CioqKioqKioqKioq KioqKiBhbmFseXplX3JlbChPaWQgcmVsaWQsIFZhY3V1bVN0bXQgKnZhY3N0CioqKiAyMTks MjI0ICoqKioKLS0tIDIyNSwyNDQgLS0tLQogIAkJcmV0dXJuOwogIAl9CiAgCisgCWlmIChv bmVyZWwtPnJkX3JlbC0+cmVsa2luZCA9PSBSRUxLSU5EX0ZPUkVJR05fVEFCTEUpCisgCXsK KyAgCQlmZHdyb3V0aW5lID0gR2V0RmR3Um91dGluZUJ5UmVsSWQoUmVsYXRpb25HZXRSZWxp ZChvbmVyZWwpKTsKKyAKKyAJCWlmIChmZHdyb3V0aW5lLT5BbmFseXplRm9yZWlnblRhYmxl ID09IE5VTEwpCisgCQl7CisgCQkJZXJlcG9ydChXQVJOSU5HLAorIAkJCQkJKGVycm1zZygi c2tpcHBpbmcgXCIlc1wiIC0tLSB1bmRlcmx5aW5nIGZvcmVpZ24tZGF0YSB3cmFwcGVyIGNh bm5vdCBhbmFseXplIGl0IiwKKyAJCQkJCQkJUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUob25l cmVsKSkpKTsKKyAJCQlyZWxhdGlvbl9jbG9zZShvbmVyZWwsIFNoYXJlVXBkYXRlRXhjbHVz aXZlTG9jayk7CisgCQkJcmV0dXJuOworIAkJfQorIAl9CisgCiAgCS8qCiAgCSAqIE9LLCBs ZXQncyBkbyBpdC4gIEZpcnN0IGxldCBvdGhlciBiYWNrZW5kcyBrbm93IEknbSBpbiBBTkFM WVpFLgogIAkgKi8KKioqKioqKioqKioqKioqIGFuYWx5emVfcmVsKE9pZCByZWxpZCwgVmFj dXVtU3RtdCAqdmFjc3QKKioqIDIyNiwyNDEgKioqKgogIAlNeVBnWGFjdC0+dmFjdXVtRmxh Z3MgfD0gUFJPQ19JTl9BTkFMWVpFOwogIAlMV0xvY2tSZWxlYXNlKFByb2NBcnJheUxvY2sp OwogIAohIAkvKgohIAkgKiBEbyB0aGUgbm9ybWFsIG5vbi1yZWN1cnNpdmUgQU5BTFlaRS4K ISAJICovCiEgCWRvX2FuYWx5emVfcmVsKG9uZXJlbCwgdmFjc3RtdCwgZmFsc2UpOwogIAoh IAkvKgohIAkgKiBJZiB0aGVyZSBhcmUgY2hpbGQgdGFibGVzLCBkbyByZWN1cnNpdmUgQU5B TFlaRS4KISAJICovCiEgCWlmIChvbmVyZWwtPnJkX3JlbC0+cmVsaGFzc3ViY2xhc3MpCiEg CQlkb19hbmFseXplX3JlbChvbmVyZWwsIHZhY3N0bXQsIHRydWUpOwogIAogIAkvKgogIAkg KiBDbG9zZSBzb3VyY2UgcmVsYXRpb24gbm93LCBidXQga2VlcCBsb2NrIHNvIHRoYXQgbm8g b25lIGRlbGV0ZXMgaXQKLS0tIDI0NiwyODMgLS0tLQogIAlNeVBnWGFjdC0+dmFjdXVtRmxh Z3MgfD0gUFJPQ19JTl9BTkFMWVpFOwogIAlMV0xvY2tSZWxlYXNlKFByb2NBcnJheUxvY2sp OwogIAohIAlpZiAob25lcmVsLT5yZF9yZWwtPnJlbGtpbmQgPT0gUkVMS0lORF9GT1JFSUdO X1RBQkxFKQohIAl7CiEgCQllcmVwb3J0KGVsZXZlbCwKISAJCQkJKGVycm1zZygiYW5hbHl6 aW5nIFwiJXMuJXNcIiIsCiEgCQkJCQkJZ2V0X25hbWVzcGFjZV9uYW1lKFJlbGF0aW9uR2V0 TmFtZXNwYWNlKG9uZXJlbCkpLAohIAkJCQkJCVJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKG9u ZXJlbCkpKSk7CiEgCQlmZHdyb3V0aW5lLT5BbmFseXplRm9yZWlnblRhYmxlKG9uZXJlbCwg dmFjc3RtdCwgZWxldmVsKTsKISAJfQohIAllbHNlCiEgCXsKISAJCS8qCiEgCQkgKiBEbyB0 aGUgbm9ybWFsIG5vbi1yZWN1cnNpdmUgQU5BTFlaRS4KISAJCSAqLwohIAkJZXJlcG9ydChl bGV2ZWwsCiEgCQkJCShlcnJtc2coImFuYWx5emluZyBcIiVzLiVzXCIiLAohIAkJCQkJCWdl dF9uYW1lc3BhY2VfbmFtZShSZWxhdGlvbkdldE5hbWVzcGFjZShvbmVyZWwpKSwKISAJCQkJ CQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShvbmVyZWwpKSkpOwohIAkJZG9fYW5hbHl6ZV9y ZWwob25lcmVsLCB2YWNzdG10LCBlbGV2ZWwsIGZhbHNlLCBhY3F1aXJlX3NhbXBsZV9yb3dz KTsKICAKISAJCS8qCiEgCQkgKiBJZiB0aGVyZSBhcmUgY2hpbGQgdGFibGVzLCBkbyByZWN1 cnNpdmUgQU5BTFlaRS4KISAJCSAqLwohIAkJaWYgKG9uZXJlbC0+cmRfcmVsLT5yZWxoYXNz dWJjbGFzcykKISAJCXsKISAJCQllcmVwb3J0KGVsZXZlbCwKISAJCQkJCShlcnJtc2coImFu YWx5emluZyBcIiVzLiVzXCIgaW5oZXJpdGFuY2UgdHJlZSIsCiEgCQkJCQkJCWdldF9uYW1l c3BhY2VfbmFtZShSZWxhdGlvbkdldE5hbWVzcGFjZShvbmVyZWwpKSwKISAJCQkJCQkJUmVs YXRpb25HZXRSZWxhdGlvbk5hbWUob25lcmVsKSkpKTsKISAJCQlkb19hbmFseXplX3JlbChv bmVyZWwsIHZhY3N0bXQsIGVsZXZlbCwgdHJ1ZSwKISAJCQkJCQkgICBhY3F1aXJlX2luaGVy aXRlZF9zYW1wbGVfcm93cyk7CiEgCQl9CiEgCX0KICAKICAJLyoKICAJICogQ2xvc2Ugc291 cmNlIHJlbGF0aW9uIG5vdywgYnV0IGtlZXAgbG9jayBzbyB0aGF0IG5vIG9uZSBkZWxldGVz IGl0CioqKioqKioqKioqKioqKiBhbmFseXplX3JlbChPaWQgcmVsaWQsIFZhY3V1bVN0bXQg KnZhY3N0CioqKiAyNTcsMjY0ICoqKioKICAvKgogICAqCWRvX2FuYWx5emVfcmVsKCkgLS0g YW5hbHl6ZSBvbmUgcmVsYXRpb24sIHJlY3Vyc2l2ZWx5IG9yIG5vdAogICAqLwohIHN0YXRp YyB2b2lkCiEgZG9fYW5hbHl6ZV9yZWwoUmVsYXRpb24gb25lcmVsLCBWYWN1dW1TdG10ICp2 YWNzdG10LCBib29sIGluaCkKICB7CiAgCWludAkJCWF0dHJfY250LAogIAkJCQl0Y250LAot LS0gMjk5LDMwNyAtLS0tCiAgLyoKICAgKglkb19hbmFseXplX3JlbCgpIC0tIGFuYWx5emUg b25lIHJlbGF0aW9uLCByZWN1cnNpdmVseSBvciBub3QKICAgKi8KISB2b2lkCiEgZG9fYW5h bHl6ZV9yZWwoUmVsYXRpb24gb25lcmVsLCBWYWN1dW1TdG10ICp2YWNzdG10LCBpbnQgZWxl dmVsLCAKISAJCQkgICBib29sIGluaCwgU2FtcGxlUm93QWNxdWlyZUZ1bmMgYWNxdWlyZWZ1 bmMpCiAgewogIAlpbnQJCQlhdHRyX2NudCwKICAJCQkJdGNudCwKKioqKioqKioqKioqKioq IGRvX2FuYWx5emVfcmVsKFJlbGF0aW9uIG9uZXJlbCwgVmFjdXVtU3QKKioqIDI3MywyNzgg KioqKgotLS0gMzE2LDMyMiAtLS0tCiAgCQkJCW51bXJvd3M7CiAgCWRvdWJsZQkJdG90YWxy b3dzLAogIAkJCQl0b3RhbGRlYWRyb3dzOworIAlCbG9ja051bWJlciB0b3RhbHBhZ2VzOwog IAlIZWFwVHVwbGUgICpyb3dzOwogIAlQR1JVc2FnZQlydTA7CiAgCVRpbWVzdGFtcFR6IHN0 YXJ0dGltZSA9IDA7CioqKioqKioqKioqKioqKiBkb19hbmFseXplX3JlbChSZWxhdGlvbiBv bmVyZWwsIFZhY3V1bVN0CioqKiAyODEsMjk3ICoqKioKICAJaW50CQkJc2F2ZV9zZWNfY29u dGV4dDsKICAJaW50CQkJc2F2ZV9uZXN0bGV2ZWw7CiAgCi0gCWlmIChpbmgpCi0gCQllcmVw b3J0KGVsZXZlbCwKLSAJCQkJKGVycm1zZygiYW5hbHl6aW5nIFwiJXMuJXNcIiBpbmhlcml0 YW5jZSB0cmVlIiwKLSAJCQkJCQlnZXRfbmFtZXNwYWNlX25hbWUoUmVsYXRpb25HZXROYW1l c3BhY2Uob25lcmVsKSksCi0gCQkJCQkJUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUob25lcmVs KSkpKTsKLSAJZWxzZQotIAkJZXJlcG9ydChlbGV2ZWwsCi0gCQkJCShlcnJtc2coImFuYWx5 emluZyBcIiVzLiVzXCIiLAotIAkJCQkJCWdldF9uYW1lc3BhY2VfbmFtZShSZWxhdGlvbkdl dE5hbWVzcGFjZShvbmVyZWwpKSwKLSAJCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShv bmVyZWwpKSkpOwotIAogIAkvKgogIAkgKiBTZXQgdXAgYSB3b3JraW5nIGNvbnRleHQgc28g dGhhdCB3ZSBjYW4gZWFzaWx5IGZyZWUgd2hhdGV2ZXIganVuayBnZXRzCiAgCSAqIGNyZWF0 ZWQuCi0tLSAzMjUsMzMwIC0tLS0KKioqKioqKioqKioqKioqIGRvX2FuYWx5emVfcmVsKFJl bGF0aW9uIG9uZXJlbCwgVmFjdXVtU3QKKioqIDQ0OSw0NTkgKioqKgogIAkgKi8KICAJcm93 cyA9IChIZWFwVHVwbGUgKikgcGFsbG9jKHRhcmdyb3dzICogc2l6ZW9mKEhlYXBUdXBsZSkp OwogIAlpZiAoaW5oKQohIAkJbnVtcm93cyA9IGFjcXVpcmVfaW5oZXJpdGVkX3NhbXBsZV9y b3dzKG9uZXJlbCwgcm93cywgdGFyZ3Jvd3MsCiEgCQkJCQkJCQkJCQkJJnRvdGFscm93cywg JnRvdGFsZGVhZHJvd3MpOwogIAllbHNlCiEgCQludW1yb3dzID0gYWNxdWlyZV9zYW1wbGVf cm93cyhvbmVyZWwsIHJvd3MsIHRhcmdyb3dzLAohIAkJCQkJCQkJCSAgJnRvdGFscm93cywg JnRvdGFsZGVhZHJvd3MpOwogIAogIAkvKgogIAkgKiBDb21wdXRlIHRoZSBzdGF0aXN0aWNz LglUZW1wb3JhcnkgcmVzdWx0cyBkdXJpbmcgdGhlIGNhbGN1bGF0aW9ucyBmb3IKLS0tIDQ4 Miw0OTQgLS0tLQogIAkgKi8KICAJcm93cyA9IChIZWFwVHVwbGUgKikgcGFsbG9jKHRhcmdy b3dzICogc2l6ZW9mKEhlYXBUdXBsZSkpOwogIAlpZiAoaW5oKQohIAkJbnVtcm93cyA9IGFj cXVpcmVmdW5jKG9uZXJlbCwgcm93cywgdGFyZ3Jvd3MsCiEgCQkJCQkJCSAgJnRvdGFscm93 cywgJnRvdGFsZGVhZHJvd3MsCiEgCQkJCQkJCSAgTlVMTCwgZWxldmVsKTsKICAJZWxzZQoh IAkJbnVtcm93cyA9IGFjcXVpcmVmdW5jKG9uZXJlbCwgcm93cywgdGFyZ3Jvd3MsCiEgCQkJ CQkJCSAgJnRvdGFscm93cywgJnRvdGFsZGVhZHJvd3MsCiEgCQkJCQkJCSAgJnRvdGFscGFn ZXMsIGVsZXZlbCk7CiAgCiAgCS8qCiAgCSAqIENvbXB1dGUgdGhlIHN0YXRpc3RpY3MuCVRl bXBvcmFyeSByZXN1bHRzIGR1cmluZyB0aGUgY2FsY3VsYXRpb25zIGZvcgoqKioqKioqKioq KioqKiogZG9fYW5hbHl6ZV9yZWwoUmVsYXRpb24gb25lcmVsLCBWYWN1dW1TdAoqKiogNTM0 LDU0MCAqKioqCiAgCSAqLwogIAlpZiAoIWluaCkKICAJCXZhY191cGRhdGVfcmVsc3RhdHMo b25lcmVsLAohIAkJCQkJCQlSZWxhdGlvbkdldE51bWJlck9mQmxvY2tzKG9uZXJlbCksCiAg CQkJCQkJCXRvdGFscm93cywKICAJCQkJCQkJdmlzaWJpbGl0eW1hcF9jb3VudChvbmVyZWwp LAogIAkJCQkJCQloYXNpbmRleCwKLS0tIDU2OSw1NzUgLS0tLQogIAkgKi8KICAJaWYgKCFp bmgpCiAgCQl2YWNfdXBkYXRlX3JlbHN0YXRzKG9uZXJlbCwKISAJCQkJCQkJdG90YWxwYWdl cywKICAJCQkJCQkJdG90YWxyb3dzLAogIAkJCQkJCQl2aXNpYmlsaXR5bWFwX2NvdW50KG9u ZXJlbCksCiAgCQkJCQkJCWhhc2luZGV4LAoqKioqKioqKioqKioqKiogQmxvY2tTYW1wbGVy X05leHQoQmxvY2tTYW1wbGVyIGJzKQoqKiogMTAxNywxMDIzICoqKioKICAgKi8KICBzdGF0 aWMgaW50CiAgYWNxdWlyZV9zYW1wbGVfcm93cyhSZWxhdGlvbiBvbmVyZWwsIEhlYXBUdXBs ZSAqcm93cywgaW50IHRhcmdyb3dzLAohIAkJCQkJZG91YmxlICp0b3RhbHJvd3MsIGRvdWJs ZSAqdG90YWxkZWFkcm93cykKICB7CiAgCWludAkJCW51bXJvd3MgPSAwOwkvKiAjIHJvd3Mg bm93IGluIHJlc2Vydm9pciAqLwogIAlkb3VibGUJCXNhbXBsZXJvd3MgPSAwOyAvKiB0b3Rh bCAjIHJvd3MgY29sbGVjdGVkICovCi0tLSAxMDUyLDEwNTkgLS0tLQogICAqLwogIHN0YXRp YyBpbnQKICBhY3F1aXJlX3NhbXBsZV9yb3dzKFJlbGF0aW9uIG9uZXJlbCwgSGVhcFR1cGxl ICpyb3dzLCBpbnQgdGFyZ3Jvd3MsCiEgCQkJCQlkb3VibGUgKnRvdGFscm93cywgZG91Ymxl ICp0b3RhbGRlYWRyb3dzLAohIAkJCQkJQmxvY2tOdW1iZXIgKnRvdGFscGFnZXMsIGludCBl bGV2ZWwpCiAgewogIAlpbnQJCQludW1yb3dzID0gMDsJLyogIyByb3dzIG5vdyBpbiByZXNl cnZvaXIgKi8KICAJZG91YmxlCQlzYW1wbGVyb3dzID0gMDsgLyogdG90YWwgIyByb3dzIGNv bGxlY3RlZCAqLwoqKioqKioqKioqKioqKiogYWNxdWlyZV9zYW1wbGVfcm93cyhSZWxhdGlv biBvbmVyZWwsIEhlYQoqKiogMTAzMiwxMDM3ICoqKioKLS0tIDEwNjgsMTA3NSAtLS0tCiAg CUFzc2VydCh0YXJncm93cyA+IDApOwogIAogIAl0b3RhbGJsb2NrcyA9IFJlbGF0aW9uR2V0 TnVtYmVyT2ZCbG9ja3Mob25lcmVsKTsKKyAJaWYgKHRvdGFscGFnZXMpCisgCQkqdG90YWxw YWdlcyA9IHRvdGFsYmxvY2tzOwogIAogIAkvKiBOZWVkIGEgY3V0b2ZmIHhtaW4gZm9yIEhl YXBUdXBsZVNhdGlzZmllc1ZhY3V1bSAqLwogIAlPbGRlc3RYbWluID0gR2V0T2xkZXN0WG1p bihvbmVyZWwtPnJkX3JlbC0+cmVsaXNzaGFyZWQsIHRydWUpOwoqKioqKioqKioqKioqKiog YWNxdWlyZV9zYW1wbGVfcm93cyhSZWxhdGlvbiBvbmVyZWwsIEhlYQoqKiogMTI1NCwxMjYw ICoqKioKICB9CiAgCiAgLyogU2VsZWN0IGEgcmFuZG9tIHZhbHVlIFIgdW5pZm9ybWx5IGRp c3RyaWJ1dGVkIGluICgwIC0gMSkgKi8KISBzdGF0aWMgZG91YmxlCiAgcmFuZG9tX2ZyYWN0 KHZvaWQpCiAgewogIAlyZXR1cm4gKChkb3VibGUpIHJhbmRvbSgpICsgMSkgLyAoKGRvdWJs ZSkgTUFYX1JBTkRPTV9WQUxVRSArIDIpOwotLS0gMTI5MiwxMjk4IC0tLS0KICB9CiAgCiAg LyogU2VsZWN0IGEgcmFuZG9tIHZhbHVlIFIgdW5pZm9ybWx5IGRpc3RyaWJ1dGVkIGluICgw IC0gMSkgKi8KISBkb3VibGUKICByYW5kb21fZnJhY3Qodm9pZCkKICB7CiAgCXJldHVybiAo KGRvdWJsZSkgcmFuZG9tKCkgKyAxKSAvICgoZG91YmxlKSBNQVhfUkFORE9NX1ZBTFVFICsg Mik7CioqKioqKioqKioqKioqKiByYW5kb21fZnJhY3Qodm9pZCkKKioqIDEyNzQsMTI4NyAq KioqCiAgICogZGV0ZXJtaW5lcyB0aGUgbnVtYmVyIG9mIHJlY29yZHMgdG8gc2tpcCBiZWZv cmUgdGhlIG5leHQgcmVjb3JkIGlzCiAgICogcHJvY2Vzc2VkLgogICAqLwohIHN0YXRpYyBk b3VibGUKICBpbml0X3NlbGVjdGlvbl9zdGF0ZShpbnQgbikKICB7CiAgCS8qIEluaXRpYWwg dmFsdWUgb2YgVyAoZm9yIHVzZSB3aGVuIEFsZ29yaXRobSBaIGlzIGZpcnN0IGFwcGxpZWQp ICovCiAgCXJldHVybiBleHAoLWxvZyhyYW5kb21fZnJhY3QoKSkgLyBuKTsKICB9CiAgCiEg c3RhdGljIGRvdWJsZQogIGdldF9uZXh0X1MoZG91YmxlIHQsIGludCBuLCBkb3VibGUgKnN0 YXRlcHRyKQogIHsKICAJZG91YmxlCQlTOwotLS0gMTMxMiwxMzI1IC0tLS0KICAgKiBkZXRl cm1pbmVzIHRoZSBudW1iZXIgb2YgcmVjb3JkcyB0byBza2lwIGJlZm9yZSB0aGUgbmV4dCBy ZWNvcmQgaXMKICAgKiBwcm9jZXNzZWQuCiAgICovCiEgZG91YmxlCiAgaW5pdF9zZWxlY3Rp b25fc3RhdGUoaW50IG4pCiAgewogIAkvKiBJbml0aWFsIHZhbHVlIG9mIFcgKGZvciB1c2Ug d2hlbiBBbGdvcml0aG0gWiBpcyBmaXJzdCBhcHBsaWVkKSAqLwogIAlyZXR1cm4gZXhwKC1s b2cocmFuZG9tX2ZyYWN0KCkpIC8gbik7CiAgfQogIAohIGRvdWJsZQogIGdldF9uZXh0X1Mo ZG91YmxlIHQsIGludCBuLCBkb3VibGUgKnN0YXRlcHRyKQogIHsKICAJZG91YmxlCQlTOwoq KioqKioqKioqKioqKiogY29tcGFyZV9yb3dzKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQg KgoqKiogMTM5NywxNDAzICoqKioKICAgKi8KICBzdGF0aWMgaW50CiAgYWNxdWlyZV9pbmhl cml0ZWRfc2FtcGxlX3Jvd3MoUmVsYXRpb24gb25lcmVsLCBIZWFwVHVwbGUgKnJvd3MsIGlu dCB0YXJncm93cywKISAJCQkJCQkJICBkb3VibGUgKnRvdGFscm93cywgZG91YmxlICp0b3Rh bGRlYWRyb3dzKQogIHsKICAJTGlzdAkgICAqdGFibGVPSURzOwogIAlSZWxhdGlvbiAgICpy ZWxzOwotLS0gMTQzNSwxNDQyIC0tLS0KICAgKi8KICBzdGF0aWMgaW50CiAgYWNxdWlyZV9p bmhlcml0ZWRfc2FtcGxlX3Jvd3MoUmVsYXRpb24gb25lcmVsLCBIZWFwVHVwbGUgKnJvd3Ms IGludCB0YXJncm93cywKISAJCQkJCQkJICBkb3VibGUgKnRvdGFscm93cywgZG91YmxlICp0 b3RhbGRlYWRyb3dzLAohIAkJCQkJCQkgIEJsb2NrTnVtYmVyICp0b3RhbHBhZ2VzLCBpbnQg ZWxldmVsKQogIHsKICAJTGlzdAkgICAqdGFibGVPSURzOwogIAlSZWxhdGlvbiAgICpyZWxz OwoqKioqKioqKioqKioqKiogYWNxdWlyZV9pbmhlcml0ZWRfc2FtcGxlX3Jvd3MoUmVsYXRp b24gbwoqKiogMTQ2MCwxNDY1ICoqKioKLS0tIDE0OTksMTUwNiAtLS0tCiAgCQl0b3RhbGJs b2NrcyArPSByZWxibG9ja3NbbnJlbHNdOwogIAkJbnJlbHMrKzsKICAJfQorIAlpZiAodG90 YWxwYWdlcykKKyAJICAqdG90YWxwYWdlcyA9IHRvdGFsYmxvY2tzOwogIAogIAkvKgogIAkg KiBOb3cgc2FtcGxlIHJvd3MgZnJvbSBlYWNoIHJlbGF0aW9uLCBwcm9wb3J0aW9uYWxseSB0 byBpdHMgZnJhY3Rpb24gb2YKKioqKioqKioqKioqKioqIGFjcXVpcmVfaW5oZXJpdGVkX3Nh bXBsZV9yb3dzKFJlbGF0aW9uIG8KKioqIDE0OTMsMTQ5OSAqKioqCiAgCQkJCQkJCQkJCQkJ cm93cyArIG51bXJvd3MsCiAgCQkJCQkJCQkJCQkJY2hpbGR0YXJncm93cywKICAJCQkJCQkJ CQkJCQkmdHJvd3MsCiEgCQkJCQkJCQkJCQkJJnRkcm93cyk7CiAgCiAgCQkJCS8qIFdlIG1h eSBuZWVkIHRvIGNvbnZlcnQgZnJvbSBjaGlsZCdzIHJvd3R5cGUgdG8gcGFyZW50J3MgKi8K ICAJCQkJaWYgKGNoaWxkcm93cyA+IDAgJiYKLS0tIDE1MzQsMTU0MiAtLS0tCiAgCQkJCQkJ CQkJCQkJcm93cyArIG51bXJvd3MsCiAgCQkJCQkJCQkJCQkJY2hpbGR0YXJncm93cywKICAJ CQkJCQkJCQkJCQkmdHJvd3MsCiEgCQkJCQkJCQkJCQkJJnRkcm93cywKISAJCQkJCQkJCQkJ CQlOVUxMLAohIAkJCQkJCQkJCQkJCWVsZXZlbCk7CiAgCiAgCQkJCS8qIFdlIG1heSBuZWVk IHRvIGNvbnZlcnQgZnJvbSBjaGlsZCdzIHJvd3R5cGUgdG8gcGFyZW50J3MgKi8KICAJCQkJ aWYgKGNoaWxkcm93cyA+IDAgJiYKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRz L3RhYmxlY21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKaW5kZXgg MWVlMjAxYy4uOWU3YzA2MyAxMDA2NDQKKioqIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFi bGVjbWRzLmMKLS0tIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKKioqKioq KioqKioqKioqIHN0YXRpYyB2b2lkIEFUUHJlcFNldFN0YXRpc3RpY3MoUmVsYXRpb24KKioq IDMxNywzMjIgKioqKgotLS0gMzE3LDMyNCAtLS0tCiAgCQkJCQlOb2RlICpuZXdWYWx1ZSwg TE9DS01PREUgbG9ja21vZGUpOwogIHN0YXRpYyB2b2lkIEFURXhlY1NldFN0YXRpc3RpY3Mo UmVsYXRpb24gcmVsLCBjb25zdCBjaGFyICpjb2xOYW1lLAogIAkJCQkJTm9kZSAqbmV3VmFs dWUsIExPQ0tNT0RFIGxvY2ttb2RlKTsKKyBzdGF0aWMgdm9pZCBBVFByZXBTZXRPcHRpb25z KFJlbGF0aW9uIHJlbCwgY29uc3QgY2hhciAqY29sTmFtZSwKKyAJCQkJIE5vZGUgKm9wdGlv bnMsIExPQ0tNT0RFIGxvY2ttb2RlKTsKICBzdGF0aWMgdm9pZCBBVEV4ZWNTZXRPcHRpb25z KFJlbGF0aW9uIHJlbCwgY29uc3QgY2hhciAqY29sTmFtZSwKICAJCQkJIE5vZGUgKm9wdGlv bnMsIGJvb2wgaXNSZXNldCwgTE9DS01PREUgbG9ja21vZGUpOwogIHN0YXRpYyB2b2lkIEFU RXhlY1NldFN0b3JhZ2UoUmVsYXRpb24gcmVsLCBjb25zdCBjaGFyICpjb2xOYW1lLAoqKioq KioqKioqKioqKiogQVRQcmVwQ21kKExpc3QgKip3cXVldWUsIFJlbGF0aW9uIHJlbCwgQQoq KiogMjkxNSwyOTIxICoqKioKICAJCQlicmVhazsKICAJCWNhc2UgQVRfU2V0T3B0aW9uczoJ CS8qIEFMVEVSIENPTFVNTiBTRVQgKCBvcHRpb25zICkgKi8KICAJCWNhc2UgQVRfUmVzZXRP cHRpb25zOgkvKiBBTFRFUiBDT0xVTU4gUkVTRVQgKCBvcHRpb25zICkgKi8KISAJCQlBVFNp bXBsZVBlcm1pc3Npb25zKHJlbCwgQVRUX1RBQkxFIHwgQVRUX0lOREVYKTsKICAJCQkvKiBU aGlzIGNvbW1hbmQgbmV2ZXIgcmVjdXJzZXMgKi8KICAJCQlwYXNzID0gQVRfUEFTU19NSVND OwogIAkJCWJyZWFrOwotLS0gMjkxNywyOTI0IC0tLS0KICAJCQlicmVhazsKICAJCWNhc2Ug QVRfU2V0T3B0aW9uczoJCS8qIEFMVEVSIENPTFVNTiBTRVQgKCBvcHRpb25zICkgKi8KICAJ CWNhc2UgQVRfUmVzZXRPcHRpb25zOgkvKiBBTFRFUiBDT0xVTU4gUkVTRVQgKCBvcHRpb25z ICkgKi8KISAJCQlBVFNpbXBsZVBlcm1pc3Npb25zKHJlbCwgQVRUX1RBQkxFIHwgQVRUX0lO REVYIHwgQVRUX0ZPUkVJR05fVEFCTEUpOwohIAkJCUFUUHJlcFNldE9wdGlvbnMocmVsLCBj bWQtPm5hbWUsIGNtZC0+ZGVmLCBsb2NrbW9kZSk7CiAgCQkJLyogVGhpcyBjb21tYW5kIG5l dmVyIHJlY3Vyc2VzICovCiAgCQkJcGFzcyA9IEFUX1BBU1NfTUlTQzsKICAJCQlicmVhazsK KioqKioqKioqKioqKioqIEFUUHJlcFNldFN0YXRpc3RpY3MoUmVsYXRpb24gcmVsLCBjb25z dCAKKioqIDQ4NTEsNDg2MCAqKioqCiAgCSAqIGFsbG93U3lzdGVtVGFibGVNb2RzIHRvIGJl IHR1cm5lZCBvbi4KICAJICovCiAgCWlmIChyZWwtPnJkX3JlbC0+cmVsa2luZCAhPSBSRUxL SU5EX1JFTEFUSU9OICYmCiEgCQlyZWwtPnJkX3JlbC0+cmVsa2luZCAhPSBSRUxLSU5EX0lO REVYKQogIAkJZXJlcG9ydChFUlJPUiwKICAJCQkJKGVycmNvZGUoRVJSQ09ERV9XUk9OR19P QkpFQ1RfVFlQRSksCiEgCQkJCSBlcnJtc2coIlwiJXNcIiBpcyBub3QgYSB0YWJsZSBvciBp bmRleCIsCiAgCQkJCQkJUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSkpKTsKICAKICAJ LyogUGVybWlzc2lvbnMgY2hlY2tzICovCi0tLSA0ODU0LDQ4NjQgLS0tLQogIAkgKiBhbGxv d1N5c3RlbVRhYmxlTW9kcyB0byBiZSB0dXJuZWQgb24uCiAgCSAqLwogIAlpZiAocmVsLT5y ZF9yZWwtPnJlbGtpbmQgIT0gUkVMS0lORF9SRUxBVElPTiAmJgohIAkJcmVsLT5yZF9yZWwt PnJlbGtpbmQgIT0gUkVMS0lORF9JTkRFWCAmJgohIAkJcmVsLT5yZF9yZWwtPnJlbGtpbmQg IT0gUkVMS0lORF9GT1JFSUdOX1RBQkxFKQogIAkJZXJlcG9ydChFUlJPUiwKICAJCQkJKGVy cmNvZGUoRVJSQ09ERV9XUk9OR19PQkpFQ1RfVFlQRSksCiEgCQkJCSBlcnJtc2coIlwiJXNc IiBpcyBub3QgYSB0YWJsZSwgaW5kZXggb3IgZm9yZWlnbiB0YWJsZSIsCiAgCQkJCQkJUmVs YXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSkpKTsKICAKICAJLyogUGVybWlzc2lvbnMgY2hl Y2tzICovCioqKioqKioqKioqKioqKiBBVEV4ZWNTZXRTdGF0aXN0aWNzKFJlbGF0aW9uIHJl bCwgY29uc3QgCioqKiA0OTIzLDQ5MjggKioqKgotLS0gNDkyNyw0OTUyIC0tLS0KICB9CiAg CiAgc3RhdGljIHZvaWQKKyBBVFByZXBTZXRPcHRpb25zKFJlbGF0aW9uIHJlbCwgY29uc3Qg Y2hhciAqY29sTmFtZSwgTm9kZSAqb3B0aW9ucywKKyAJCQkJIExPQ0tNT0RFIGxvY2ttb2Rl KQorIHsKKyAJaWYgKHJlbC0+cmRfcmVsLT5yZWxraW5kID09IFJFTEtJTkRfRk9SRUlHTl9U QUJMRSkKKyAJeworIAkJTGlzdENlbGwgICAqY2VsbDsKKyAKKyAJCWZvcmVhY2goY2VsbCwg KExpc3QgKikgb3B0aW9ucykKKyAJCXsKKyAJCQlEZWZFbGVtICAgICpkZWYgPSAoRGVmRWxl bSAqKSBsZmlyc3QoY2VsbCk7CisgCisgCQkJaWYgKHBnX3N0cmNhc2VjbXAoZGVmLT5kZWZu YW1lLCAibl9kaXN0aW5jdF9pbmhlcml0ZWQiKSA9PSAwKQorIAkJCQllcmVwb3J0KEVSUk9S LAorIAkJCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKyAJ CQkJCQkgZXJybXNnKCJjYW5ub3Qgc2V0IFwibl9kaXN0aW5jdF9pbmhlcml0ZWRcIiBmb3Ig Zm9yZWlnbiB0YWJsZXMiKSkpOworIAkJfQorIAl9CisgfQorIAorIHN0YXRpYyB2b2lkCiAg QVRFeGVjU2V0T3B0aW9ucyhSZWxhdGlvbiByZWwsIGNvbnN0IGNoYXIgKmNvbE5hbWUsIE5v ZGUgKm9wdGlvbnMsCiAgCQkJCSBib29sIGlzUmVzZXQsIExPQ0tNT0RFIGxvY2ttb2RlKQog IHsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5jIGIvc3JjL2Jpbi9wc3Fs L2Rlc2NyaWJlLmMKaW5kZXggZGNhZmRkMi4uODAyYWJmMiAxMDA2NDQKKioqIGEvc3JjL2Jp bi9wc3FsL2Rlc2NyaWJlLmMKLS0tIGIvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMKKioqKioq KioqKioqKioqIGRlc2NyaWJlT25lVGFibGVEZXRhaWxzKGNvbnN0IGNoYXIgKnNjaGUKKioq IDEwOTksMTEwNSAqKioqCiAgCWJvb2wJCXByaW50VGFibGVJbml0aWFsaXplZCA9IGZhbHNl OwogIAlpbnQJCQlpOwogIAljaGFyCSAgICp2aWV3X2RlZiA9IE5VTEw7CiEgCWNoYXIJICAg KmhlYWRlcnNbNl07CiAgCWNoYXIJICAqKnNlcV92YWx1ZXMgPSBOVUxMOwogIAljaGFyCSAg Kiptb2RpZmllcnMgPSBOVUxMOwogIAljaGFyCSAgKipwdHI7Ci0tLSAxMDk5LDExMDUgLS0t LQogIAlib29sCQlwcmludFRhYmxlSW5pdGlhbGl6ZWQgPSBmYWxzZTsKICAJaW50CQkJaTsK ICAJY2hhcgkgICAqdmlld19kZWYgPSBOVUxMOwohIAljaGFyCSAgICpoZWFkZXJzWzddOwog IAljaGFyCSAgKipzZXFfdmFsdWVzID0gTlVMTDsKICAJY2hhcgkgICoqbW9kaWZpZXJzID0g TlVMTDsKICAJY2hhcgkgICoqcHRyOwoqKioqKioqKioqKioqKiogZGVzY3JpYmVPbmVUYWJs ZURldGFpbHMoY29uc3QgY2hhciAqc2NoZQoqKiogMTM5MCwxMzk2ICoqKioKICAJaWYgKHZl cmJvc2UpCiAgCXsKICAJCWhlYWRlcnNbY29scysrXSA9IGdldHRleHRfbm9vcCgiU3RvcmFn ZSIpOwohIAkJaWYgKHRhYmxlaW5mby5yZWxraW5kID09ICdyJykKICAJCQloZWFkZXJzW2Nv bHMrK10gPSBnZXR0ZXh0X25vb3AoIlN0YXRzIHRhcmdldCIpOwogIAkJLyogQ29sdW1uIGNv bW1lbnRzLCBpZiB0aGUgcmVsa2luZCBzdXBwb3J0cyB0aGlzIGZlYXR1cmUuICovCiAgCQlp ZiAodGFibGVpbmZvLnJlbGtpbmQgPT0gJ3InIHx8IHRhYmxlaW5mby5yZWxraW5kID09ICd2 JyB8fAotLS0gMTM5MCwxMzk2IC0tLS0KICAJaWYgKHZlcmJvc2UpCiAgCXsKICAJCWhlYWRl cnNbY29scysrXSA9IGdldHRleHRfbm9vcCgiU3RvcmFnZSIpOwohIAkJaWYgKHRhYmxlaW5m by5yZWxraW5kID09ICdyJyB8fCB0YWJsZWluZm8ucmVsa2luZCA9PSAnZicpCiAgCQkJaGVh ZGVyc1tjb2xzKytdID0gZ2V0dGV4dF9ub29wKCJTdGF0cyB0YXJnZXQiKTsKICAJCS8qIENv bHVtbiBjb21tZW50cywgaWYgdGhlIHJlbGtpbmQgc3VwcG9ydHMgdGhpcyBmZWF0dXJlLiAq LwogIAkJaWYgKHRhYmxlaW5mby5yZWxraW5kID09ICdyJyB8fCB0YWJsZWluZm8ucmVsa2lu ZCA9PSAndicgfHwKKioqKioqKioqKioqKioqIGRlc2NyaWJlT25lVGFibGVEZXRhaWxzKGNv bnN0IGNoYXIgKnNjaGUKKioqIDE0OTMsMTQ5OSAqKioqCiAgCQkJCQkJCSAgZmFsc2UsIGZh bHNlKTsKICAKICAJCQkvKiBTdGF0aXN0aWNzIHRhcmdldCwgaWYgdGhlIHJlbGtpbmQgc3Vw cG9ydHMgdGhpcyBmZWF0dXJlICovCiEgCQkJaWYgKHRhYmxlaW5mby5yZWxraW5kID09ICdy JykKICAJCQl7CiAgCQkJCXByaW50VGFibGVBZGRDZWxsKCZjb250LCBQUWdldHZhbHVlKHJl cywgaSwgZmlyc3R2Y29sICsgMSksCiAgCQkJCQkJCQkgIGZhbHNlLCBmYWxzZSk7Ci0tLSAx NDkzLDE0OTkgLS0tLQogIAkJCQkJCQkgIGZhbHNlLCBmYWxzZSk7CiAgCiAgCQkJLyogU3Rh dGlzdGljcyB0YXJnZXQsIGlmIHRoZSByZWxraW5kIHN1cHBvcnRzIHRoaXMgZmVhdHVyZSAq LwohIAkJCWlmICh0YWJsZWluZm8ucmVsa2luZCA9PSAncicgfHwgdGFibGVpbmZvLnJlbGtp bmQgPT0gJ2YnKQogIAkJCXsKICAJCQkJcHJpbnRUYWJsZUFkZENlbGwoJmNvbnQsIFBRZ2V0 dmFsdWUocmVzLCBpLCBmaXJzdHZjb2wgKyAxKSwKICAJCQkJCQkJCSAgZmFsc2UsIGZhbHNl KTsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcHNxbC90YWItY29tcGxldGUuYyBiL3NyYy9iaW4v cHNxbC90YWItY29tcGxldGUuYwppbmRleCBiYjBmYTA5Li4xNTA3YTYxIDEwMDY0NAoqKiog YS9zcmMvYmluL3BzcWwvdGFiLWNvbXBsZXRlLmMKLS0tIGIvc3JjL2Jpbi9wc3FsL3RhYi1j b21wbGV0ZS5jCioqKioqKioqKioqKioqKiBzdGF0aWMgY29uc3QgU2NoZW1hUXVlcnkgUXVl cnlfZm9yX2xpc3RfCioqKiAzOTksNDA0ICoqKioKLS0tIDM5OSw0MTkgLS0tLQogIAlOVUxM CiAgfTsKICAKKyBzdGF0aWMgY29uc3QgU2NoZW1hUXVlcnkgUXVlcnlfZm9yX2xpc3Rfb2Zf dGYgPSB7CisgCS8qIGNhdG5hbWUgKi8KKyAJInBnX2NhdGFsb2cucGdfY2xhc3MgYyIsCisg CS8qIHNlbGNvbmRpdGlvbiAqLworIAkiYy5yZWxraW5kIElOICgncicsICdmJykiLAorIAkv KiB2aXNjb25kaXRpb24gKi8KKyAJInBnX2NhdGFsb2cucGdfdGFibGVfaXNfdmlzaWJsZShj Lm9pZCkiLAorIAkvKiBuYW1lc3BhY2UgKi8KKyAJImMucmVsbmFtZXNwYWNlIiwKKyAJLyog cmVzdWx0ICovCisgCSJwZ19jYXRhbG9nLnF1b3RlX2lkZW50KGMucmVsbmFtZSkiLAorIAkv KiBxdWFscmVzdWx0ICovCisgCU5VTEwKKyB9OworIAogIHN0YXRpYyBjb25zdCBTY2hlbWFR dWVyeSBRdWVyeV9mb3JfbGlzdF9vZl92aWV3cyA9IHsKICAJLyogY2F0bmFtZSAqLwogIAki cGdfY2F0YWxvZy5wZ19jbGFzcyBjIiwKKioqKioqKioqKioqKioqIHBzcWxfY29tcGxldGlv bihjaGFyICp0ZXh0LCBpbnQgc3RhcnQsIGkKKioqIDI3NjksMjc3NSAqKioqCiAgLyogQU5B TFlaRSAqLwogIAkvKiBJZiB0aGUgcHJldmlvdXMgd29yZCBpcyBBTkFMWVpFLCBwcm9kdWNl IGxpc3Qgb2YgdGFibGVzICovCiAgCWVsc2UgaWYgKHBnX3N0cmNhc2VjbXAocHJldl93ZCwg IkFOQUxZWkUiKSA9PSAwKQohIAkJQ09NUExFVEVfV0lUSF9TQ0hFTUFfUVVFUlkoUXVlcnlf Zm9yX2xpc3Rfb2ZfdGFibGVzLCBOVUxMKTsKICAKICAvKiBXSEVSRSAqLwogIAkvKiBTaW1w bGUgY2FzZSBvZiB0aGUgd29yZCBiZWZvcmUgdGhlIHdoZXJlIGJlaW5nIHRoZSB0YWJsZSBu YW1lICovCi0tLSAyNzg0LDI3OTAgLS0tLQogIC8qIEFOQUxZWkUgKi8KICAJLyogSWYgdGhl IHByZXZpb3VzIHdvcmQgaXMgQU5BTFlaRSwgcHJvZHVjZSBsaXN0IG9mIHRhYmxlcyAqLwog IAllbHNlIGlmIChwZ19zdHJjYXNlY21wKHByZXZfd2QsICJBTkFMWVpFIikgPT0gMCkKISAJ CUNPTVBMRVRFX1dJVEhfU0NIRU1BX1FVRVJZKFF1ZXJ5X2Zvcl9saXN0X29mX3RmLCBOVUxM KTsKICAKICAvKiBXSEVSRSAqLwogIAkvKiBTaW1wbGUgY2FzZSBvZiB0aGUgd29yZCBiZWZv cmUgdGhlIHdoZXJlIGJlaW5nIHRoZSB0YWJsZSBuYW1lICovCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9jb21tYW5kcy92YWN1dW0uaCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3ZhY3V1 bS5oCmluZGV4IGQ4ZmQwY2EuLjBjMjRlMmQgMTAwNjQ0CioqKiBhL3NyYy9pbmNsdWRlL2Nv bW1hbmRzL3ZhY3V1bS5oCi0tLSBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3ZhY3V1bS5oCioq KioqKioqKioqKioqKiBleHRlcm4gdm9pZCBsYXp5X3ZhY3V1bV9yZWwoUmVsYXRpb24gb25l CioqKiAxNjUsMTcxICoqKioKLS0tIDE2NSwxODIgLS0tLQogIAkJCQlCdWZmZXJBY2Nlc3NT dHJhdGVneSBic3RyYXRlZ3kpOwogIAogIC8qIGluIGNvbW1hbmRzL2FuYWx5emUuYyAqLwor IHR5cGVkZWYgaW50ICgqU2FtcGxlUm93QWNxdWlyZUZ1bmMpIChSZWxhdGlvbiBvbmVyZWws IEhlYXBUdXBsZSAqcm93cywKKyAJCQkJCQkJCQkgaW50IHRhcmdyb3dzLAorIAkJCQkJCQkJ CSBkb3VibGUgKnRvdGFscm93cywgZG91YmxlICp0b3RhbGRlYWRyb3dzLAorIAkJCQkJCQkJ CSBCbG9ja051bWJlciAqdG90YWxwYWdlcywgaW50IGVsZXZlbCk7CisgCiAgZXh0ZXJuIHZv aWQgYW5hbHl6ZV9yZWwoT2lkIHJlbGlkLCBWYWN1dW1TdG10ICp2YWNzdG10LAogIAkJCUJ1 ZmZlckFjY2Vzc1N0cmF0ZWd5IGJzdHJhdGVneSk7CisgZXh0ZXJuIHZvaWQgZG9fYW5hbHl6 ZV9yZWwoUmVsYXRpb24gb25lcmVsLCBWYWN1dW1TdG10ICp2YWNzdG10LCBpbnQgZWxldmVs LCAKKyAJCQkJCQkgICBib29sIGluaCwgU2FtcGxlUm93QWNxdWlyZUZ1bmMgYWNxdWlyZWZ1 bmMpOworIGV4dGVybiBkb3VibGUgcmFuZG9tX2ZyYWN0KHZvaWQpOworIGV4dGVybiBkb3Vi bGUgaW5pdF9zZWxlY3Rpb25fc3RhdGUoaW50IG4pOworIGV4dGVybiBkb3VibGUgZ2V0X25l eHRfUyhkb3VibGUgdCwgaW50IG4sIGRvdWJsZSAqc3RhdGVwdHIpOworIAogIAogICNlbmRp ZiAgIC8qIFZBQ1VVTV9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9mb3JlaWduL2Zk d2FwaS5oIGIvc3JjL2luY2x1ZGUvZm9yZWlnbi9mZHdhcGkuaAppbmRleCAzMzc4YmE5Li4z NTQzZjE1IDEwMDY0NAoqKiogYS9zcmMvaW5jbHVkZS9mb3JlaWduL2Zkd2FwaS5oCi0tLSBi L3NyYy9pbmNsdWRlL2ZvcmVpZ24vZmR3YXBpLmgKKioqKioqKioqKioqKioqCioqKiAxMiwx OSAqKioqCi0tLSAxMiwyMSAtLS0tCiAgI2lmbmRlZiBGRFdBUElfSAogICNkZWZpbmUgRkRX QVBJX0gKICAKKyAjaW5jbHVkZSAiZm9yZWlnbi9mb3JlaWduLmgiCiAgI2luY2x1ZGUgIm5v ZGVzL2V4ZWNub2Rlcy5oIgogICNpbmNsdWRlICJub2Rlcy9yZWxhdGlvbi5oIgorICNpbmNs dWRlICJ1dGlscy9yZWwuaCIKICAKICAvKiBUbyBhdm9pZCBpbmNsdWRpbmcgZXhwbGFpbi5o IGhlcmUsIHJlZmVyZW5jZSBFeHBsYWluU3RhdGUgdGh1czogKi8KICBzdHJ1Y3QgRXhwbGFp blN0YXRlOwoqKioqKioqKioqKioqKiogdHlwZWRlZiB2b2lkICgqUmVTY2FuRm9yZWlnblNj YW5fZnVuY3RpbwoqKiogNjgsNzMgKioqKgotLS0gNzAsNzggLS0tLQogIAogIHR5cGVkZWYg dm9pZCAoKkVuZEZvcmVpZ25TY2FuX2Z1bmN0aW9uKSAoRm9yZWlnblNjYW5TdGF0ZSAqbm9k ZSk7CiAgCisgdHlwZWRlZiB2b2lkICgqQW5hbHl6ZUZvcmVpZ25UYWJsZV9mdW5jdGlvbikg KFJlbGF0aW9uIHJlbGF0aW9uLAorIAkJCQkJCQkJCQkJICBWYWN1dW1TdG10ICp2YWNzdG10 LAorIAkJCQkJCQkJCQkJICBpbnQgZWxldmVsKTsKICAKICAvKgogICAqIEZkd1JvdXRpbmUg aXMgdGhlIHN0cnVjdCByZXR1cm5lZCBieSBhIGZvcmVpZ24tZGF0YSB3cmFwcGVyJ3MgaGFu ZGxlcgoqKioqKioqKioqKioqKiogdHlwZWRlZiBzdHJ1Y3QgRmR3Um91dGluZQoqKiogODIs OTMgKioqKgotLS0gODcsMTA5IC0tLS0KICB7CiAgCU5vZGVUYWcJCXR5cGU7CiAgCisgCS8q CisgCSAqIFRoZXNlIGhhbmRsZXJzIGFyZSByZXF1aXJlZCB0byBleGVjdXRlIHNpbXBsZSBz Y2FucyBvbiBhIGZvcmVpZ24KKyAJICogdGFibGUuICBJZiBhbnkgb2YgdGhlbSB3YXMgc2V0 IHRvIE5VTEwsIHNjYW5zIG9uIGEgZm9yZWlnbiB0YWJsZQorIAkgKiBtYW5hZ2VkIGJ5IEZE VyB3b3VsZCBmYWlsLgorIAkgKi8KICAJUGxhbkZvcmVpZ25TY2FuX2Z1bmN0aW9uIFBsYW5G b3JlaWduU2NhbjsKICAJRXhwbGFpbkZvcmVpZ25TY2FuX2Z1bmN0aW9uIEV4cGxhaW5Gb3Jl aWduU2NhbjsKICAJQmVnaW5Gb3JlaWduU2Nhbl9mdW5jdGlvbiBCZWdpbkZvcmVpZ25TY2Fu OwogIAlJdGVyYXRlRm9yZWlnblNjYW5fZnVuY3Rpb24gSXRlcmF0ZUZvcmVpZ25TY2FuOwog IAlSZVNjYW5Gb3JlaWduU2Nhbl9mdW5jdGlvbiBSZVNjYW5Gb3JlaWduU2NhbjsKICAJRW5k Rm9yZWlnblNjYW5fZnVuY3Rpb24gRW5kRm9yZWlnblNjYW47CisgCisgCS8qCisgCSAqIEhh bmRsZXJzIGJlbG93IGFyZSBvcHRpb25hbC4gIFlvdSBjYW4gc2V0IGFueSBvZiB0aGVtIHRv IE5VTEwgdG8KKyAJICogdGVsbCBQb3N0Z3JlU1FMIHRoYXQgRkRXIGRvZXNuJ3QgaGF2ZSB0 aGUgY2FwYWJpbGl0eS4KKyAJICovCisgCUFuYWx5emVGb3JlaWduVGFibGVfZnVuY3Rpb24g QW5hbHl6ZUZvcmVpZ25UYWJsZTsKICB9IEZkd1JvdXRpbmU7CiAgCiAgCmRpZmYgLS1naXQg YS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2ZvcmVpZ25fZGF0YS5vdXQgYi9zcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL2ZvcmVpZ25fZGF0YS5vdXQKaW5kZXggMTIyZTI4NS4uNDhh MDdmMyAxMDA2NDQKKioqIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9mb3JlaWduX2Rh dGEub3V0Ci0tLSBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZm9yZWlnbl9kYXRhLm91 dAoqKioqKioqKioqKioqKiogQ1JFQVRFIEZPUkVJR04gVEFCTEUgZnQxICgKKioqIDY3OCw2 ODkgKioqKgogIENPTU1FTlQgT04gRk9SRUlHTiBUQUJMRSBmdDEgSVMgJ2Z0MSc7CiAgQ09N TUVOVCBPTiBDT0xVTU4gZnQxLmMxIElTICdmdDEuYzEnOwogIFxkKyBmdDEKISAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRm9yZWlnbiB0YWJsZSAicHVibGljLmZ0MSIKISAg Q29sdW1uIHwgIFR5cGUgICB8IE1vZGlmaWVycyB8ICAgICAgICAgIEZEVyBPcHRpb25zICAg ICAgICAgICB8IFN0b3JhZ2UgIHwgRGVzY3JpcHRpb24gCiEgLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLQohICBjMSAgICAgfCBpbnRlZ2VyIHwgbm90IG51bGwgIHwgKCJw YXJhbSAxIiAndmFsMScpICAgICAgICAgICAgIHwgcGxhaW4gICAgfCBmdDEuYzEKISAgYzIg ICAgIHwgdGV4dCAgICB8ICAgICAgICAgICB8IChwYXJhbTIgJ3ZhbDInLCBwYXJhbTMgJ3Zh bDMnKSB8IGV4dGVuZGVkIHwgCiEgIGMzICAgICB8IGRhdGUgICAgfCAgICAgICAgICAgfCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwbGFpbiAgICB8IAogIFNlcnZlcjog czAKICBGRFcgT3B0aW9uczogKGRlbGltaXRlciAnLCcsIHF1b3RlICciJywgImJlIHF1b3Rl ZCIgJ3ZhbHVlJykKICBIYXMgT0lEczogbm8KLS0tIDY3OCw2ODkgLS0tLQogIENPTU1FTlQg T04gRk9SRUlHTiBUQUJMRSBmdDEgSVMgJ2Z0MSc7CiAgQ09NTUVOVCBPTiBDT0xVTU4gZnQx LmMxIElTICdmdDEuYzEnOwogIFxkKyBmdDEKISAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEZvcmVpZ24gdGFibGUgInB1YmxpYy5mdDEiCiEgIENvbHVtbiB8ICBU eXBlICAgfCBNb2RpZmllcnMgfCAgICAgICAgICBGRFcgT3B0aW9ucyAgICAgICAgICAgfCBT dG9yYWdlICB8IFN0YXRzIHRhcmdldCB8IERlc2NyaXB0aW9uIAohIC0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0KISAgYzEgICAgIHwgaW50ZWdl ciB8IG5vdCBudWxsICB8ICgicGFyYW0gMSIgJ3ZhbDEnKSAgICAgICAgICAgICB8IHBsYWlu ICAgIHwgICAgICAgICAgICAgIHwgZnQxLmMxCiEgIGMyICAgICB8IHRleHQgICAgfCAgICAg ICAgICAgfCAocGFyYW0yICd2YWwyJywgcGFyYW0zICd2YWwzJykgfCBleHRlbmRlZCB8ICAg ICAgICAgICAgICB8IAohICBjMyAgICAgfCBkYXRlICAgIHwgICAgICAgICAgIHwgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHwgcGxhaW4gICAgfCAgICAgICAgICAgICAgfCAK ICBTZXJ2ZXI6IHMwCiAgRkRXIE9wdGlvbnM6IChkZWxpbWl0ZXIgJywnLCBxdW90ZSAnIics ICJiZSBxdW90ZWQiICd2YWx1ZScpCiAgSGFzIE9JRHM6IG5vCioqKioqKioqKioqKioqKiBF UlJPUjogIGNhbm5vdCBhbHRlciBzeXN0ZW0gY29sdW1uICJ4bWluCioqKiA3MjksNzQ3ICoq KioKICBBTFRFUiBGT1JFSUdOIFRBQkxFIGZ0MSBBTFRFUiBDT0xVTU4gYzcgT1BUSU9OUyAo QUREIHAxICd2MScsIEFERCBwMiAndjInKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBB TFRFUiBDT0xVTU4gYzggT1BUSU9OUyAoQUREIHAxICd2MScsIEFERCBwMiAndjInKTsKICBB TFRFUiBGT1JFSUdOIFRBQkxFIGZ0MSBBTFRFUiBDT0xVTU4gYzggT1BUSU9OUyAoU0VUIHAy ICdWMicsIERST1AgcDEpOwogIFxkKyBmdDEKISAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRm9yZWlnbiB0YWJsZSAicHVibGljLmZ0MSIKISAgQ29sdW1uIHwgIFR5cGUgICB8 IE1vZGlmaWVycyB8ICAgICAgICAgIEZEVyBPcHRpb25zICAgICAgICAgICB8IFN0b3JhZ2Ug IHwgRGVzY3JpcHRpb24gCiEgLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLQoh ICBjMSAgICAgfCBpbnRlZ2VyIHwgbm90IG51bGwgIHwgKCJwYXJhbSAxIiAndmFsMScpICAg ICAgICAgICAgIHwgcGxhaW4gICAgfCAKISAgYzIgICAgIHwgdGV4dCAgICB8ICAgICAgICAg ICB8IChwYXJhbTIgJ3ZhbDInLCBwYXJhbTMgJ3ZhbDMnKSB8IGV4dGVuZGVkIHwgCiEgIGMz ICAgICB8IGRhdGUgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgfCBwbGFpbiAgICB8IAohICBjNCAgICAgfCBpbnRlZ2VyIHwgICAgICAgICAgIHwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcGxhaW4gICAgfCAKISAgYzYgICAg IHwgaW50ZWdlciB8IG5vdCBudWxsICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB8IHBsYWluICAgIHwgCiEgIGM3ICAgICB8IGludGVnZXIgfCAgICAgICAgICAgfCAocDEg J3YxJywgcDIgJ3YyJykgICAgICAgICAgICAgfCBwbGFpbiAgICB8IAohICBjOCAgICAgfCB0 ZXh0ICAgIHwgICAgICAgICAgIHwgKHAyICdWMicpICAgICAgICAgICAgICAgICAgICAgIHwg ZXh0ZW5kZWQgfCAKISAgYzkgICAgIHwgaW50ZWdlciB8ICAgICAgICAgICB8ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB8IHBsYWluICAgIHwgCiEgIGMxMCAgICB8IGludGVn ZXIgfCAgICAgICAgICAgfCAocDEgJ3YxJykgICAgICAgICAgICAgICAgICAgICAgfCBwbGFp biAgICB8IAogIFNlcnZlcjogczAKICBGRFcgT3B0aW9uczogKGRlbGltaXRlciAnLCcsIHF1 b3RlICciJywgImJlIHF1b3RlZCIgJ3ZhbHVlJykKICBIYXMgT0lEczogbm8KLS0tIDcyOSw3 NTIgLS0tLQogIEFMVEVSIEZPUkVJR04gVEFCTEUgZnQxIEFMVEVSIENPTFVNTiBjNyBPUFRJ T05TIChBREQgcDEgJ3YxJywgQUREIHAyICd2MicpLAogICAgICAgICAgICAgICAgICAgICAg ICAgIEFMVEVSIENPTFVNTiBjOCBPUFRJT05TIChBREQgcDEgJ3YxJywgQUREIHAyICd2Micp OwogIEFMVEVSIEZPUkVJR04gVEFCTEUgZnQxIEFMVEVSIENPTFVNTiBjOCBPUFRJT05TIChT RVQgcDIgJ1YyJywgRFJPUCBwMSk7CisgQUxURVIgRk9SRUlHTiBUQUJMRSBmdDEgQUxURVIg Q09MVU1OIGMxIFNFVCBTVEFUSVNUSUNTIDEwMDAwOworIEFMVEVSIEZPUkVJR04gVEFCTEUg ZnQxIEFMVEVSIENPTFVNTiBjMSBTRVQgKG5fZGlzdGluY3QgPSAxMDApOworIEFMVEVSIEZP UkVJR04gVEFCTEUgZnQxIEFMVEVSIENPTFVNTiBjMSBTRVQgKG5fZGlzdGluY3RfaW5oZXJp dGVkID0gMTAwKTsgLS0gRVJST1IKKyBFUlJPUjogIGNhbm5vdCBzZXQgIm5fZGlzdGluY3Rf aW5oZXJpdGVkIiBmb3IgZm9yZWlnbiB0YWJsZXMKKyBBTFRFUiBGT1JFSUdOIFRBQkxFIGZ0 MSBBTFRFUiBDT0xVTU4gYzggU0VUIFNUQVRJU1RJQ1MgLTE7CiAgXGQrIGZ0MQohICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yZWlnbiB0YWJsZSAicHVibGlj LmZ0MSIKISAgQ29sdW1uIHwgIFR5cGUgICB8IE1vZGlmaWVycyB8ICAgICAgICAgIEZEVyBP cHRpb25zICAgICAgICAgICB8IFN0b3JhZ2UgIHwgU3RhdHMgdGFyZ2V0IHwgRGVzY3JpcHRp b24gCiEgLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LQohICBjMSAgICAgfCBpbnRlZ2VyIHwgbm90IG51bGwgIHwgKCJwYXJhbSAxIiAndmFsMScp ICAgICAgICAgICAgIHwgcGxhaW4gICAgfCAxMDAwMCAgICAgICAgfCAKISAgYzIgICAgIHwg dGV4dCAgICB8ICAgICAgICAgICB8IChwYXJhbTIgJ3ZhbDInLCBwYXJhbTMgJ3ZhbDMnKSB8 IGV4dGVuZGVkIHwgICAgICAgICAgICAgIHwgCiEgIGMzICAgICB8IGRhdGUgICAgfCAgICAg ICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwbGFpbiAgICB8ICAg ICAgICAgICAgICB8IAohICBjNCAgICAgfCBpbnRlZ2VyIHwgICAgICAgICAgIHwgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHwgcGxhaW4gICAgfCAgICAgICAgICAgICAgfCAK ISAgYzYgICAgIHwgaW50ZWdlciB8IG5vdCBudWxsICB8ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB8IHBsYWluICAgIHwgICAgICAgICAgICAgIHwgCiEgIGM3ICAgICB8IGlu dGVnZXIgfCAgICAgICAgICAgfCAocDEgJ3YxJywgcDIgJ3YyJykgICAgICAgICAgICAgfCBw bGFpbiAgICB8ICAgICAgICAgICAgICB8IAohICBjOCAgICAgfCB0ZXh0ICAgIHwgICAgICAg ICAgIHwgKHAyICdWMicpICAgICAgICAgICAgICAgICAgICAgIHwgZXh0ZW5kZWQgfCAgICAg ICAgICAgICAgfCAKISAgYzkgICAgIHwgaW50ZWdlciB8ICAgICAgICAgICB8ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB8IHBsYWluICAgIHwgICAgICAgICAgICAgIHwgCiEg IGMxMCAgICB8IGludGVnZXIgfCAgICAgICAgICAgfCAocDEgJ3YxJykgICAgICAgICAgICAg ICAgICAgICAgfCBwbGFpbiAgICB8ICAgICAgICAgICAgICB8IAogIFNlcnZlcjogczAKICBG RFcgT3B0aW9uczogKGRlbGltaXRlciAnLCcsIHF1b3RlICciJywgImJlIHF1b3RlZCIgJ3Zh bHVlJykKICBIYXMgT0lEczogbm8KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3Fs L2ZvcmVpZ25fZGF0YS5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9mb3JlaWduX2RhdGEu c3FsCmluZGV4IGU5OWU3MDcuLjU5MDhmZjMgMTAwNjQ0CioqKiBhL3NyYy90ZXN0L3JlZ3Jl c3Mvc3FsL2ZvcmVpZ25fZGF0YS5zcWwKLS0tIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZm9y ZWlnbl9kYXRhLnNxbAoqKioqKioqKioqKioqKiogQUxURVIgRk9SRUlHTiBUQUJMRSBmdDEg QUxURVIgQ09MVU1OIHhtaQoqKiogMzA2LDMxMSAqKioqCi0tLSAzMDYsMzE1IC0tLS0KICBB TFRFUiBGT1JFSUdOIFRBQkxFIGZ0MSBBTFRFUiBDT0xVTU4gYzcgT1BUSU9OUyAoQUREIHAx ICd2MScsIEFERCBwMiAndjInKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBBTFRFUiBD T0xVTU4gYzggT1BUSU9OUyAoQUREIHAxICd2MScsIEFERCBwMiAndjInKTsKICBBTFRFUiBG T1JFSUdOIFRBQkxFIGZ0MSBBTFRFUiBDT0xVTU4gYzggT1BUSU9OUyAoU0VUIHAyICdWMics IERST1AgcDEpOworIEFMVEVSIEZPUkVJR04gVEFCTEUgZnQxIEFMVEVSIENPTFVNTiBjMSBT RVQgU1RBVElTVElDUyAxMDAwMDsKKyBBTFRFUiBGT1JFSUdOIFRBQkxFIGZ0MSBBTFRFUiBD T0xVTU4gYzEgU0VUIChuX2Rpc3RpbmN0ID0gMTAwKTsKKyBBTFRFUiBGT1JFSUdOIFRBQkxF IGZ0MSBBTFRFUiBDT0xVTU4gYzEgU0VUIChuX2Rpc3RpbmN0X2luaGVyaXRlZCA9IDEwMCk7 IC0tIEVSUk9SCisgQUxURVIgRk9SRUlHTiBUQUJMRSBmdDEgQUxURVIgQ09MVU1OIGM4IFNF VCBTVEFUSVNUSUNTIC0xOwogIFxkKyBmdDEKICAtLSBjYW4ndCBjaGFuZ2UgdGhlIGNvbHVt biB0eXBlIGlmIGl0J3MgdXNlZCBlbHNld2hlcmUKICBDUkVBVEUgVEFCTEUgdXNlX2Z0MV9j b2x1bW5fdHlwZSAoeCBmdDEpOwo= --------------060201060604070303020503--