Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.80) (envelope-from ) id 1WT9oX-0005KF-Ii for pgsql-hackers@arkaria.postgresql.org; Thu, 27 Mar 2014 12:53:46 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.80) (envelope-from ) id 1WT9oW-0006dC-OV for pgsql-hackers@arkaria.postgresql.org; Thu, 27 Mar 2014 12:53:44 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtp (Exim 4.80) (envelope-from ) id 1WT9oT-0006d0-Vu for pgsql-hackers@postgresql.org; Thu, 27 Mar 2014 12:53:42 +0000 Received: from tama500.ecl.ntt.co.jp ([129.60.39.148]) by magus.postgresql.org with esmtp (Exim 4.80) (envelope-from ) id 1WT9oM-0005jR-HF for pgsql-hackers@postgresql.org; Thu, 27 Mar 2014 12:53:41 +0000 Received: from mfs5.rdh.ecl.ntt.co.jp (mfs5.rdh.ecl.ntt.co.jp [129.60.39.144]) by tama500.ecl.ntt.co.jp (8.13.8/8.13.8) with ESMTP id s2RCrVXn006479; Thu, 27 Mar 2014 21:53:31 +0900 Received: from mfs5.rdh.ecl.ntt.co.jp (localhost.localdomain [127.0.0.1]) by mfs5.rdh.ecl.ntt.co.jp (Postfix) with ESMTP id EE09FE0123; Thu, 27 Mar 2014 21:53:30 +0900 (JST) Received: from imail3.m.ecl.ntt.co.jp (imail3.m.ecl.ntt.co.jp [129.60.5.248]) by mfs5.rdh.ecl.ntt.co.jp (Postfix) with ESMTP id E15E8E0121; Thu, 27 Mar 2014 21:53:30 +0900 (JST) Received: from [129.60.241.149] ([129.60.241.149]) by imail3.m.ecl.ntt.co.jp (8.13.8/8.13.8) with ESMTP id s2RCrUmE012967; Thu, 27 Mar 2014 21:53:30 +0900 Message-ID: <53341F3C.2050609@lab.ntt.co.jp> Date: Thu, 27 Mar 2014 21:53:16 +0900 From: Etsuro Fujita User-Agent: Mozilla/5.0 (Windows NT 6.0; rv:24.0) Gecko/20100101 Thunderbird/24.4.0 MIME-Version: 1.0 To: Kyotaro HORIGUCHI CC: shigeru.hanada@gmail.com, pgsql-hackers@postgresql.org Subject: Re: inherit support for foreign tables References: <20140318.183856.121817800.horiguchi.kyotaro@lab.ntt.co.jp> <532AE62A.6020307@lab.ntt.co.jp> <532F8EC1.6020401@lab.ntt.co.jp> <20140326.171454.142890940.horiguchi.kyotaro@lab.ntt.co.jp> <533383BF.1050004@lab.ntt.co.jp> In-Reply-To: <533383BF.1050004@lab.ntt.co.jp> Content-Type: multipart/mixed; boundary="------------050501030700030705080003" X-TM-AS-MML: No X-Pg-Spam-Score: -2.3 (--) List-Archive: List-Help: List-ID: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-Mailing-List: pgsql-hackers Precedence: bulk Sender: pgsql-hackers-owner@postgresql.org This is a multi-part message in MIME format. --------------050501030700030705080003 Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit (2014/03/27 10:49), Etsuro Fujita wrote: > (2014/03/26 17:14), Kyotaro HORIGUCHI wrote: >> Finally, although I insist the necessity of the warning for child >> foreign tables on alter table, if you belive it to be put off, >> I'll compromise by putting a note to CF-app that last judgement >> is left to committer. > > OK So, if there are no objections of other, I'll mark this patch as > "ready for committer" and do that. I'll do it right now, since there seems to be no objections of others. I've revised the patch a bit further, mainly the documentation. Patch attached. Note: as mentioned above, Horiguchi-san insisted that warning functionality for recursive ALTER TABLE operations for inheritance trees that contain one or more children that are foreign. However, that functionality hasn't been included in the patch, since ISTM that that functionality should be implemented as a separate patch [1]. We leave this for commiters to decide. [1] http://www.postgresql.org/message-id/5321ABD2.6000104@lab.ntt.co.jp Thanks, Best regards, Etsuro Fujita --------------050501030700030705080003 Content-Type: text/plain; charset=Shift_JIS; name="foreign_inherit-v9.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="foreign_inherit-v9.patch" KioqIGEvY29udHJpYi9maWxlX2Zkdy9maWxlX2Zkdy5jCi0tLSBiL2NvbnRy aWIvZmlsZV9mZHcvZmlsZV9mZHcuYwoqKioqKioqKioqKioqKioKKioqIDEx NywxMjIgKioqKiBzdGF0aWMgdm9pZCBmaWxlR2V0Rm9yZWlnblJlbFNpemUo UGxhbm5lckluZm8gKnJvb3QsCi0tLSAxMTcsMTI3IC0tLS0KICBzdGF0aWMg dm9pZCBmaWxlR2V0Rm9yZWlnblBhdGhzKFBsYW5uZXJJbmZvICpyb290LAog IAkJCQkJUmVsT3B0SW5mbyAqYmFzZXJlbCwKICAJCQkJCU9pZCBmb3JlaWdu dGFibGVpZCk7Cisgc3RhdGljIEZvcmVpZ25QYXRoICpmaWxlUmVwYXJhbWV0 ZXJpemVGb3JlaWduUGF0aChQbGFubmVySW5mbyAqcm9vdCwKKyAJCQkJCQkJ CQkJCQkgIFJlbE9wdEluZm8gKmJhc2VyZWwsCisgCQkJCQkJCQkJCQkJICBP aWQgZm9yZWlnbnRhYmxlaWQsCisgCQkJCQkJCQkJCQkJICBGb3JlaWduUGF0 aCAqcGF0aCwKKyAJCQkJCQkJCQkJCQkgIFJlbGlkcyByZXF1aXJlZF9vdXRl cik7CiAgc3RhdGljIEZvcmVpZ25TY2FuICpmaWxlR2V0Rm9yZWlnblBsYW4o UGxhbm5lckluZm8gKnJvb3QsCiAgCQkJCSAgIFJlbE9wdEluZm8gKmJhc2Vy ZWwsCiAgCQkJCSAgIE9pZCBmb3JlaWdudGFibGVpZCwKKioqKioqKioqKioq KioqCioqKiAxNDUsMTUxICoqKiogc3RhdGljIGJvb2wgY2hlY2tfc2VsZWN0 aXZlX2JpbmFyeV9jb252ZXJzaW9uKFJlbE9wdEluZm8gKmJhc2VyZWwsCiAg c3RhdGljIHZvaWQgZXN0aW1hdGVfc2l6ZShQbGFubmVySW5mbyAqcm9vdCwg UmVsT3B0SW5mbyAqYmFzZXJlbCwKICAJCQkgIEZpbGVGZHdQbGFuU3RhdGUg KmZkd19wcml2YXRlKTsKICBzdGF0aWMgdm9pZCBlc3RpbWF0ZV9jb3N0cyhQ bGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqYmFzZXJlbCwKISAJCQkg ICBGaWxlRmR3UGxhblN0YXRlICpmZHdfcHJpdmF0ZSwKICAJCQkgICBDb3N0 ICpzdGFydHVwX2Nvc3QsIENvc3QgKnRvdGFsX2Nvc3QpOwogIHN0YXRpYyBp bnQgZmlsZV9hY3F1aXJlX3NhbXBsZV9yb3dzKFJlbGF0aW9uIG9uZXJlbCwg aW50IGVsZXZlbCwKICAJCQkJCQkgSGVhcFR1cGxlICpyb3dzLCBpbnQgdGFy Z3Jvd3MsCi0tLSAxNTAsMTU2IC0tLS0KICBzdGF0aWMgdm9pZCBlc3RpbWF0 ZV9zaXplKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpiYXNlcmVs LAogIAkJCSAgRmlsZUZkd1BsYW5TdGF0ZSAqZmR3X3ByaXZhdGUpOwogIHN0 YXRpYyB2b2lkIGVzdGltYXRlX2Nvc3RzKFBsYW5uZXJJbmZvICpyb290LCBS ZWxPcHRJbmZvICpiYXNlcmVsLAohIAkJCSAgIEZpbGVGZHdQbGFuU3RhdGUg KmZkd19wcml2YXRlLCBMaXN0ICpqb2luX2NvbmRzLAogIAkJCSAgIENvc3Qg KnN0YXJ0dXBfY29zdCwgQ29zdCAqdG90YWxfY29zdCk7CiAgc3RhdGljIGlu dCBmaWxlX2FjcXVpcmVfc2FtcGxlX3Jvd3MoUmVsYXRpb24gb25lcmVsLCBp bnQgZWxldmVsLAogIAkJCQkJCSBIZWFwVHVwbGUgKnJvd3MsIGludCB0YXJn cm93cywKKioqKioqKioqKioqKioqCioqKiAxNjMsMTY4ICoqKiogZmlsZV9m ZHdfaGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQotLS0gMTY4LDE3NCAtLS0t CiAgCiAgCWZkd3JvdXRpbmUtPkdldEZvcmVpZ25SZWxTaXplID0gZmlsZUdl dEZvcmVpZ25SZWxTaXplOwogIAlmZHdyb3V0aW5lLT5HZXRGb3JlaWduUGF0 aHMgPSBmaWxlR2V0Rm9yZWlnblBhdGhzOworIAlmZHdyb3V0aW5lLT5SZXBh cmFtZXRlcml6ZUZvcmVpZ25QYXRoID0gZmlsZVJlcGFyYW1ldGVyaXplRm9y ZWlnblBhdGg7CiAgCWZkd3JvdXRpbmUtPkdldEZvcmVpZ25QbGFuID0gZmls ZUdldEZvcmVpZ25QbGFuOwogIAlmZHdyb3V0aW5lLT5FeHBsYWluRm9yZWln blNjYW4gPSBmaWxlRXhwbGFpbkZvcmVpZ25TY2FuOwogIAlmZHdyb3V0aW5l LT5CZWdpbkZvcmVpZ25TY2FuID0gZmlsZUJlZ2luRm9yZWlnblNjYW47Cioq KioqKioqKioqKioqKgoqKiogNTE3LDUyMyAqKioqIGZpbGVHZXRGb3JlaWdu UGF0aHMoUGxhbm5lckluZm8gKnJvb3QsCiAgCQkJCQkJCQkJCSAgKE5vZGUg KikgY29sdW1ucykpOwogIAogIAkvKiBFc3RpbWF0ZSBjb3N0cyAqLwohIAll c3RpbWF0ZV9jb3N0cyhyb290LCBiYXNlcmVsLCBmZHdfcHJpdmF0ZSwKICAJ CQkJICAgJnN0YXJ0dXBfY29zdCwgJnRvdGFsX2Nvc3QpOwogIAogIAkvKgot LS0gNTIzLDUzMCAtLS0tCiAgCQkJCQkJCQkJCSAgKE5vZGUgKikgY29sdW1u cykpOwogIAogIAkvKiBFc3RpbWF0ZSBjb3N0cyAqLwohIAllc3RpbWF0ZV9j b3N0cyhyb290LCBiYXNlcmVsLAohIAkJCQkgICBmZHdfcHJpdmF0ZSwgTklM LAogIAkJCQkgICAmc3RhcnR1cF9jb3N0LCAmdG90YWxfY29zdCk7CiAgCiAg CS8qCioqKioqKioqKioqKioqKgoqKiogNTQyLDU0NyAqKioqIGZpbGVHZXRG b3JlaWduUGF0aHMoUGxhbm5lckluZm8gKnJvb3QsCi0tLSA1NDksNTg5IC0t LS0KICB9CiAgCiAgLyoKKyAgKiBmaWxlUmVwYXJhbWV0ZXJpemVGb3JlaWdu UGF0aAorICAqCQlBdHRlbXB0IHRvIG1vZGlmeSBhIGdpdmVuIHBhdGggdG8g aGF2ZSBncmVhdGVyIHBhcmFtZXRlcml6YXRpb24KKyAgKi8KKyBzdGF0aWMg Rm9yZWlnblBhdGggKgorIGZpbGVSZXBhcmFtZXRlcml6ZUZvcmVpZ25QYXRo KFBsYW5uZXJJbmZvICpyb290LAorIAkJCQkJCQkgIFJlbE9wdEluZm8gKmJh c2VyZWwsCisgCQkJCQkJCSAgT2lkIGZvcmVpZ250YWJsZWlkLAorIAkJCQkJ CQkgIEZvcmVpZ25QYXRoICpwYXRoLAorIAkJCQkJCQkgIFJlbGlkcyByZXF1 aXJlZF9vdXRlcikKKyB7CisgCVBhcmFtUGF0aEluZm8gKnBhcmFtX2luZm87 CisgCUZpbGVGZHdQbGFuU3RhdGUgKmZkd19wcml2YXRlID0gKEZpbGVGZHdQ bGFuU3RhdGUgKikgYmFzZXJlbC0+ZmR3X3ByaXZhdGU7CisgCUNvc3QJCXN0 YXJ0dXBfY29zdDsKKyAJQ29zdAkJdG90YWxfY29zdDsKKyAKKyAJLyogR2V0 IHRoZSBQYXJhbVBhdGhJbmZvICovCisgCXBhcmFtX2luZm8gPSBnZXRfYmFz ZXJlbF9wYXJhbXBhdGhpbmZvKHJvb3QsIGJhc2VyZWwsIHJlcXVpcmVkX291 dGVyKTsKKyAKKyAJLyogUmVkbyB0aGUgY29zdCBlc3RpbWF0ZXMgKi8KKyAJ ZXN0aW1hdGVfY29zdHMocm9vdCwgYmFzZXJlbCwKKyAJCQkJICAgZmR3X3By aXZhdGUsCisgCQkJCSAgIHBhcmFtX2luZm8tPnBwaV9jbGF1c2VzLAorIAkJ CQkgICAmc3RhcnR1cF9jb3N0LCAmdG90YWxfY29zdCk7CisgCisgCS8qIE1h a2UgYW5kIHJldHVybiB0aGUgbmV3IHBhdGggKi8KKyAJcmV0dXJuIGNyZWF0 ZV9mb3JlaWduc2Nhbl9wYXRoKHJvb3QsIGJhc2VyZWwsCisgCQkJCQkJCQkg ICBwYXJhbV9pbmZvLT5wcGlfcm93cywKKyAJCQkJCQkJCSAgIHN0YXJ0dXBf Y29zdCwKKyAJCQkJCQkJCSAgIHRvdGFsX2Nvc3QsCisgCQkJCQkJCQkgICBO SUwsCQkvKiBubyBwYXRoa2V5cyAqLworIAkJCQkJCQkJICAgcmVxdWlyZWRf b3V0ZXIsCisgCQkJCQkJCQkgICBwYXRoLT5mZHdfcHJpdmF0ZSk7CisgfQor IAorIC8qCiAgICogZmlsZUdldEZvcmVpZ25QbGFuCiAgICoJCUNyZWF0ZSBh IEZvcmVpZ25TY2FuIHBsYW4gbm9kZSBmb3Igc2Nhbm5pbmcgdGhlIGZvcmVp Z24gdGFibGUKICAgKi8KKioqKioqKioqKioqKioqCioqKiA5NzAsOTgxICoq KiogZXN0aW1hdGVfc2l6ZShQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5m byAqYmFzZXJlbCwKICAgKi8KICBzdGF0aWMgdm9pZAogIGVzdGltYXRlX2Nv c3RzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpiYXNlcmVsLAoh IAkJCSAgIEZpbGVGZHdQbGFuU3RhdGUgKmZkd19wcml2YXRlLAogIAkJCSAg IENvc3QgKnN0YXJ0dXBfY29zdCwgQ29zdCAqdG90YWxfY29zdCkKICB7CiAg CUJsb2NrTnVtYmVyIHBhZ2VzID0gZmR3X3ByaXZhdGUtPnBhZ2VzOwogIAlk b3VibGUJCW50dXBsZXMgPSBmZHdfcHJpdmF0ZS0+bnR1cGxlczsKICAJQ29z dAkJcnVuX2Nvc3QgPSAwOwogIAlDb3N0CQljcHVfcGVyX3R1cGxlOwogIAog IAkvKgotLS0gMTAxMiwxMDI0IC0tLS0KICAgKi8KICBzdGF0aWMgdm9pZAog IGVzdGltYXRlX2Nvc3RzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZv ICpiYXNlcmVsLAohIAkJCSAgIEZpbGVGZHdQbGFuU3RhdGUgKmZkd19wcml2 YXRlLCBMaXN0ICpqb2luX2NvbmRzLAogIAkJCSAgIENvc3QgKnN0YXJ0dXBf Y29zdCwgQ29zdCAqdG90YWxfY29zdCkKICB7CiAgCUJsb2NrTnVtYmVyIHBh Z2VzID0gZmR3X3ByaXZhdGUtPnBhZ2VzOwogIAlkb3VibGUJCW50dXBsZXMg PSBmZHdfcHJpdmF0ZS0+bnR1cGxlczsKICAJQ29zdAkJcnVuX2Nvc3QgPSAw OworIAlRdWFsQ29zdAlqb2luX2Nvc3Q7CiAgCUNvc3QJCWNwdV9wZXJfdHVw bGU7CiAgCiAgCS8qCioqKioqKioqKioqKioqKgoqKiogOTg2LDk5MyAqKioq IGVzdGltYXRlX2Nvc3RzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZv ICpiYXNlcmVsLAogIAkgKi8KICAJcnVuX2Nvc3QgKz0gc2VxX3BhZ2VfY29z dCAqIHBhZ2VzOwogIAohIAkqc3RhcnR1cF9jb3N0ID0gYmFzZXJlbC0+YmFz ZXJlc3RyaWN0Y29zdC5zdGFydHVwOwohIAljcHVfcGVyX3R1cGxlID0gY3B1 X3R1cGxlX2Nvc3QgKiAxMCArIGJhc2VyZWwtPmJhc2VyZXN0cmljdGNvc3Qu cGVyX3R1cGxlOwogIAlydW5fY29zdCArPSBjcHVfcGVyX3R1cGxlICogbnR1 cGxlczsKICAJKnRvdGFsX2Nvc3QgPSAqc3RhcnR1cF9jb3N0ICsgcnVuX2Nv c3Q7CiAgfQotLS0gMTAyOSwxMDM5IC0tLS0KICAJICovCiAgCXJ1bl9jb3N0 ICs9IHNlcV9wYWdlX2Nvc3QgKiBwYWdlczsKICAKISAJY29zdF9xdWFsX2V2 YWwoJmpvaW5fY29zdCwgam9pbl9jb25kcywgcm9vdCk7CiEgCSpzdGFydHVw X2Nvc3QgPQohIAkJKGJhc2VyZWwtPmJhc2VyZXN0cmljdGNvc3Quc3RhcnR1 cCArIGpvaW5fY29zdC5zdGFydHVwKTsKISAJY3B1X3Blcl90dXBsZSA9IGNw dV90dXBsZV9jb3N0ICogMTAgKwohIAkJKGJhc2VyZWwtPmJhc2VyZXN0cmlj dGNvc3QucGVyX3R1cGxlICsgam9pbl9jb3N0LnBlcl90dXBsZSk7CiAgCXJ1 bl9jb3N0ICs9IGNwdV9wZXJfdHVwbGUgKiBudHVwbGVzOwogIAkqdG90YWxf Y29zdCA9ICpzdGFydHVwX2Nvc3QgKyBydW5fY29zdDsKICB9CioqKiBhL2Nv bnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5jCi0tLSBiL2NvbnRy aWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5jCioqKioqKioqKioqKioq KgoqKiogMjQxLDI0NiAqKioqIHN0YXRpYyB2b2lkIHBvc3RncmVzR2V0Rm9y ZWlnblJlbFNpemUoUGxhbm5lckluZm8gKnJvb3QsCi0tLSAyNDEsMjUxIC0t LS0KICBzdGF0aWMgdm9pZCBwb3N0Z3Jlc0dldEZvcmVpZ25QYXRocyhQbGFu bmVySW5mbyAqcm9vdCwKICAJCQkJCQlSZWxPcHRJbmZvICpiYXNlcmVsLAog IAkJCQkJCU9pZCBmb3JlaWdudGFibGVpZCk7Cisgc3RhdGljIEZvcmVpZ25Q YXRoICpwb3N0Z3Jlc1JlcGFyYW1ldGVyaXplRm9yZWlnblBhdGgoUGxhbm5l ckluZm8gKnJvb3QsCisgCQkJCQkJCQkJCQkJCSAgUmVsT3B0SW5mbyAqYmFz ZXJlbCwKKyAJCQkJCQkJCQkJCQkJICBPaWQgZm9yZWlnbnRhYmxlaWQsCisg CQkJCQkJCQkJCQkJCSAgRm9yZWlnblBhdGggKnBhdGgsCisgCQkJCQkJCQkJ CQkJCSAgUmVsaWRzIHJlcXVpcmVkX291dGVyKTsKICBzdGF0aWMgRm9yZWln blNjYW4gKnBvc3RncmVzR2V0Rm9yZWlnblBsYW4oUGxhbm5lckluZm8gKnJv b3QsCiAgCQkJCQkgICBSZWxPcHRJbmZvICpiYXNlcmVsLAogIAkJCQkJICAg T2lkIGZvcmVpZ250YWJsZWlkLAoqKioqKioqKioqKioqKioKKioqIDM0Miwz NDcgKioqKiBwb3N0Z3Jlc19mZHdfaGFuZGxlcihQR19GVU5DVElPTl9BUkdT KQotLS0gMzQ3LDM1MyAtLS0tCiAgCS8qIEZ1bmN0aW9ucyBmb3Igc2Nhbm5p bmcgZm9yZWlnbiB0YWJsZXMgKi8KICAJcm91dGluZS0+R2V0Rm9yZWlnblJl bFNpemUgPSBwb3N0Z3Jlc0dldEZvcmVpZ25SZWxTaXplOwogIAlyb3V0aW5l LT5HZXRGb3JlaWduUGF0aHMgPSBwb3N0Z3Jlc0dldEZvcmVpZ25QYXRoczsK KyAJcm91dGluZS0+UmVwYXJhbWV0ZXJpemVGb3JlaWduUGF0aCA9IHBvc3Rn cmVzUmVwYXJhbWV0ZXJpemVGb3JlaWduUGF0aDsKICAJcm91dGluZS0+R2V0 Rm9yZWlnblBsYW4gPSBwb3N0Z3Jlc0dldEZvcmVpZ25QbGFuOwogIAlyb3V0 aW5lLT5CZWdpbkZvcmVpZ25TY2FuID0gcG9zdGdyZXNCZWdpbkZvcmVpZ25T Y2FuOwogIAlyb3V0aW5lLT5JdGVyYXRlRm9yZWlnblNjYW4gPSBwb3N0Z3Jl c0l0ZXJhdGVGb3JlaWduU2NhbjsKKioqKioqKioqKioqKioqCioqKiA3Mjks NzM0ICoqKiogcG9zdGdyZXNHZXRGb3JlaWduUGF0aHMoUGxhbm5lckluZm8g KnJvb3QsCi0tLSA3MzUsNzgyIC0tLS0KICB9CiAgCiAgLyoKKyAgKiBwb3N0 Z3Jlc1JlcGFyYW1ldGVyaXplRm9yZWlnblBhdGgKKyAgKgkJQXR0ZW1wdCB0 byBtb2RpZnkgYSBnaXZlbiBwYXRoIHRvIGhhdmUgZ3JlYXRlciBwYXJhbWV0 ZXJpemF0aW9uCisgICovCisgc3RhdGljIEZvcmVpZ25QYXRoICoKKyBwb3N0 Z3Jlc1JlcGFyYW1ldGVyaXplRm9yZWlnblBhdGgoUGxhbm5lckluZm8gKnJv b3QsCisgCQkJCQkJCQkgIFJlbE9wdEluZm8gKmJhc2VyZWwsCisgCQkJCQkJ CQkgIE9pZCBmb3JlaWdudGFibGVpZCwKKyAJCQkJCQkJCSAgRm9yZWlnblBh dGggKnBhdGgsCisgCQkJCQkJCQkgIFJlbGlkcyByZXF1aXJlZF9vdXRlcikK KyB7CisgCVBhcmFtUGF0aEluZm8gKnBhcmFtX2luZm87CisgCWRvdWJsZQkJ cm93czsKKyAJaW50CQkJd2lkdGg7CisgCUNvc3QJCXN0YXJ0dXBfY29zdDsK KyAJQ29zdAkJdG90YWxfY29zdDsKKyAKKyAJLyogR2V0IHRoZSBQYXJhbVBh dGhJbmZvICovCisgCXBhcmFtX2luZm8gPSBnZXRfYmFzZXJlbF9wYXJhbXBh dGhpbmZvKHJvb3QsIGJhc2VyZWwsIHJlcXVpcmVkX291dGVyKTsKKyAKKyAJ LyogUmVkbyB0aGUgY29zdCBlc3RpbWF0ZXMgKi8KKyAJZXN0aW1hdGVfcGF0 aF9jb3N0X3NpemUocm9vdCwgYmFzZXJlbCwKKyAJCQkJCQkJcGFyYW1faW5m by0+cHBpX2NsYXVzZXMsCisgCQkJCQkJCSZyb3dzLCAmd2lkdGgsCisgCQkJ CQkJCSZzdGFydHVwX2Nvc3QsICZ0b3RhbF9jb3N0KTsKKyAKKyAJLyoKKyAJ ICogcHBpX3Jvd3MgY3VycmVudGx5IHdvbid0IGdldCBsb29rZWQgYXQgYnkg YW55dGhpbmcsIGJ1dCBzdGlsbCB3ZQorIAkgKiBtYXkgYXMgd2VsbCBlbnN1 cmUgdGhhdCBpdCBtYXRjaGVzIG91ciBpZGVhIG9mIHRoZSByb3djb3VudC4K KyAJICovCisgCXBhcmFtX2luZm8tPnBwaV9yb3dzID0gcm93czsKKyAKKyAJ LyogTWFrZSBhbmQgcmV0dXJuIHRoZSBuZXcgcGF0aCAqLworIAlyZXR1cm4g Y3JlYXRlX2ZvcmVpZ25zY2FuX3BhdGgocm9vdCwgYmFzZXJlbCwKKyAJCQkJ CQkJCSAgIHJvd3MsCisgCQkJCQkJCQkgICBzdGFydHVwX2Nvc3QsCisgCQkJ CQkJCQkgICB0b3RhbF9jb3N0LAorIAkJCQkJCQkJICAgTklMLAkJLyogbm8g cGF0aGtleXMgKi8KKyAJCQkJCQkJCSAgIHJlcXVpcmVkX291dGVyLAorIAkJ CQkJCQkJICAgTklMKTsJLyogbm8gZmR3X3ByaXZhdGUgbGlzdCAqLworIH0K KyAKKyAvKgogICAqIHBvc3RncmVzR2V0Rm9yZWlnblBsYW4KICAgKgkJQ3Jl YXRlIEZvcmVpZ25TY2FuIHBsYW4gbm9kZSB3aGljaCBpbXBsZW1lbnRzIHNl bGVjdGVkIGJlc3QgcGF0aAogICAqLwoqKioqKioqKioqKioqKioKKioqIDE3 NzUsMTc4NSAqKioqIGVzdGltYXRlX3BhdGhfY29zdF9zaXplKFBsYW5uZXJJ bmZvICpyb290LAogIAl9CiAgCWVsc2UKICAJewohIAkJLyoKISAJCSAqIFdl IGRvbid0IHN1cHBvcnQgam9pbiBjb25kaXRpb25zIGluIHRoaXMgbW9kZSAo aGVuY2UsIG5vCiEgCQkgKiBwYXJhbWV0ZXJpemVkIHBhdGhzIGNhbiBiZSBt YWRlKS4KISAJCSAqLwohIAkJQXNzZXJ0KGpvaW5fY29uZHMgPT0gTklMKTsK ICAKICAJCS8qIFVzZSByb3dzL3dpZHRoIGVzdGltYXRlcyBtYWRlIGJ5IHNl dF9iYXNlcmVsX3NpemVfZXN0aW1hdGVzLiAqLwogIAkJcm93cyA9IGJhc2Vy ZWwtPnJvd3M7Ci0tLSAxODIzLDE4MzAgLS0tLQogIAl9CiAgCWVsc2UKICAJ ewohIAkJU2VsZWN0aXZpdHkgam9pbl9zZWw7CiEgCQlRdWFsQ29zdAlqb2lu X2Nvc3Q7CiAgCiAgCQkvKiBVc2Ugcm93cy93aWR0aCBlc3RpbWF0ZXMgbWFk ZSBieSBzZXRfYmFzZXJlbF9zaXplX2VzdGltYXRlcy4gKi8KICAJCXJvd3Mg PSBiYXNlcmVsLT5yb3dzOwoqKioqKioqKioqKioqKioKKioqIDE3OTIsMTgw OCAqKioqIGVzdGltYXRlX3BhdGhfY29zdF9zaXplKFBsYW5uZXJJbmZvICpy b290LAogIAkJcmV0cmlldmVkX3Jvd3MgPSBjbGFtcF9yb3dfZXN0KHJvd3Mg LyBmcGluZm8tPmxvY2FsX2NvbmRzX3NlbCk7CiAgCQlyZXRyaWV2ZWRfcm93 cyA9IE1pbihyZXRyaWV2ZWRfcm93cywgYmFzZXJlbC0+dHVwbGVzKTsKICAK ICAJCS8qCiAgCQkgKiBDb3N0IGFzIHRob3VnaCB0aGlzIHdlcmUgYSBzZXFz Y2FuLCB3aGljaCBpcyBwZXNzaW1pc3RpYy4gIFdlCiEgCQkgKiBlZmZlY3Rp dmVseSBpbWFnaW5lIHRoZSBsb2NhbF9jb25kcyBhcmUgYmVpbmcgZXZhbHVh dGVkIHJlbW90ZWx5LAohIAkJICogdG9vLgogIAkJICovCiAgCQlzdGFydHVw X2Nvc3QgPSAwOwogIAkJcnVuX2Nvc3QgPSAwOwogIAkJcnVuX2Nvc3QgKz0g c2VxX3BhZ2VfY29zdCAqIGJhc2VyZWwtPnBhZ2VzOwogIAohIAkJc3RhcnR1 cF9jb3N0ICs9IGJhc2VyZWwtPmJhc2VyZXN0cmljdGNvc3Quc3RhcnR1cDsK ISAJCWNwdV9wZXJfdHVwbGUgPSBjcHVfdHVwbGVfY29zdCArIGJhc2VyZWwt PmJhc2VyZXN0cmljdGNvc3QucGVyX3R1cGxlOwogIAkJcnVuX2Nvc3QgKz0g Y3B1X3Blcl90dXBsZSAqIGJhc2VyZWwtPnR1cGxlczsKICAKICAJCXRvdGFs X2Nvc3QgPSBzdGFydHVwX2Nvc3QgKyBydW5fY29zdDsKLS0tIDE4MzcsMTg2 NSAtLS0tCiAgCQlyZXRyaWV2ZWRfcm93cyA9IGNsYW1wX3Jvd19lc3Qocm93 cyAvIGZwaW5mby0+bG9jYWxfY29uZHNfc2VsKTsKICAJCXJldHJpZXZlZF9y b3dzID0gTWluKHJldHJpZXZlZF9yb3dzLCBiYXNlcmVsLT50dXBsZXMpOwog IAorIAkJLyogRmFjdG9yIGluIHRoZSBzZWxlY3Rpdml0eSBvZiB0aGUgam9p bl9jb25kcyAqLworIAkJam9pbl9zZWwgPSBjbGF1c2VsaXN0X3NlbGVjdGl2 aXR5KHJvb3QsCisgCQkJCQkJCQkJCSAgam9pbl9jb25kcywKKyAJCQkJCQkJ CQkJICBiYXNlcmVsLT5yZWxpZCwKKyAJCQkJCQkJCQkJICBKT0lOX0lOTkVS LAorIAkJCQkJCQkJCQkgIE5VTEwpOworIAorIAkJcm93cyA9IGNsYW1wX3Jv d19lc3Qocm93cyAqIGpvaW5fc2VsKTsKKyAKICAJCS8qCiAgCQkgKiBDb3N0 IGFzIHRob3VnaCB0aGlzIHdlcmUgYSBzZXFzY2FuLCB3aGljaCBpcyBwZXNz aW1pc3RpYy4gIFdlCiEgCQkgKiBlZmZlY3RpdmVseSBpbWFnaW5lIHRoZSBs b2NhbF9jb25kcyBhbmQgam9pbl9jb25kcyBhcmUgYmVpbmcKISAJCSAqIGV2 YWx1YXRlZCByZW1vdGVseSwgdG9vLgogIAkJICovCiAgCQlzdGFydHVwX2Nv c3QgPSAwOwogIAkJcnVuX2Nvc3QgPSAwOwogIAkJcnVuX2Nvc3QgKz0gc2Vx X3BhZ2VfY29zdCAqIGJhc2VyZWwtPnBhZ2VzOwogIAohIAkJY29zdF9xdWFs X2V2YWwoJmpvaW5fY29zdCwgam9pbl9jb25kcywgcm9vdCk7CiEgCQlzdGFy dHVwX2Nvc3QgKz0KISAJCQkoYmFzZXJlbC0+YmFzZXJlc3RyaWN0Y29zdC5z dGFydHVwICsgam9pbl9jb3N0LnN0YXJ0dXApOwohIAkJY3B1X3Blcl90dXBs ZSA9IGNwdV90dXBsZV9jb3N0ICsKISAJCQkoYmFzZXJlbC0+YmFzZXJlc3Ry aWN0Y29zdC5wZXJfdHVwbGUgKyBqb2luX2Nvc3QucGVyX3R1cGxlKTsKICAJ CXJ1bl9jb3N0ICs9IGNwdV9wZXJfdHVwbGUgKiBiYXNlcmVsLT50dXBsZXM7 CiAgCiAgCQl0b3RhbF9jb3N0ID0gc3RhcnR1cF9jb3N0ICsgcnVuX2Nvc3Q7 CioqKiBhL2RvYy9zcmMvc2dtbC9mZHdoYW5kbGVyLnNnbWwKLS0tIGIvZG9j L3NyYy9zZ21sL2Zkd2hhbmRsZXIuc2dtbAoqKioqKioqKioqKioqKioKKioq IDE2MiwxNjcgKioqKiBHZXRGb3JlaWduUGF0aHMgKFBsYW5uZXJJbmZvICpy b290LAotLS0gMTYyLDE5OCAtLS0tCiAgCiAgICAgIDxwYXJhPgogIDxwcm9n cmFtbGlzdGluZz4KKyBGb3JlaWduUGF0aCAqCisgUmVwYXJhbWV0ZXJpemVG b3JlaWduUGF0aCAoUGxhbm5lckluZm8gKnJvb3QsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUmVsT3B0SW5mbyAqYmFzZXJlbCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBPaWQgZm9yZWlnbnRhYmxlaWQsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRm9yZWlnblBhdGggKnBhdGgsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVsaWRzIHJlcXVpcmVkX291 dGVyKTsKKyA8L3Byb2dyYW1saXN0aW5nPgorIAorICAgICAgQ3JlYXRlIGFu IGFjY2VzcyBwYXRoIGZvciBhIHNjYW4gb24gYSBmb3JlaWduIHRhYmxlIHVz aW5nIGpvaW4KKyAgICAgIGNsYXVzZXMsIHdoaWNoIGlzIGNhbGxlZCBhIDxx dW90ZT5wYXJhbWV0ZXJpemVkIHBhdGg8Lz4uCisgICAgICBUaGlzIGlzIGNh bGxlZCBkdXJpbmcgcXVlcnkgcGxhbm5pbmcuCisgICAgICBUaGUgcGFyYW1l dGVycyBhcmUgYXMgZm9yIDxmdW5jdGlvbj5HZXRGb3JlaWduUmVsU2l6ZTwv PiwgcGx1cworICAgICAgdGhlIDxzdHJ1Y3RuYW1lPkZvcmVpZ25QYXRoPC8+ IChwcmV2aW91c2x5IHByb2R1Y2VkIGJ5CisgICAgICA8ZnVuY3Rpb24+R2V0 Rm9yZWlnblBhdGhzPC8+KSwgYW5kIHRoZSBJRHMgb2YgYWxsIG90aGVyIHRh YmxlcworICAgICAgdGhhdCBwcm92aWRlIHRoZSBqb2luIGNsYXVzZXMuCisg ICAgIDwvcGFyYT4KKyAKKyAgICAgPHBhcmE+CisgICAgICBUaGlzIGZ1bmN0 aW9uIG11c3QgZ2VuZXJhdGUgYSBwYXJhbWV0ZXJpemVkIHBhdGggZm9yIGEg c2NhbiBvbiB0aGUKKyAgICAgIGZvcmVpZ24gdGFibGUuICBUaGUgcGFyYW1l dGVyaXplZCBwYXRoIG11c3QgY29udGFpbiBjb3N0IGVzdGltYXRlcywKKyAg ICAgIGFuZCBjYW4gY29udGFpbiBhbnkgRkRXLXByaXZhdGUgaW5mb3JtYXRp b24gdGhhdCBpcyBuZWVkZWQgdG8gaWRlbnRpZnkKKyAgICAgIHRoZSBzcGVj aWZpYyBzY2FuIG1ldGhvZCBpbnRlbmRlZC4gIFVubGlrZSB0aGUgb3RoZXIg c2Nhbi1yZWxhdGVkCisgICAgICBmdW5jdGlvbnMsIHRoaXMgZnVuY3Rpb24g aXMgb3B0aW9uYWwuCisgICAgIDwvcGFyYT4KKyAKKyAgICAgPHBhcmE+Cisg ICAgICBTZWUgPHhyZWYgbGlua2VuZD0iZmR3LXBsYW5uaW5nIj4gZm9yIGFk ZGl0aW9uYWwgaW5mb3JtYXRpb24uCisgICAgIDwvcGFyYT4KKyAKKyAgICAg PHBhcmE+CisgPHByb2dyYW1saXN0aW5nPgogIEZvcmVpZ25TY2FuICoKICBH ZXRGb3JlaWduUGxhbiAoUGxhbm5lckluZm8gKnJvb3QsCiAgICAgICAgICAg ICAgICAgIFJlbE9wdEluZm8gKmJhc2VyZWwsCioqKioqKioqKioqKioqKgoq KiogODA0LDgxMyAqKioqIEdldEZvcmVpZ25TZXJ2ZXJCeU5hbWUoY29uc3Qg Y2hhciAqbmFtZSwgYm9vbCBtaXNzaW5nX29rKTsKICAKICAgICAgPHBhcmE+ CiAgICAgICBUaGUgRkRXIGNhbGxiYWNrIGZ1bmN0aW9ucyA8ZnVuY3Rpb24+ R2V0Rm9yZWlnblJlbFNpemU8Lz4sCiEgICAgICA8ZnVuY3Rpb24+R2V0Rm9y ZWlnblBhdGhzPC8+LCA8ZnVuY3Rpb24+R2V0Rm9yZWlnblBsYW48Lz4sIGFu ZAohICAgICAgPGZ1bmN0aW9uPlBsYW5Gb3JlaWduTW9kaWZ5PC8+IG11c3Qg Zml0IGludG8gdGhlIHdvcmtpbmdzIG9mIHRoZQohICAgICAgPHByb2R1Y3Ru YW1lPlBvc3RncmVTUUw8Lz4gcGxhbm5lci4gIEhlcmUgYXJlIHNvbWUgbm90 ZXMgYWJvdXQgd2hhdAohICAgICAgdGhleSBtdXN0IGRvLgogICAgICA8L3Bh cmE+CiAgCiAgICAgIDxwYXJhPgotLS0gODM1LDg0NCAtLS0tCiAgCiAgICAg IDxwYXJhPgogICAgICAgVGhlIEZEVyBjYWxsYmFjayBmdW5jdGlvbnMgPGZ1 bmN0aW9uPkdldEZvcmVpZ25SZWxTaXplPC8+LAohICAgICAgPGZ1bmN0aW9u PkdldEZvcmVpZ25QYXRoczwvPiwgPGZ1bmN0aW9uPlJlcGFyYW1ldGVyaXpl Rm9yZWlnblBhdGg8Lz4sCiEgICAgICA8ZnVuY3Rpb24+R2V0Rm9yZWlnblBs YW48Lz4sIGFuZCA8ZnVuY3Rpb24+UGxhbkZvcmVpZ25Nb2RpZnk8Lz4gbXVz dCBmaXQKISAgICAgIGludG8gdGhlIHdvcmtpbmdzIG9mIHRoZSA8cHJvZHVj dG5hbWU+UG9zdGdyZVNRTDwvPiBwbGFubmVyLiAgSGVyZSBhcmUKISAgICAg IHNvbWUgbm90ZXMgYWJvdXQgd2hhdCB0aGV5IG11c3QgZG8uCiAgICAgIDwv cGFyYT4KICAKICAgICAgPHBhcmE+CioqKioqKioqKioqKioqKgoqKiogODM3 LDg1MCAqKioqIEdldEZvcmVpZ25TZXJ2ZXJCeU5hbWUoY29uc3QgY2hhciAq bmFtZSwgYm9vbCBtaXNzaW5nX29rKTsKICAgICAgIHRvIGluaXRpYWxpemUg aXQgdG8gTlVMTCB3aGVuIHRoZSA8bGl0ZXJhbD5iYXNlcmVsPC8+IG5vZGUg aXMgY3JlYXRlZC4KICAgICAgIEl0IGlzIHVzZWZ1bCBmb3IgcGFzc2luZyBp bmZvcm1hdGlvbiBmb3J3YXJkIGZyb20KICAgICAgIDxmdW5jdGlvbj5HZXRG b3JlaWduUmVsU2l6ZTwvPiB0byA8ZnVuY3Rpb24+R2V0Rm9yZWlnblBhdGhz PC8+IGFuZC9vcgohICAgICAgPGZ1bmN0aW9uPkdldEZvcmVpZ25QYXRoczwv PiB0byA8ZnVuY3Rpb24+R2V0Rm9yZWlnblBsYW48Lz4sIHRoZXJlYnkKISAg ICAgIGF2b2lkaW5nIHJlY2FsY3VsYXRpb24uCiAgICAgIDwvcGFyYT4KICAK ICAgICAgPHBhcmE+CiEgICAgICA8ZnVuY3Rpb24+R2V0Rm9yZWlnblBhdGhz PC8+IGNhbiBpZGVudGlmeSB0aGUgbWVhbmluZyBvZiBkaWZmZXJlbnQKISAg ICAgIGFjY2VzcyBwYXRocyBieSBzdG9yaW5nIHByaXZhdGUgaW5mb3JtYXRp b24gaW4gdGhlCiEgICAgICA8c3RydWN0ZmllbGQ+ZmR3X3ByaXZhdGU8Lz4g ZmllbGQgb2YgPHN0cnVjdG5hbWU+Rm9yZWlnblBhdGg8Lz4gbm9kZXMuCiAg ICAgICA8c3RydWN0ZmllbGQ+ZmR3X3ByaXZhdGU8Lz4gaXMgZGVjbGFyZWQg YXMgYSA8dHlwZT5MaXN0PC8+IHBvaW50ZXIsIGJ1dAogICAgICAgY291bGQg YWN0dWFsbHkgY29udGFpbiBhbnl0aGluZyBzaW5jZSB0aGUgY29yZSBwbGFu bmVyIGRvZXMgbm90IHRvdWNoCiAgICAgICBpdC4gIEhvd2V2ZXIsIGJlc3Qg cHJhY3RpY2UgaXMgdG8gdXNlIGEgcmVwcmVzZW50YXRpb24gdGhhdCdzIGR1 bXBhYmxlCi0tLSA4NjgsODg0IC0tLS0KICAgICAgIHRvIGluaXRpYWxpemUg aXQgdG8gTlVMTCB3aGVuIHRoZSA8bGl0ZXJhbD5iYXNlcmVsPC8+IG5vZGUg aXMgY3JlYXRlZC4KICAgICAgIEl0IGlzIHVzZWZ1bCBmb3IgcGFzc2luZyBp bmZvcm1hdGlvbiBmb3J3YXJkIGZyb20KICAgICAgIDxmdW5jdGlvbj5HZXRG b3JlaWduUmVsU2l6ZTwvPiB0byA8ZnVuY3Rpb24+R2V0Rm9yZWlnblBhdGhz PC8+IGFuZC9vcgohICAgICAgPGZ1bmN0aW9uPkdldEZvcmVpZ25QYXRoczwv PiB0byA8ZnVuY3Rpb24+UmVwYXJhbWV0ZXJpemVGb3JlaWduUGF0aDwvPgoh ICAgICAgYW5kL29yCiEgICAgICA8ZnVuY3Rpb24+R2V0Rm9yZWlnblBhdGhz PC8+IG9yIDxmdW5jdGlvbj5SZXBhcmFtZXRlcml6ZUZvcmVpZ25QYXRoPC8+ CiEgICAgICB0byA8ZnVuY3Rpb24+R2V0Rm9yZWlnblBsYW48Lz4sIHRoZXJl YnkgYXZvaWRpbmcgcmVjYWxjdWxhdGlvbi4KICAgICAgPC9wYXJhPgogIAog ICAgICA8cGFyYT4KISAgICAgIDxmdW5jdGlvbj5HZXRGb3JlaWduUGF0aHM8 Lz4gb3IgPGZ1bmN0aW9uPlJlcGFyYW1ldGVyaXplRm9yZWlnblBhdGg8Lz4K ISAgICAgIGNhbiBpZGVudGlmeSB0aGUgbWVhbmluZyBvZiBkaWZmZXJlbnQg YWNjZXNzIHBhdGhzIGJ5IHN0b3JpbmcgcHJpdmF0ZQohICAgICAgaW5mb3Jt YXRpb24gaW4gdGhlIDxzdHJ1Y3RmaWVsZD5mZHdfcHJpdmF0ZTwvPiBmaWVs ZCBvZgohICAgICAgPHN0cnVjdG5hbWU+Rm9yZWlnblBhdGg8Lz4gbm9kZXMu CiAgICAgICA8c3RydWN0ZmllbGQ+ZmR3X3ByaXZhdGU8Lz4gaXMgZGVjbGFy ZWQgYXMgYSA8dHlwZT5MaXN0PC8+IHBvaW50ZXIsIGJ1dAogICAgICAgY291 bGQgYWN0dWFsbHkgY29udGFpbiBhbnl0aGluZyBzaW5jZSB0aGUgY29yZSBw bGFubmVyIGRvZXMgbm90IHRvdWNoCiAgICAgICBpdC4gIEhvd2V2ZXIsIGJl c3QgcHJhY3RpY2UgaXMgdG8gdXNlIGEgcmVwcmVzZW50YXRpb24gdGhhdCdz IGR1bXBhYmxlCioqKioqKioqKioqKioqKgoqKiogODg3LDg5NiAqKioqIEdl dEZvcmVpZ25TZXJ2ZXJCeU5hbWUoY29uc3QgY2hhciAqbmFtZSwgYm9vbCBt aXNzaW5nX29rKTsKICAgICAgIDxyZXBsYWNlYWJsZT5zdWJfZXhwcmVzc2lv bjwvPiwgd2hpY2ggaXQgZGV0ZXJtaW5lcyBjYW4gYmUgZXhlY3V0ZWQgb24K ICAgICAgIHRoZSByZW1vdGUgc2VydmVyIGdpdmVuIHRoZSBsb2NhbGx5LWV2 YWx1YXRlZCB2YWx1ZSBvZiB0aGUKICAgICAgIDxyZXBsYWNlYWJsZT5zdWJf ZXhwcmVzc2lvbjwvPi4gIFRoZSBhY3R1YWwgaWRlbnRpZmljYXRpb24gb2Yg c3VjaCBhCiEgICAgICBjbGF1c2Ugc2hvdWxkIGhhcHBlbiBkdXJpbmcgPGZ1 bmN0aW9uPkdldEZvcmVpZ25QYXRoczwvPiwgc2luY2UgaXQgd291bGQKISAg ICAgIGFmZmVjdCB0aGUgY29zdCBlc3RpbWF0ZSBmb3IgdGhlIHBhdGguICBU aGUgcGF0aCdzCiEgICAgICA8c3RydWN0ZmllbGQ+ZmR3X3ByaXZhdGU8Lz4g ZmllbGQgd291bGQgcHJvYmFibHkgaW5jbHVkZSBhIHBvaW50ZXIgdG8KISAg ICAgIHRoZSBpZGVudGlmaWVkIGNsYXVzZSdzIDxzdHJ1Y3RuYW1lPlJlc3Ry aWN0SW5mbzwvPiBub2RlLiAgVGhlbgogICAgICAgPGZ1bmN0aW9uPkdldEZv cmVpZ25QbGFuPC8+IHdvdWxkIHJlbW92ZSB0aGF0IGNsYXVzZSBmcm9tIHNj YW5fY2xhdXNlcywKICAgICAgIGJ1dCBhZGQgdGhlIDxyZXBsYWNlYWJsZT5z dWJfZXhwcmVzc2lvbjwvPiB0byA8c3RydWN0ZmllbGQ+ZmR3X2V4cHJzPC8+ CiAgICAgICB0byBlbnN1cmUgdGhhdCBpdCBnZXRzIG1hc3NhZ2VkIGludG8g ZXhlY3V0YWJsZSBmb3JtLiAgSXQgd291bGQgcHJvYmFibHkKLS0tIDkyMSw5 MzEgLS0tLQogICAgICAgPHJlcGxhY2VhYmxlPnN1Yl9leHByZXNzaW9uPC8+ LCB3aGljaCBpdCBkZXRlcm1pbmVzIGNhbiBiZSBleGVjdXRlZCBvbgogICAg ICAgdGhlIHJlbW90ZSBzZXJ2ZXIgZ2l2ZW4gdGhlIGxvY2FsbHktZXZhbHVh dGVkIHZhbHVlIG9mIHRoZQogICAgICAgPHJlcGxhY2VhYmxlPnN1Yl9leHBy ZXNzaW9uPC8+LiAgVGhlIGFjdHVhbCBpZGVudGlmaWNhdGlvbiBvZiBzdWNo IGEKISAgICAgIGNsYXVzZSBzaG91bGQgaGFwcGVuIGR1cmluZyA8ZnVuY3Rp b24+R2V0Rm9yZWlnblBhdGhzPC8+IG9yCiEgICAgICA8ZnVuY3Rpb24+UmVw YXJhbWV0ZXJpemVGb3JlaWduUGF0aDwvPiwgc2luY2UgaXQgd291bGQgYWZm ZWN0IHRoZSBjb3N0CiEgICAgICBlc3RpbWF0ZSBmb3IgdGhlIHBhdGguICBU aGUgcGF0aCdzIDxzdHJ1Y3RmaWVsZD5mZHdfcHJpdmF0ZTwvPiBmaWVsZAoh ICAgICAgd291bGQgcHJvYmFibHkgaW5jbHVkZSBhIHBvaW50ZXIgdG8gdGhl IGlkZW50aWZpZWQgY2xhdXNlJ3MKISAgICAgIDxzdHJ1Y3RuYW1lPlJlc3Ry aWN0SW5mbzwvPiBub2RlLiAgVGhlbgogICAgICAgPGZ1bmN0aW9uPkdldEZv cmVpZ25QbGFuPC8+IHdvdWxkIHJlbW92ZSB0aGF0IGNsYXVzZSBmcm9tIHNj YW5fY2xhdXNlcywKICAgICAgIGJ1dCBhZGQgdGhlIDxyZXBsYWNlYWJsZT5z dWJfZXhwcmVzc2lvbjwvPiB0byA8c3RydWN0ZmllbGQ+ZmR3X2V4cHJzPC8+ CiAgICAgICB0byBlbnN1cmUgdGhhdCBpdCBnZXRzIG1hc3NhZ2VkIGludG8g ZXhlY3V0YWJsZSBmb3JtLiAgSXQgd291bGQgcHJvYmFibHkKKioqIGEvZG9j L3NyYy9zZ21sL3JlZi9hbHRlcl9mb3JlaWduX3RhYmxlLnNnbWwKLS0tIGIv ZG9jL3NyYy9zZ21sL3JlZi9hbHRlcl9mb3JlaWduX3RhYmxlLnNnbWwKKioq KioqKioqKioqKioqCioqKiA0Miw0NyAqKioqIEFMVEVSIEZPUkVJR04gVEFC TEUgWyBJRiBFWElTVFMgXSA8cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFNRVRF UiI+bmFtZTwvcmVwbGFjZWFiCi0tLSA0Miw1MSAtLS0tCiAgICAgIEFMVEVS IFsgQ09MVU1OIF0gPHJlcGxhY2VhYmxlIGNsYXNzPSJQQVJBTUVURVIiPmNv bHVtbl9uYW1lPC9yZXBsYWNlYWJsZT4gU0VUICggPHJlcGxhY2VhYmxlIGNs YXNzPSJQQVJBTUVURVIiPmF0dHJpYnV0ZV9vcHRpb248L3JlcGxhY2VhYmxl PiA9IDxyZXBsYWNlYWJsZSBjbGFzcz0iUEFSQU1FVEVSIj52YWx1ZTwvcmVw bGFjZWFibGU+IFssIC4uLiBdICkKICAgICAgQUxURVIgWyBDT0xVTU4gXSA8 cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFNRVRFUiI+Y29sdW1uX25hbWU8L3Jl cGxhY2VhYmxlPiBSRVNFVCAoIDxyZXBsYWNlYWJsZSBjbGFzcz0iUEFSQU1F VEVSIj5hdHRyaWJ1dGVfb3B0aW9uPC9yZXBsYWNlYWJsZT4gWywgLi4uIF0g KQogICAgICBBTFRFUiBbIENPTFVNTiBdIDxyZXBsYWNlYWJsZSBjbGFzcz0i UEFSQU1FVEVSIj5jb2x1bW5fbmFtZTwvcmVwbGFjZWFibGU+IE9QVElPTlMg KCBbIEFERCB8IFNFVCB8IERST1AgXSA8cmVwbGFjZWFibGUgY2xhc3M9IlBB UkFNRVRFUiI+b3B0aW9uPC9yZXBsYWNlYWJsZT4gWyc8cmVwbGFjZWFibGUg Y2xhc3M9IlBBUkFNRVRFUiI+dmFsdWU8L3JlcGxhY2VhYmxlPiddIFssIC4u LiBdKQorICAgICBBREQgPHJlcGxhY2VhYmxlIGNsYXNzPSJQQVJBTUVURVIi PnRhYmxlX2NvbnN0cmFpbnQ8L3JlcGxhY2VhYmxlPgorICAgICBEUk9QIENP TlNUUkFJTlQgWyBJRiBFWElTVFMgXSAgPHJlcGxhY2VhYmxlIGNsYXNzPSJQ QVJBTUVURVIiPmNvbnN0cmFpbnRfbmFtZTwvcmVwbGFjZWFibGU+IFsgUkVT VFJJQ1QgfCBDQVNDQURFIF0KKyAgICAgSU5IRVJJVCA8cmVwbGFjZWFibGUg Y2xhc3M9IlBBUkFNRVRFUiI+cGFyZW50X3RhYmxlPC9yZXBsYWNlYWJsZT4K KyAgICAgTk8gSU5IRVJJVCA8cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFNRVRF UiI+cGFyZW50X3RhYmxlPC9yZXBsYWNlYWJsZT4KICAgICAgT1dORVIgVE8g PHJlcGxhY2VhYmxlIGNsYXNzPSJQQVJBTUVURVIiPm5ld19vd25lcjwvcmVw bGFjZWFibGU+CiAgICAgIE9QVElPTlMgKCBbIEFERCB8IFNFVCB8IERST1Ag XSA8cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFNRVRFUiI+b3B0aW9uPC9yZXBs YWNlYWJsZT4gWyc8cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFNRVRFUiI+dmFs dWU8L3JlcGxhY2VhYmxlPiddIFssIC4uLiBdKQogIDwvc3lub3BzaXM+Cioq KioqKioqKioqKioqKgoqKiogMTQ5LDE1NCAqKioqIEFMVEVSIEZPUkVJR04g VEFCTEUgWyBJRiBFWElTVFMgXSA8cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFN RVRFUiI+bmFtZTwvcmVwbGFjZWFiCi0tLSAxNTMsMjAyIC0tLS0KICAgICA8 L3Zhcmxpc3RlbnRyeT4KICAKICAgICA8dmFybGlzdGVudHJ5PgorICAgICA8 dGVybT48bGl0ZXJhbD5BREQgPHJlcGxhY2VhYmxlIGNsYXNzPSJQQVJBTUVU RVIiPnRhYmxlX2NvbnN0cmFpbnQ8L3JlcGxhY2VhYmxlPjwvbGl0ZXJhbD48 L3Rlcm0+CisgICAgIDxsaXN0aXRlbT4KKyAgICAgIDxwYXJhPgorICAgICAg IFRoaXMgZm9ybSBhZGRzIGEgbmV3IGNvbnN0cmFpbnQgdG8gYSB0YWJsZSB1 c2luZyB0aGUgc2FtZSBzeW50YXggYXMKKyAgICAgICA8eHJlZiBsaW5rZW5k PSJTUUwtQ1JFQVRFRk9SRUlHTlRBQkxFIj4uCisgICAgICAgVW5saWtlIHRo ZSBjYXNlIHdoZW4gYWRkaW5nIGEgY29uc3RyYWludCB0byBhIHJlZ3VsYXIg dGFibGUsIG5vdGhpbmcgaGFwcGVucworICAgICAgIHRvIHRoZSB1bmRlcmx5 aW5nIHN0b3JhZ2U6IHRoaXMgYWN0aW9uIHNpbXBseSBkZWNsYXJlcyB0aGF0 CisgICAgICAgc29tZSBuZXcgY29uc3RyYWludCBob2xkcyBmb3IgYWxsIHJv d3MgaW4gdGhlIGZvcmVpZ24gdGFibGUuCisgICAgICA8L3BhcmE+CisgICAg IDwvbGlzdGl0ZW0+CisgICAgPC92YXJsaXN0ZW50cnk+CisgCisgICAgPHZh cmxpc3RlbnRyeT4KKyAgICAgPHRlcm0+PGxpdGVyYWw+RFJPUCBDT05TVFJB SU5UIFsgSUYgRVhJU1RTIF08L2xpdGVyYWw+PC90ZXJtPgorICAgICA8bGlz dGl0ZW0+CisgICAgICA8cGFyYT4KKyAgICAgICBUaGlzIGZvcm0gZHJvcHMg dGhlIHNwZWNpZmllZCBjb25zdHJhaW50IG9uIGEgdGFibGUuCisgICAgICAg SWYgPGxpdGVyYWw+SUYgRVhJU1RTPC9saXRlcmFsPiBpcyBzcGVjaWZpZWQg YW5kIHRoZSBjb25zdHJhaW50CisgICAgICAgZG9lcyBub3QgZXhpc3QsIG5v IGVycm9yIGlzIHRocm93bi4gSW4gdGhpcyBjYXNlIGEgbm90aWNlIGlzIGlz c3VlZCBpbnN0ZWFkLgorICAgICAgPC9wYXJhPgorICAgICA8L2xpc3RpdGVt PgorICAgIDwvdmFybGlzdGVudHJ5PgorIAorICAgIDx2YXJsaXN0ZW50cnk+ CisgICAgIDx0ZXJtPjxsaXRlcmFsPklOSEVSSVQgPHJlcGxhY2VhYmxlIGNs YXNzPSJQQVJBTUVURVIiPnBhcmVudF90YWJsZTwvcmVwbGFjZWFibGU+PC9s aXRlcmFsPjwvdGVybT4KKyAgICAgPGxpc3RpdGVtPgorICAgICAgPHBhcmE+ CisgICAgICAgVGhpcyBmb3JtIGFkZHMgdGhlIHRhcmdldCBmb3JlaWduIHRh YmxlIGFzIGEgbmV3IGNoaWxkIG9mIHRoZSBzcGVjaWZpZWQKKyAgICAgICBw YXJlbnQgdGFibGUuICBUaGUgcGFyZW50IHRhYmxlIG11c3QgYmUgYW4gb3Jk aW5hcnkgdGFibGUuCisgICAgICA8L3BhcmE+CisgICAgIDwvbGlzdGl0ZW0+ CisgICAgPC92YXJsaXN0ZW50cnk+CisgCisgICAgPHZhcmxpc3RlbnRyeT4K KyAgICAgPHRlcm0+PGxpdGVyYWw+Tk8gSU5IRVJJVCA8cmVwbGFjZWFibGUg Y2xhc3M9IlBBUkFNRVRFUiI+cGFyZW50X3RhYmxlPC9yZXBsYWNlYWJsZT48 L2xpdGVyYWw+PC90ZXJtPgorICAgICA8bGlzdGl0ZW0+CisgICAgICA8cGFy YT4KKyAgICAgICBUaGlzIGZvcm0gcmVtb3ZlcyB0aGUgdGFyZ2V0IGZvcmVp Z24gdGFibGUgZnJvbSB0aGUgbGlzdCBvZiBjaGlsZHJlbiBvZgorICAgICAg IHRoZSBzcGVjaWZpZWQgcGFyZW50IHRhYmxlLgorICAgICAgPC9wYXJhPgor ICAgICA8L2xpc3RpdGVtPgorICAgIDwvdmFybGlzdGVudHJ5PgorIAorICAg IDx2YXJsaXN0ZW50cnk+CiAgICAgIDx0ZXJtPjxsaXRlcmFsPk9XTkVSPC9s aXRlcmFsPjwvdGVybT4KICAgICAgPGxpc3RpdGVtPgogICAgICAgPHBhcmE+ CioqKioqKioqKioqKioqKgoqKiogMjcwLDI3NSAqKioqIEFMVEVSIEZPUkVJ R04gVEFCTEUgWyBJRiBFWElTVFMgXSA8cmVwbGFjZWFibGUgY2xhc3M9IlBB UkFNRVRFUiI+bmFtZTwvcmVwbGFjZWFiCi0tLSAzMTgsMzQxIC0tLS0KICAg ICAgIDwvdmFybGlzdGVudHJ5PgogIAogICAgICAgPHZhcmxpc3RlbnRyeT4K KyAgICAgICA8dGVybT48cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFNRVRFUiI+ dGFibGVfY29uc3RyYWludDwvcmVwbGFjZWFibGU+PC90ZXJtPgorICAgICAg IDxsaXN0aXRlbT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICBOZXcgdGFi bGUgY29uc3RyYWludCBmb3IgdGhlIHRhYmxlLgorICAgICAgICA8L3BhcmE+ CisgICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5Pgor IAorICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICA8dGVybT48cmVwbGFj ZWFibGUgY2xhc3M9IlBBUkFNRVRFUiI+Y29uc3RyYWludF9uYW1lPC9yZXBs YWNlYWJsZT48L3Rlcm0+CisgICAgICAgPGxpc3RpdGVtPgorICAgICAgICA8 cGFyYT4KKyAgICAgICAgIE5hbWUgb2YgYW4gZXhpc3RpbmcgY29uc3RyYWlu dCB0byBkcm9wLgorICAgICAgICA8L3BhcmE+CisgICAgICAgPC9saXN0aXRl bT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgorIAorICAgICAgPHZhcmxpc3Rl bnRyeT4KICAgICAgICA8dGVybT48bGl0ZXJhbD5DQVNDQURFPC9saXRlcmFs PjwvdGVybT4KICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAgIDxwYXJhPgoq KioqKioqKioqKioqKioKKioqIDI5MCwyOTUgKioqKiBBTFRFUiBGT1JFSUdO IFRBQkxFIFsgSUYgRVhJU1RTIF0gPHJlcGxhY2VhYmxlIGNsYXNzPSJQQVJB TUVURVIiPm5hbWU8L3JlcGxhY2VhYgotLS0gMzU2LDM3MiAtLS0tCiAgICAg ICA8L3Zhcmxpc3RlbnRyeT4KICAKICAgICAgIDx2YXJsaXN0ZW50cnk+Cisg ICAgICAgPHRlcm0+PHJlcGxhY2VhYmxlIGNsYXNzPSJQQVJBTUVURVIiPnBh cmVudF9uYW1lPC9yZXBsYWNlYWJsZT48L3Rlcm0+CisgICAgICAgPGxpc3Rp dGVtPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgIEEgcGFyZW50IHRhYmxl IHRvIGFzc29jaWF0ZSBvciBkZS1hc3NvY2lhdGUgd2l0aCB0aGlzIGZvcmVp Z24gdGFibGUuCisgICAgICAgICBUaGUgcGFyZW50IHRhYmxlIG11c3QgYmUg YW4gb3JkaW5hcnkgdGFibGUuCisgICAgICAgIDwvcGFyYT4KKyAgICAgICA8 L2xpc3RpdGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CisgICAgIDwvdmFy aWFibGVsaXN0PgorIAorICAgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgICA8 dGVybT48cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFNRVRFUiI+bmV3X293bmVy PC9yZXBsYWNlYWJsZT48L3Rlcm0+CiAgICAgICAgPGxpc3RpdGVtPgogICAg ICAgICA8cGFyYT4KKioqKioqKioqKioqKioqCioqKiAzMDYsMzEyICoqKiog QUxURVIgRk9SRUlHTiBUQUJMRSBbIElGIEVYSVNUUyBdIDxyZXBsYWNlYWJs ZSBjbGFzcz0iUEFSQU1FVEVSIj5uYW1lPC9yZXBsYWNlYWIKICAgICAgICAg PC9wYXJhPgogICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICA8L3Zhcmxpc3Rl bnRyeT4KLSAgICAgPC92YXJpYWJsZWxpc3Q+CiAgIDwvcmVmc2VjdDE+CiAg CiAgIDxyZWZzZWN0MT4KLS0tIDM4MywzODggLS0tLQoqKioqKioqKioqKioq KioKKioqIDMxOSwzMjggKioqKiBBTFRFUiBGT1JFSUdOIFRBQkxFIFsgSUYg RVhJU1RTIF0gPHJlcGxhY2VhYmxlIGNsYXNzPSJQQVJBTUVURVIiPm5hbWU8 L3JlcGxhY2VhYgogICAgIDxwYXJhPgogICAgICBDb25zaXN0ZW5jeSB3aXRo IHRoZSBmb3JlaWduIHNlcnZlciBpcyBub3QgY2hlY2tlZCB3aGVuIGEgY29s dW1uIGlzIGFkZGVkCiAgICAgIG9yIHJlbW92ZWQgd2l0aCA8bGl0ZXJhbD5B REQgQ09MVU1OPC9saXRlcmFsPiBvcgohICAgICA8bGl0ZXJhbD5EUk9QIENP TFVNTjwvbGl0ZXJhbD4sIGEgPGxpdGVyYWw+Tk9UIE5VTEw8Lz4gY29uc3Ry YWludCBpcwohICAgICBhZGRlZCwgb3IgYSBjb2x1bW4gdHlwZSBpcyBjaGFu Z2VkIHdpdGggPGxpdGVyYWw+U0VUIERBVEEgVFlQRTwvPi4gIEl0IGlzCiEg ICAgIHRoZSB1c2VyJ3MgcmVzcG9uc2liaWxpdHkgdG8gZW5zdXJlIHRoYXQg dGhlIHRhYmxlIGRlZmluaXRpb24gbWF0Y2hlcyB0aGUKISAgICAgcmVtb3Rl IHNpZGUuCiAgICAgPC9wYXJhPgogIAogICAgIDxwYXJhPgotLS0gMzk1LDQw NCAtLS0tCiAgICAgPHBhcmE+CiAgICAgIENvbnNpc3RlbmN5IHdpdGggdGhl IGZvcmVpZ24gc2VydmVyIGlzIG5vdCBjaGVja2VkIHdoZW4gYSBjb2x1bW4g aXMgYWRkZWQKICAgICAgb3IgcmVtb3ZlZCB3aXRoIDxsaXRlcmFsPkFERCBD T0xVTU48L2xpdGVyYWw+IG9yCiEgICAgIDxsaXRlcmFsPkRST1AgQ09MVU1O PC9saXRlcmFsPiwgYSA8bGl0ZXJhbD5OT1QgTlVMTDwvPiBjb25zdHJhaW50 IG9yCiEgICAgIDxsaXRlcmFsPkNIRUNLPC8+IGNvbnN0cmFpbnQgaXMgYWRk ZWQsIG9yIGEgY29sdW1uIHR5cGUgaXMgY2hhbmdlZCB3aXRoCiEgICAgIDxs aXRlcmFsPlNFVCBEQVRBIFRZUEU8Lz4uICBJdCBpcyB0aGUgdXNlcidzIHJl c3BvbnNpYmlsaXR5IHRvIGVuc3VyZSB0aGF0CiEgICAgIHRoZSB0YWJsZSBk ZWZpbml0aW9uIG1hdGNoZXMgdGhlIHJlbW90ZSBzaWRlLgogICAgIDwvcGFy YT4KICAKICAgICA8cGFyYT4KKioqIGEvZG9jL3NyYy9zZ21sL3JlZi9hbHRl cl90YWJsZS5zZ21sCi0tLSBiL2RvYy9zcmMvc2dtbC9yZWYvYWx0ZXJfdGFi bGUuc2dtbAoqKioqKioqKioqKioqKioKKioqIDkzNyw5NDIgKioqKiBBTFRF UiBUQUJMRSBbIElGIEVYSVNUUyBdIDxyZXBsYWNlYWJsZSBjbGFzcz0iUEFS QU1FVEVSIj5uYW1lPC9yZXBsYWNlYWJsZT4KLS0tIDkzNyw5NDkgLS0tLQog ICAgIDwvcGFyYT4KICAKICAgICA8cGFyYT4KKyAgICAgSWYgYSB0YWJsZSBo YXMgYW55IGRlc2NlbmRhbnQgdGFibGVzIHRoYXQgYXJlIGZvcmVpZ24sIGEg cmVjdXJzaXZlCisgICAgIDxsaXRlcmFsPlNFVCBTVE9SQUdFPC9saXRlcmFs PiBvcGVyYXRpb24gd2lsbCBiZSByZWplY3RlZCBzaW5jZSBpdAorICAgICBp cyBub3QgcGVybWl0dGVkIHRvIGFkZCBhbiA8bGl0ZXJhbD5vaWQ8L2xpdGVy YWw+IHN5c3RlbSBjb2x1bW4gdG8KKyAgICAgZm9yZWlnbiB0YWJsZXMuCisg ICAgPC9wYXJhPgorIAorICAgIDxwYXJhPgogICAgICBUaGUgPGxpdGVyYWw+ VFJJR0dFUjwvPiwgPGxpdGVyYWw+Q0xVU1RFUjwvPiwgPGxpdGVyYWw+T1dO RVI8Lz4sCiAgICAgIGFuZCA8bGl0ZXJhbD5UQUJMRVNQQUNFPC8+IGFjdGlv bnMgbmV2ZXIgcmVjdXJzZSB0byBkZXNjZW5kYW50IHRhYmxlczsKICAgICAg dGhhdCBpcywgdGhleSBhbHdheXMgYWN0IGFzIHRob3VnaCA8bGl0ZXJhbD5P TkxZPC8+IHdlcmUgc3BlY2lmaWVkLgoqKioqKioqKioqKioqKioKKioqIDk0 NSw5NTAgKioqKiBBTFRFUiBUQUJMRSBbIElGIEVYSVNUUyBdIDxyZXBsYWNl YWJsZSBjbGFzcz0iUEFSQU1FVEVSIj5uYW1lPC9yZXBsYWNlYWJsZT4KLS0t IDk1Miw5NzAgLS0tLQogICAgIDwvcGFyYT4KICAKICAgICA8cGFyYT4KKyAg ICAgV2hlbiBhZGRpbmcgYSA8bGl0ZXJhbD5DSEVDSzwvPiBjb25zdHJhaW50 IHdpdGggdGhlIDxsaXRlcmFsPk5PVCBWQUxJRAorICAgICA8L2xpdGVyYWw+ IG9wdGlvbiByZWN1cnNpdmVseSwgYW4gaW5oZXJpdGVkIGNvbnN0cmFpbnQg b24gYSBkZXNjZW5kYW50CisgICAgIHRhYmxlIHRoYXQgaXMgZm9yZWlnbiB3 aWxsIGJlIG1hcmtlZCB2YWxpZCB3aXRob3V0IGNoZWNraW5nCisgICAgIGNv bnNpc3RlbmN5IHdpdGggdGhlIGZvcmVpZ24gc2VydmVyLgorICAgIDwvcGFy YT4KKyAKKyAgICA8cGFyYT4KKyAgICAgQSByZWN1cnNpdmUgPGxpdGVyYWw+ U0VUIFNUT1JBR0U8L2xpdGVyYWw+IG9wZXJhdGlvbiB3aWxsIG1ha2UgdGhl CisgICAgIHN0b3JhZ2UgbW9kZSBmb3IgYSBkZXNjZW5kYW50IHRhYmxlJ3Mg Y29sdW1uIHVuY2hhbmdlZCBpZiB0aGUgdGFibGUgaXMKKyAgICAgZm9yZWln bi4KKyAgICA8L3BhcmE+CisgCisgICAgPHBhcmE+CiAgICAgIENoYW5naW5n IGFueSBwYXJ0IG9mIGEgc3lzdGVtIGNhdGFsb2cgdGFibGUgaXMgbm90IHBl cm1pdHRlZC4KICAgICA8L3BhcmE+CiAgCioqKiBhL2RvYy9zcmMvc2dtbC9y ZWYvYW5hbHl6ZS5zZ21sCi0tLSBiL2RvYy9zcmMvc2dtbC9yZWYvYW5hbHl6 ZS5zZ21sCioqKioqKioqKioqKioqKgoqKiogMjAwLDIwNSAqKioqIEFOQUxZ WkUgWyBWRVJCT1NFIF0gWyA8cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFNRVRF UiI+dGFibGVfbmFtZTwvcmVwbGFjZWFibGU+IFsKLS0tIDIwMCwyMTIgLS0t LQogICAgPC9wYXJhPgogIAogICAgPHBhcmE+CisgICAgIFRoZSBpbmhlcml0 YW5jZSBzdGF0aXN0aWNzIGZvciBhIHBhcmVudCB0YWJsZSB0aGF0IGNvbnRh aW5zIG9uZSBvciBtb3JlCisgICAgIGNoaWxkcmVuIHRoYXQgYXJlIGZvcmVp Z24gdGFibGVzIGFyZSBjb2xsZWN0ZWQgb25seSB3aGVuIGV4cGxpY2l0bHkK KyAgICAgc2VsZWN0ZWQuICBJZiB0aGUgZm9yZWlnbiB0YWJsZSdzIHdyYXBw ZXIgZG9lcyBub3Qgc3VwcG9ydAorICAgICA8Y29tbWFuZD5BTkFMWVpFPC9j b21tYW5kPiwgdGhlIGNvbW1hbmQgcHJpbnRzIGEgd2FybmluZyBhbmQgZG9l cyBub3RoaW5nLgorICAgPC9wYXJhPgorIAorICAgPHBhcmE+CiAgICAgIElm IHRoZSB0YWJsZSBiZWluZyBhbmFseXplZCBpcyBjb21wbGV0ZWx5IGVtcHR5 LCA8Y29tbWFuZD5BTkFMWVpFPC9jb21tYW5kPgogICAgICB3aWxsIG5vdCBy ZWNvcmQgbmV3IHN0YXRpc3RpY3MgZm9yIHRoYXQgdGFibGUuICBBbnkgZXhp c3Rpbmcgc3RhdGlzdGljcwogICAgICB3aWxsIGJlIHJldGFpbmVkLgoqKiog YS9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV9mb3JlaWduX3RhYmxlLnNnbWwK LS0tIGIvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfZm9yZWlnbl90YWJsZS5z Z21sCioqKioqKioqKioqKioqKgoqKiogMTksMjcgKioqKgogICA8cmVmc3lu b3BzaXNkaXY+CiAgPHN5bm9wc2lzPgogIENSRUFURSBGT1JFSUdOIFRBQkxF IFsgSUYgTk9UIEVYSVNUUyBdIDxyZXBsYWNlYWJsZSBjbGFzcz0iUEFSQU1F VEVSIj50YWJsZV9uYW1lPC9yZXBsYWNlYWJsZT4gKCBbCiEgICAgIDxyZXBs YWNlYWJsZSBjbGFzcz0iUEFSQU1FVEVSIj5jb2x1bW5fbmFtZTwvcmVwbGFj ZWFibGU+IDxyZXBsYWNlYWJsZSBjbGFzcz0iUEFSQU1FVEVSIj5kYXRhX3R5 cGU8L3JlcGxhY2VhYmxlPiBbIE9QVElPTlMgKCA8cmVwbGFjZWFibGUgY2xh c3M9IlBBUkFNRVRFUiI+b3B0aW9uPC9yZXBsYWNlYWJsZT4gJzxyZXBsYWNl YWJsZSBjbGFzcz0iUEFSQU1FVEVSIj52YWx1ZTwvcmVwbGFjZWFibGU+JyBb LCAuLi4gXSApIF0gWyBDT0xMQVRFIDxyZXBsYWNlYWJsZT5jb2xsYXRpb248 L3JlcGxhY2VhYmxlPiBdIFsgPHJlcGxhY2VhYmxlIGNsYXNzPSJQQVJBTUVU RVIiPmNvbHVtbl9jb25zdHJhaW50PC9yZXBsYWNlYWJsZT4gWyAuLi4gXSBd CiAgICAgIFssIC4uLiBdCiAgXSApCiAgICBTRVJWRVIgPHJlcGxhY2VhYmxl IGNsYXNzPSJwYXJhbWV0ZXIiPnNlcnZlcl9uYW1lPC9yZXBsYWNlYWJsZT4K ICBbIE9QVElPTlMgKCA8cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFNRVRFUiI+ b3B0aW9uPC9yZXBsYWNlYWJsZT4gJzxyZXBsYWNlYWJsZSBjbGFzcz0iUEFS QU1FVEVSIj52YWx1ZTwvcmVwbGFjZWFibGU+JyBbLCAuLi4gXSApIF0KICAK LS0tIDE5LDI5IC0tLS0KICAgPHJlZnN5bm9wc2lzZGl2PgogIDxzeW5vcHNp cz4KICBDUkVBVEUgRk9SRUlHTiBUQUJMRSBbIElGIE5PVCBFWElTVFMgXSA8 cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFNRVRFUiI+dGFibGVfbmFtZTwvcmVw bGFjZWFibGU+ICggWwohICAgeyA8cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFN RVRFUiI+Y29sdW1uX25hbWU8L3JlcGxhY2VhYmxlPiA8cmVwbGFjZWFibGUg Y2xhc3M9IlBBUkFNRVRFUiI+ZGF0YV90eXBlPC9yZXBsYWNlYWJsZT4gWyBP UFRJT05TICggPHJlcGxhY2VhYmxlIGNsYXNzPSJQQVJBTUVURVIiPm9wdGlv bjwvcmVwbGFjZWFibGU+ICc8cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFNRVRF UiI+dmFsdWU8L3JlcGxhY2VhYmxlPicgWywgLi4uIF0gKSBdIFsgQ09MTEFU RSA8cmVwbGFjZWFibGU+Y29sbGF0aW9uPC9yZXBsYWNlYWJsZT4gXSBbIDxy ZXBsYWNlYWJsZSBjbGFzcz0iUEFSQU1FVEVSIj5jb2x1bW5fY29uc3RyYWlu dDwvcmVwbGFjZWFibGU+IFsgLi4uIF0gXQohICAgICB8IDxyZXBsYWNlYWJs ZT50YWJsZV9jb25zdHJhaW50PC9yZXBsYWNlYWJsZT4gfQogICAgICBbLCAu Li4gXQogIF0gKQorIFsgSU5IRVJJVFMgKCA8cmVwbGFjZWFibGU+cGFyZW50 X3RhYmxlPC9yZXBsYWNlYWJsZT4gWywgLi4uIF0gKSBdCiAgICBTRVJWRVIg PHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJhbWV0ZXIiPnNlcnZlcl9uYW1lPC9y ZXBsYWNlYWJsZT4KICBbIE9QVElPTlMgKCA8cmVwbGFjZWFibGUgY2xhc3M9 IlBBUkFNRVRFUiI+b3B0aW9uPC9yZXBsYWNlYWJsZT4gJzxyZXBsYWNlYWJs ZSBjbGFzcz0iUEFSQU1FVEVSIj52YWx1ZTwvcmVwbGFjZWFibGU+JyBbLCAu Li4gXSApIF0KICAKKioqKioqKioqKioqKioqCioqKiAzMCwzNiAqKioqIENS RUFURSBGT1JFSUdOIFRBQkxFIFsgSUYgTk9UIEVYSVNUUyBdIDxyZXBsYWNl YWJsZSBjbGFzcz0iUEFSQU1FVEVSIj50YWJsZV9uYW1lCi0tLSAzMiw0NCAt LS0tCiAgWyBDT05TVFJBSU5UIDxyZXBsYWNlYWJsZSBjbGFzcz0iUEFSQU1F VEVSIj5jb25zdHJhaW50X25hbWU8L3JlcGxhY2VhYmxlPiBdCiAgeyBOT1Qg TlVMTCB8CiAgICBOVUxMIHwKKyAgIENIRUNLICggPHJlcGxhY2VhYmxlIGNs YXNzPSJQQVJBTUVURVIiPmV4cHJlc3Npb248L3JlcGxhY2VhYmxlPiApIFsg Tk8gSU5IRVJJVCBdIHwKICAgIERFRkFVTFQgPHJlcGxhY2VhYmxlPmRlZmF1 bHRfZXhwcjwvcmVwbGFjZWFibGU+IH0KKyAKKyA8cGhyYXNlPmFuZCA8cmVw bGFjZWFibGUgY2xhc3M9IlBBUkFNRVRFUiI+dGFibGVfY29uc3RyYWludDwv cmVwbGFjZWFibGU+IGlzOjwvcGhyYXNlPgorIAorIFsgQ09OU1RSQUlOVCA8 cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFNRVRFUiI+Y29uc3RyYWludF9uYW1l PC9yZXBsYWNlYWJsZT4gXQorIHsgQ0hFQ0sgKCA8cmVwbGFjZWFibGUgY2xh c3M9IlBBUkFNRVRFUiI+ZXhwcmVzc2lvbjwvcmVwbGFjZWFibGU+ICkgWyBO TyBJTkhFUklUIF0gfQogIDwvc3lub3BzaXM+CiAgIDwvcmVmc3lub3BzaXNk aXY+CiAgCioqKioqKioqKioqKioqKgoqKiogMTM4LDE0MyAqKioqIENSRUFU RSBGT1JFSUdOIFRBQkxFIFsgSUYgTk9UIEVYSVNUUyBdIDxyZXBsYWNlYWJs ZSBjbGFzcz0iUEFSQU1FVEVSIj50YWJsZV9uYW1lCi0tLSAxNDYsMTc3IC0t LS0KICAgICA8L3Zhcmxpc3RlbnRyeT4KICAKICAgICA8dmFybGlzdGVudHJ5 PgorICAgICA8dGVybT48bGl0ZXJhbD5DSEVDSyAoIDxyZXBsYWNlYWJsZSBj bGFzcz0iUEFSQU1FVEVSIj5leHByZXNzaW9uPC9yZXBsYWNlYWJsZT4gKSBb IE5PIElOSEVSSVQgXSA8L2xpdGVyYWw+PC90ZXJtPgorICAgICA8bGlzdGl0 ZW0+CisgICAgICA8cGFyYT4KKyAgICAgICBUaGUgPGxpdGVyYWw+Q0hFQ0s8 Lz4gY2xhdXNlIHNwZWNpZmllcyBhbiBleHByZXNzaW9uIHByb2R1Y2luZyBh CisgICAgICAgQm9vbGVhbiByZXN1bHQgd2hpY2ggZWFjaCByb3cgbXVzdCBz YXRpc2Z5LgorICAgICAgIEV4cHJlc3Npb25zIGV2YWx1YXRpbmcgdG8gVFJV RSBvciBVTktOT1dOIHN1Y2NlZWQuCisgICAgICAgQSBjaGVjayBjb25zdHJh aW50IHNwZWNpZmllZCBhcyBhIGNvbHVtbiBjb25zdHJhaW50IHNob3VsZAor ICAgICAgIHJlZmVyZW5jZSB0aGF0IGNvbHVtbidzIHZhbHVlIG9ubHksIHdo aWxlIGFuIGV4cHJlc3Npb24KKyAgICAgICBhcHBlYXJpbmcgaW4gYSB0YWJs ZSBjb25zdHJhaW50IGNhbiByZWZlcmVuY2UgbXVsdGlwbGUgY29sdW1ucy4K KyAgICAgIDwvcGFyYT4KKyAKKyAgICAgIDxwYXJhPgorICAgICAgIEN1cnJl bnRseSwgPGxpdGVyYWw+Q0hFQ0s8L2xpdGVyYWw+IGV4cHJlc3Npb25zIGNh bm5vdCBjb250YWluCisgICAgICAgc3VicXVlcmllcyBub3IgcmVmZXIgdG8g dmFyaWFibGVzIG90aGVyIHRoYW4gY29sdW1ucyBvZiB0aGUKKyAgICAgICBj dXJyZW50IHJvdy4gIFRoZSBzeXN0ZW0gY29sdW1uIDxsaXRlcmFsPnRhYmxl b2lkPC9saXRlcmFsPgorICAgICAgIG1heSBiZSByZWZlcmVuY2VkLCBidXQg bm90IGFueSBvdGhlciBzeXN0ZW0gY29sdW1uLgorICAgICAgPC9wYXJhPgor IAorICAgICAgPHBhcmE+CisgICAgICAgQSBjb25zdHJhaW50IG1hcmtlZCB3 aXRoIDxsaXRlcmFsPk5PIElOSEVSSVQ8Lz4gd2lsbCBub3QgcHJvcGFnYXRl IHRvCisgICAgICAgY2hpbGQgdGFibGVzLgorICAgICAgPC9wYXJhPgorICAg ICA8L2xpc3RpdGVtPgorICAgIDwvdmFybGlzdGVudHJ5PgorIAorICAgIDx2 YXJsaXN0ZW50cnk+CiAgICAgIDx0ZXJtPjxsaXRlcmFsPkRFRkFVTFQKICAg ICAgPHJlcGxhY2VhYmxlPmRlZmF1bHRfZXhwcjwvcmVwbGFjZWFibGU+PC9s aXRlcmFsPjwvdGVybT4KICAgICAgPGxpc3RpdGVtPgoqKioqKioqKioqKioq KioKKioqIDE1OSwxNjQgKioqKiBDUkVBVEUgRk9SRUlHTiBUQUJMRSBbIElG IE5PVCBFWElTVFMgXSA8cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFNRVRFUiI+ dGFibGVfbmFtZQotLS0gMTkzLDIxMCAtLS0tCiAgICAgPC92YXJsaXN0ZW50 cnk+CiAgCiAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgPHRlcm0+PHJlcGxh Y2VhYmxlIGNsYXNzPSJQQVJBTUVURVIiPnBhcmVudF90YWJsZTwvcmVwbGFj ZWFibGU+PC90ZXJtPgorICAgICA8bGlzdGl0ZW0+CisgICAgICA8cGFyYT4K KyAgICAgICBUaGUgbmFtZSBvZiBhbiBleGlzdGluZyB0YWJsZSBmcm9tIHdo aWNoIHRoZSBuZXcgZm9yZWlnbiB0YWJsZQorICAgICAgIGF1dG9tYXRpY2Fs bHkgaW5oZXJpdHMgYWxsIGNvbHVtbnMuICBUaGUgc3BlY2lmaWVkIHBhcmVu dCB0YWJsZQorICAgICAgIG11c3QgYmUgYW4gb3JkaW5hcnkgdGFibGUuICBT ZWUgPHhyZWYgbGlua2VuZD0iZGRsLWluaGVyaXQiPiBmb3IgdGhlCisgICAg ICAgZGV0YWlscyBvZiB0YWJsZSBpbmhlcml0YW5jZS4KKyAgICAgIDwvcGFy YT4KKyAgICAgPC9saXN0aXRlbT4KKyAgICA8L3Zhcmxpc3RlbnRyeT4KKyAK KyAgICA8dmFybGlzdGVudHJ5PgogICAgICA8dGVybT48cmVwbGFjZWFibGUg Y2xhc3M9IlBBUkFNRVRFUiI+c2VydmVyX25hbWU8L3JlcGxhY2VhYmxlPjwv dGVybT4KICAgICAgPGxpc3RpdGVtPgogICAgICAgPHBhcmE+CioqKioqKioq KioqKioqKgoqKiogMTg3LDE5MiAqKioqIENSRUFURSBGT1JFSUdOIFRBQkxF IFsgSUYgTk9UIEVYSVNUUyBdIDxyZXBsYWNlYWJsZSBjbGFzcz0iUEFSQU1F VEVSIj50YWJsZV9uYW1lCi0tLSAyMzMsMjQ5IC0tLS0KICAKICAgPC9yZWZz ZWN0MT4KICAKKyAgPHJlZnNlY3QxPgorICAgPHRpdGxlPk5vdGVzPC90aXRs ZT4KKyAKKyAgICA8cGFyYT4KKyAgICAgQ29uc3RyYWludHMgb24gZm9yZWln biB0YWJsZXMgYXJlIG5vdCBlbmZvcmNlZCBvbiBpbnNlcnQgb3IgdXBkYXRl LgorICAgICBUaG9zZSBkZWZpbml0aW9ucyBzaW1wbHkgZGVjbGFyZSB0aGUg Y29uc3RyYWludHMgaG9sZCBmb3IgYWxsIHJvd3MKKyAgICAgaW4gdGhlIGZv cmVpZ24gdGFibGVzLiAgSXQgaXMgdGhlIHVzZXIncyByZXNwb25zaWJpbGl0 eSB0byBlbnN1cmUKKyAgICAgdGhhdCB0aG9zZSBkZWZpbml0aW9ucyBtYXRj aCB0aGUgcmVtb3RlIHNpZGUuICBTdWNoIGNvbnN0cmFpbnRzIGFyZQorICAg ICB1c2VkIGZvciBzb21lIGtpbmQgb2YgcXVlcnkgb3B0aW1pemF0aW9uIHN1 Y2ggYXMgY29uc3RyYWludCBleGNsdXNpb24uCisgICAgPC9wYXJhPgorICA8 L3JlZnNlY3QxPgogIAogICA8cmVmc2VjdDEgaWQ9IlNRTC1DUkVBVEVGT1JF SUdOVEFCTEUtZXhhbXBsZXMiPgogICAgPHRpdGxlPkV4YW1wbGVzPC90aXRs ZT4KKioqIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvYW5hbHl6ZS5jCi0tLSBi L3NyYy9iYWNrZW5kL2NvbW1hbmRzL2FuYWx5emUuYwoqKioqKioqKioqKioq KioKKioqIDgyLDg3ICoqKiogaW50CQkJZGVmYXVsdF9zdGF0aXN0aWNzX3Rh cmdldCA9IDEwMDsKLS0tIDgyLDg4IC0tLS0KICAKICAvKiBBIGZldyB2YXJp YWJsZXMgdGhhdCBkb24ndCBzZWVtIHdvcnRoIHBhc3NpbmcgYXJvdW5kIGFz IHBhcmFtZXRlcnMgKi8KICBzdGF0aWMgTWVtb3J5Q29udGV4dCBhbmxfY29u dGV4dCA9IE5VTEw7Cisgc3RhdGljIFZhY3V1bU1vZGUgdmFjX21vZGU7CiAg c3RhdGljIEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHZhY19zdHJhdGVneTsKICAK ICAKKioqKioqKioqKioqKioqCioqKiAxMTUsMTIxICoqKiogc3RhdGljIERh dHVtIGluZF9mZXRjaF9mdW5jKFZhY0F0dHJTdGF0c1Agc3RhdHMsIGludCBy b3dudW0sIGJvb2wgKmlzTnVsbCk7CiAgICoJYW5hbHl6ZV9yZWwoKSAtLSBh bmFseXplIG9uZSByZWxhdGlvbgogICAqLwogIHZvaWQKISBhbmFseXplX3Jl bChPaWQgcmVsaWQsIFZhY3V1bVN0bXQgKnZhY3N0bXQsIEJ1ZmZlckFjY2Vz c1N0cmF0ZWd5IGJzdHJhdGVneSkKICB7CiAgCVJlbGF0aW9uCW9uZXJlbDsK ICAJaW50CQkJZWxldmVsOwotLS0gMTE2LDEyNSAtLS0tCiAgICoJYW5hbHl6 ZV9yZWwoKSAtLSBhbmFseXplIG9uZSByZWxhdGlvbgogICAqLwogIHZvaWQK ISBhbmFseXplX3JlbChPaWQgcmVsaWQsCiEgCQkJVmFjdXVtU3RtdCAqdmFj c3RtdCwKISAJCQlWYWN1dW1Nb2RlIHZhY21vZGUsCiEgCQkJQnVmZmVyQWNj ZXNzU3RyYXRlZ3kgYnN0cmF0ZWd5KQogIHsKICAJUmVsYXRpb24Jb25lcmVs OwogIAlpbnQJCQllbGV2ZWw7CioqKioqKioqKioqKioqKgoqKiogMTI5LDEz NCAqKioqIGFuYWx5emVfcmVsKE9pZCByZWxpZCwgVmFjdXVtU3RtdCAqdmFj c3RtdCwgQnVmZmVyQWNjZXNzU3RyYXRlZ3kgYnN0cmF0ZWd5KQotLS0gMTMz LDEzOSAtLS0tCiAgCQllbGV2ZWwgPSBERUJVRzI7CiAgCiAgCS8qIFNldCB1 cCBzdGF0aWMgdmFyaWFibGVzICovCisgCXZhY19tb2RlID0gdmFjbW9kZTsK ICAJdmFjX3N0cmF0ZWd5ID0gYnN0cmF0ZWd5OwogIAogIAkvKgoqKioqKioq KioqKioqKioKKioqIDE0NTIsMTQ1NyAqKioqIGFjcXVpcmVfaW5oZXJpdGVk X3NhbXBsZV9yb3dzKFJlbGF0aW9uIG9uZXJlbCwgaW50IGVsZXZlbCwKLS0t IDE0NTcsMTQ2MyAtLS0tCiAgewogIAlMaXN0CSAgICp0YWJsZU9JRHM7CiAg CVJlbGF0aW9uICAgKnJlbHM7CisgCUFjcXVpcmVTYW1wbGVSb3dzRnVuYyAq YWNxdWlyZWZ1bmM7CiAgCWRvdWJsZQkgICAqcmVsYmxvY2tzOwogIAlkb3Vi bGUJCXRvdGFsYmxvY2tzOwogIAlpbnQJCQludW1yb3dzLAoqKioqKioqKioq KioqKioKKioqIDE0ODYsMTQ5MSAqKioqIGFjcXVpcmVfaW5oZXJpdGVkX3Nh bXBsZV9yb3dzKFJlbGF0aW9uIG9uZXJlbCwgaW50IGVsZXZlbCwKLS0tIDE0 OTIsMTQ5OSAtLS0tCiAgCSAqIEJsb2NrTnVtYmVyLCBzbyB3ZSB1c2UgZG91 YmxlIGFyaXRobWV0aWMuCiAgCSAqLwogIAlyZWxzID0gKFJlbGF0aW9uICop IHBhbGxvYyhsaXN0X2xlbmd0aCh0YWJsZU9JRHMpICogc2l6ZW9mKFJlbGF0 aW9uKSk7CisgCWFjcXVpcmVmdW5jID0gKEFjcXVpcmVTYW1wbGVSb3dzRnVu YyAqKSBwYWxsb2MobGlzdF9sZW5ndGgodGFibGVPSURzKQorIAkJCQkJCQkJ CQkJKiBzaXplb2YoQWNxdWlyZVNhbXBsZVJvd3NGdW5jKSk7CiAgCXJlbGJs b2NrcyA9IChkb3VibGUgKikgcGFsbG9jKGxpc3RfbGVuZ3RoKHRhYmxlT0lE cykgKiBzaXplb2YoZG91YmxlKSk7CiAgCXRvdGFsYmxvY2tzID0gMDsKICAJ bnJlbHMgPSAwOwoqKioqKioqKioqKioqKioKKioqIDE1MDcsMTUxMyAqKioq IGFjcXVpcmVfaW5oZXJpdGVkX3NhbXBsZV9yb3dzKFJlbGF0aW9uIG9uZXJl bCwgaW50IGVsZXZlbCwKICAJCX0KICAKICAJCXJlbHNbbnJlbHNdID0gY2hp bGRyZWw7CiEgCQlyZWxibG9ja3NbbnJlbHNdID0gKGRvdWJsZSkgUmVsYXRp b25HZXROdW1iZXJPZkJsb2NrcyhjaGlsZHJlbCk7CiAgCQl0b3RhbGJsb2Nr cyArPSByZWxibG9ja3NbbnJlbHNdOwogIAkJbnJlbHMrKzsKICAJfQotLS0g MTUxNSwxNTU0IC0tLS0KICAJCX0KICAKICAJCXJlbHNbbnJlbHNdID0gY2hp bGRyZWw7CiEgCiEgCQlpZiAoY2hpbGRyZWwtPnJkX3JlbC0+cmVsa2luZCA9 PSBSRUxLSU5EX0ZPUkVJR05fVEFCTEUpCiEgCQl7CiEgCQkJRmR3Um91dGlu ZSAqZmR3cm91dGluZTsKISAJCQlCbG9ja051bWJlciByZWxwYWdlcyA9IDA7 CiEgCQkJYm9vbAkJb2sgPSBmYWxzZTsKISAKISAJCQkvKiBJZ25vcmUgdW5s ZXNzIGFuYWx5emluZyBhIHNwZWNpZmljIGluaGVyaXRhbmNlIHRyZWUgKi8K ISAJCQlpZiAodmFjX21vZGUgIT0gVkFDX01PREVfU0lOR0xFKQohIAkJCQly ZXR1cm4gMDsKISAKISAJCQkvKiBDaGVjayB3aGV0aGVyIHRoZSBGRFcgc3Vw cG9ydHMgYW5hbHlzaXMgKi8KISAJCQlmZHdyb3V0aW5lID0gR2V0RmR3Um91 dGluZUZvclJlbGF0aW9uKGNoaWxkcmVsLCBmYWxzZSk7CiEgCQkJaWYgKGZk d3JvdXRpbmUtPkFuYWx5emVGb3JlaWduVGFibGUgIT0gTlVMTCkKISAJCQkJ b2sgPSBmZHdyb3V0aW5lLT5BbmFseXplRm9yZWlnblRhYmxlKGNoaWxkcmVs LAohIAkJCQkJCQkJCQkJCQkgJmFjcXVpcmVmdW5jW25yZWxzXSwKISAJCQkJ CQkJCQkJCQkJICZyZWxwYWdlcyk7CiEgCQkJaWYgKCFvaykKISAJCQl7CiEg CQkJCS8qIEdpdmUgdXAgaWYgdGhlIEZEVyBkb2Vzbid0IHN1cHBvcnQgYW5h bHlzaXMgKi8KISAJCQkJZXJlcG9ydChXQVJOSU5HLAohIAkJCQkJCShlcnJt c2coInNraXBwaW5nIGFuYWx5emUgb2YgaW5oZXJpdGFuY2UgdHJlZSBcIiVz XCIgLS0tIGNhbm5vdCBhbmFseXplIGZvcmVpZ24gdGFibGUgXCIlc1wiIiwK ISAJCQkJCQkJCVJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKG9uZXJlbCksCiEg CQkJCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShjaGlsZHJlbCkpKSk7 CiEgCQkJCXJldHVybiAwOwohIAkJCX0KISAJCQlyZWxibG9ja3NbbnJlbHNd ID0gKGRvdWJsZSkgcmVscGFnZXM7CiEgCQl9CiEgCQllbHNlCiEgCQl7CiEg CQkJYWNxdWlyZWZ1bmNbbnJlbHNdID0gYWNxdWlyZV9zYW1wbGVfcm93czsK ISAJCQlyZWxibG9ja3NbbnJlbHNdID0gKGRvdWJsZSkgUmVsYXRpb25HZXRO dW1iZXJPZkJsb2NrcyhjaGlsZHJlbCk7CiEgCQl9CiEgCiAgCQl0b3RhbGJs b2NrcyArPSByZWxibG9ja3NbbnJlbHNdOwogIAkJbnJlbHMrKzsKICAJfQoq KioqKioqKioqKioqKioKKioqIDE1MjUsMTUzMCAqKioqIGFjcXVpcmVfaW5o ZXJpdGVkX3NhbXBsZV9yb3dzKFJlbGF0aW9uIG9uZXJlbCwgaW50IGVsZXZl bCwKLS0tIDE1NjYsMTU3MiAtLS0tCiAgCXsKICAJCVJlbGF0aW9uCWNoaWxk cmVsID0gcmVsc1tpXTsKICAJCWRvdWJsZQkJY2hpbGRibG9ja3MgPSByZWxi bG9ja3NbaV07CisgCQlBY3F1aXJlU2FtcGxlUm93c0Z1bmMgY2hpbGRhY3F1 aXJlZnVuYyA9IGFjcXVpcmVmdW5jW2ldOwogIAogIAkJaWYgKGNoaWxkYmxv Y2tzID4gMCkKICAJCXsKKioqKioqKioqKioqKioqCioqKiAxNTQwLDE1NTEg KioqKiBhY3F1aXJlX2luaGVyaXRlZF9zYW1wbGVfcm93cyhSZWxhdGlvbiBv bmVyZWwsIGludCBlbGV2ZWwsCiAgCQkJCQkJCXRkcm93czsKICAKICAJCQkJ LyogRmV0Y2ggYSByYW5kb20gc2FtcGxlIG9mIHRoZSBjaGlsZCdzIHJvd3Mg Ki8KISAJCQkJY2hpbGRyb3dzID0gYWNxdWlyZV9zYW1wbGVfcm93cyhjaGls ZHJlbCwKISAJCQkJCQkJCQkJCQllbGV2ZWwsCiEgCQkJCQkJCQkJCQkJcm93 cyArIG51bXJvd3MsCiEgCQkJCQkJCQkJCQkJY2hpbGR0YXJncm93cywKISAJ CQkJCQkJCQkJCQkmdHJvd3MsCiEgCQkJCQkJCQkJCQkJJnRkcm93cyk7CiAg CiAgCQkJCS8qIFdlIG1heSBuZWVkIHRvIGNvbnZlcnQgZnJvbSBjaGlsZCdz IHJvd3R5cGUgdG8gcGFyZW50J3MgKi8KICAJCQkJaWYgKGNoaWxkcm93cyA+ IDAgJiYKLS0tIDE1ODIsMTU5MyAtLS0tCiAgCQkJCQkJCXRkcm93czsKICAK ICAJCQkJLyogRmV0Y2ggYSByYW5kb20gc2FtcGxlIG9mIHRoZSBjaGlsZCdz IHJvd3MgKi8KISAJCQkJY2hpbGRyb3dzID0gY2hpbGRhY3F1aXJlZnVuYyhj aGlsZHJlbCwKISAJCQkJCQkJCQkJCSBlbGV2ZWwsCiEgCQkJCQkJCQkJCQkg cm93cyArIG51bXJvd3MsCiEgCQkJCQkJCQkJCQkgY2hpbGR0YXJncm93cywK ISAJCQkJCQkJCQkJCSAmdHJvd3MsCiEgCQkJCQkJCQkJCQkgJnRkcm93cyk7 CiAgCiAgCQkJCS8qIFdlIG1heSBuZWVkIHRvIGNvbnZlcnQgZnJvbSBjaGls ZCdzIHJvd3R5cGUgdG8gcGFyZW50J3MgKi8KICAJCQkJaWYgKGNoaWxkcm93 cyA+IDAgJiYKKioqIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRz LmMKLS0tIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKKioq KioqKioqKioqKioqCioqKiAzMTEsMzE3ICoqKiogc3RhdGljIEFsdGVyZWRU YWJsZUluZm8gKkFUR2V0UXVldWVFbnRyeShMaXN0ICoqd3F1ZXVlLCBSZWxh dGlvbiByZWwpOwogIHN0YXRpYyB2b2lkIEFUU2ltcGxlUGVybWlzc2lvbnMo UmVsYXRpb24gcmVsLCBpbnQgYWxsb3dlZF90YXJnZXRzKTsKICBzdGF0aWMg dm9pZCBBVFdyb25nUmVsa2luZEVycm9yKFJlbGF0aW9uIHJlbCwgaW50IGFs bG93ZWRfdGFyZ2V0cyk7CiAgc3RhdGljIHZvaWQgQVRTaW1wbGVSZWN1cnNp b24oTGlzdCAqKndxdWV1ZSwgUmVsYXRpb24gcmVsLAohIAkJCQkgIEFsdGVy VGFibGVDbWQgKmNtZCwgYm9vbCByZWN1cnNlLCBMT0NLTU9ERSBsb2NrbW9k ZSk7CiAgc3RhdGljIHZvaWQgQVRUeXBlZFRhYmxlUmVjdXJzaW9uKExpc3Qg Kip3cXVldWUsIFJlbGF0aW9uIHJlbCwgQWx0ZXJUYWJsZUNtZCAqY21kLAog IAkJCQkJICBMT0NLTU9ERSBsb2NrbW9kZSk7CiAgc3RhdGljIExpc3QgKmZp bmRfdHlwZWRfdGFibGVfZGVwZW5kZW5jaWVzKE9pZCB0eXBlT2lkLCBjb25z dCBjaGFyICp0eXBlTmFtZSwKLS0tIDMxMSwzMTggLS0tLQogIHN0YXRpYyB2 b2lkIEFUU2ltcGxlUGVybWlzc2lvbnMoUmVsYXRpb24gcmVsLCBpbnQgYWxs b3dlZF90YXJnZXRzKTsKICBzdGF0aWMgdm9pZCBBVFdyb25nUmVsa2luZEVy cm9yKFJlbGF0aW9uIHJlbCwgaW50IGFsbG93ZWRfdGFyZ2V0cyk7CiAgc3Rh dGljIHZvaWQgQVRTaW1wbGVSZWN1cnNpb24oTGlzdCAqKndxdWV1ZSwgUmVs YXRpb24gcmVsLAohIAkJCQkgIEFsdGVyVGFibGVDbWQgKmNtZCwgYm9vbCBy ZWN1cnNlLAohIAkJCQkgIGJvb2wgaW5jbHVkZV9mb3JlaWduLCBMT0NLTU9E RSBsb2NrbW9kZSk7CiAgc3RhdGljIHZvaWQgQVRUeXBlZFRhYmxlUmVjdXJz aW9uKExpc3QgKip3cXVldWUsIFJlbGF0aW9uIHJlbCwgQWx0ZXJUYWJsZUNt ZCAqY21kLAogIAkJCQkJICBMT0NLTU9ERSBsb2NrbW9kZSk7CiAgc3RhdGlj IExpc3QgKmZpbmRfdHlwZWRfdGFibGVfZGVwZW5kZW5jaWVzKE9pZCB0eXBl T2lkLCBjb25zdCBjaGFyICp0eXBlTmFtZSwKKioqKioqKioqKioqKioqCioq KiA0NjcsNDc2ICoqKiogRGVmaW5lUmVsYXRpb24oQ3JlYXRlU3RtdCAqc3Rt dCwgY2hhciByZWxraW5kLCBPaWQgb3duZXJJZCkKICAJCWVyZXBvcnQoRVJS T1IsCiAgCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9UQUJMRV9ERUZJ TklUSU9OKSwKICAJCQkJIGVycm1zZygiT04gQ09NTUlUIGNhbiBvbmx5IGJl IHVzZWQgb24gdGVtcG9yYXJ5IHRhYmxlcyIpKSk7Ci0gCWlmIChzdG10LT5j b25zdHJhaW50cyAhPSBOSUwgJiYgcmVsa2luZCA9PSBSRUxLSU5EX0ZPUkVJ R05fVEFCTEUpCi0gCQllcmVwb3J0KEVSUk9SLAotIAkJCQkoZXJyY29kZShF UlJDT0RFX1dST05HX09CSkVDVF9UWVBFKSwKLSAJCQkJIGVycm1zZygiY29u c3RyYWludHMgYXJlIG5vdCBzdXBwb3J0ZWQgb24gZm9yZWlnbiB0YWJsZXMi KSkpOwogIAogIAkvKgogIAkgKiBMb29rIHVwIHRoZSBuYW1lc3BhY2UgaW4g d2hpY2ggd2UgYXJlIHN1cHBvc2VkIHRvIGNyZWF0ZSB0aGUgcmVsYXRpb24s Ci0tLSA0NjgsNDczIC0tLS0KKioqKioqKioqKioqKioqCioqKiAzMDE5LDMw NDIgKioqKiBBVFByZXBDbWQoTGlzdCAqKndxdWV1ZSwgUmVsYXRpb24gcmVs LCBBbHRlclRhYmxlQ21kICpjbWQsCiAgCQkJICogcnVsZXMuCiAgCQkJICov CiAgCQkJQVRTaW1wbGVQZXJtaXNzaW9ucyhyZWwsIEFUVF9UQUJMRSB8IEFU VF9WSUVXIHwgQVRUX0ZPUkVJR05fVEFCTEUpOwohIAkJCUFUU2ltcGxlUmVj dXJzaW9uKHdxdWV1ZSwgcmVsLCBjbWQsIHJlY3Vyc2UsIGxvY2ttb2RlKTsK ICAJCQkvKiBObyBjb21tYW5kLXNwZWNpZmljIHByZXAgbmVlZGVkICovCiAg CQkJcGFzcyA9IGNtZC0+ZGVmID8gQVRfUEFTU19BRERfQ09OU1RSIDogQVRf UEFTU19EUk9QOwogIAkJCWJyZWFrOwogIAkJY2FzZSBBVF9Ecm9wTm90TnVs bDoJLyogQUxURVIgQ09MVU1OIERST1AgTk9UIE5VTEwgKi8KICAJCQlBVFNp bXBsZVBlcm1pc3Npb25zKHJlbCwgQVRUX1RBQkxFIHwgQVRUX0ZPUkVJR05f VEFCTEUpOwohIAkJCUFUU2ltcGxlUmVjdXJzaW9uKHdxdWV1ZSwgcmVsLCBj bWQsIHJlY3Vyc2UsIGxvY2ttb2RlKTsKICAJCQkvKiBObyBjb21tYW5kLXNw ZWNpZmljIHByZXAgbmVlZGVkICovCiAgCQkJcGFzcyA9IEFUX1BBU1NfRFJP UDsKICAJCQlicmVhazsKICAJCWNhc2UgQVRfU2V0Tm90TnVsbDoJCS8qIEFM VEVSIENPTFVNTiBTRVQgTk9UIE5VTEwgKi8KICAJCQlBVFNpbXBsZVBlcm1p c3Npb25zKHJlbCwgQVRUX1RBQkxFIHwgQVRUX0ZPUkVJR05fVEFCTEUpOwoh IAkJCUFUU2ltcGxlUmVjdXJzaW9uKHdxdWV1ZSwgcmVsLCBjbWQsIHJlY3Vy c2UsIGxvY2ttb2RlKTsKICAJCQkvKiBObyBjb21tYW5kLXNwZWNpZmljIHBy ZXAgbmVlZGVkICovCiAgCQkJcGFzcyA9IEFUX1BBU1NfQUREX0NPTlNUUjsK ICAJCQlicmVhazsKICAJCWNhc2UgQVRfU2V0U3RhdGlzdGljczoJLyogQUxU RVIgQ09MVU1OIFNFVCBTVEFUSVNUSUNTICovCiEgCQkJQVRTaW1wbGVSZWN1 cnNpb24od3F1ZXVlLCByZWwsIGNtZCwgcmVjdXJzZSwgbG9ja21vZGUpOwog IAkJCS8qIFBlcmZvcm1zIG93biBwZXJtaXNzaW9uIGNoZWNrcyAqLwogIAkJ CUFUUHJlcFNldFN0YXRpc3RpY3MocmVsLCBjbWQtPm5hbWUsIGNtZC0+ZGVm LCBsb2NrbW9kZSk7CiAgCQkJcGFzcyA9IEFUX1BBU1NfTUlTQzsKLS0tIDMw MTYsMzA0MyAtLS0tCiAgCQkJICogcnVsZXMuCiAgCQkJICovCiAgCQkJQVRT aW1wbGVQZXJtaXNzaW9ucyhyZWwsIEFUVF9UQUJMRSB8IEFUVF9WSUVXIHwg QVRUX0ZPUkVJR05fVEFCTEUpOwohIAkJCS8qIFJlY3Vyc2UgdG8gY2hpbGQg dGFibGVzIHRoYXQgYXJlIGZvcmVpZ24sIHRvbyAqLwohIAkJCUFUU2ltcGxl UmVjdXJzaW9uKHdxdWV1ZSwgcmVsLCBjbWQsIHJlY3Vyc2UsIHRydWUsIGxv Y2ttb2RlKTsKICAJCQkvKiBObyBjb21tYW5kLXNwZWNpZmljIHByZXAgbmVl ZGVkICovCiAgCQkJcGFzcyA9IGNtZC0+ZGVmID8gQVRfUEFTU19BRERfQ09O U1RSIDogQVRfUEFTU19EUk9QOwogIAkJCWJyZWFrOwogIAkJY2FzZSBBVF9E cm9wTm90TnVsbDoJLyogQUxURVIgQ09MVU1OIERST1AgTk9UIE5VTEwgKi8K ICAJCQlBVFNpbXBsZVBlcm1pc3Npb25zKHJlbCwgQVRUX1RBQkxFIHwgQVRU X0ZPUkVJR05fVEFCTEUpOwohIAkJCS8qIFJlY3Vyc2UgdG8gY2hpbGQgdGFi bGVzIHRoYXQgYXJlIGZvcmVpZ24sIHRvbyAqLwohIAkJCUFUU2ltcGxlUmVj dXJzaW9uKHdxdWV1ZSwgcmVsLCBjbWQsIHJlY3Vyc2UsIHRydWUsIGxvY2tt b2RlKTsKICAJCQkvKiBObyBjb21tYW5kLXNwZWNpZmljIHByZXAgbmVlZGVk ICovCiAgCQkJcGFzcyA9IEFUX1BBU1NfRFJPUDsKICAJCQlicmVhazsKICAJ CWNhc2UgQVRfU2V0Tm90TnVsbDoJCS8qIEFMVEVSIENPTFVNTiBTRVQgTk9U IE5VTEwgKi8KICAJCQlBVFNpbXBsZVBlcm1pc3Npb25zKHJlbCwgQVRUX1RB QkxFIHwgQVRUX0ZPUkVJR05fVEFCTEUpOwohIAkJCS8qIFJlY3Vyc2UgdG8g Y2hpbGQgdGFibGVzIHRoYXQgYXJlIGZvcmVpZ24sIHRvbyAqLwohIAkJCUFU U2ltcGxlUmVjdXJzaW9uKHdxdWV1ZSwgcmVsLCBjbWQsIHJlY3Vyc2UsIHRy dWUsIGxvY2ttb2RlKTsKICAJCQkvKiBObyBjb21tYW5kLXNwZWNpZmljIHBy ZXAgbmVlZGVkICovCiAgCQkJcGFzcyA9IEFUX1BBU1NfQUREX0NPTlNUUjsK ICAJCQlicmVhazsKICAJCWNhc2UgQVRfU2V0U3RhdGlzdGljczoJLyogQUxU RVIgQ09MVU1OIFNFVCBTVEFUSVNUSUNTICovCiEgCQkJLyogUmVjdXJzZSB0 byBjaGlsZCB0YWJsZXMgdGhhdCBhcmUgZm9yZWlnbiwgdG9vICovCiEgCQkJ QVRTaW1wbGVSZWN1cnNpb24od3F1ZXVlLCByZWwsIGNtZCwgcmVjdXJzZSwg dHJ1ZSwgbG9ja21vZGUpOwogIAkJCS8qIFBlcmZvcm1zIG93biBwZXJtaXNz aW9uIGNoZWNrcyAqLwogIAkJCUFUUHJlcFNldFN0YXRpc3RpY3MocmVsLCBj bWQtPm5hbWUsIGNtZC0+ZGVmLCBsb2NrbW9kZSk7CiAgCQkJcGFzcyA9IEFU X1BBU1NfTUlTQzsKKioqKioqKioqKioqKioqCioqKiAzMDQ5LDMwNTUgKioq KiBBVFByZXBDbWQoTGlzdCAqKndxdWV1ZSwgUmVsYXRpb24gcmVsLCBBbHRl clRhYmxlQ21kICpjbWQsCiAgCQkJYnJlYWs7CiAgCQljYXNlIEFUX1NldFN0 b3JhZ2U6CQkvKiBBTFRFUiBDT0xVTU4gU0VUIFNUT1JBR0UgKi8KICAJCQlB VFNpbXBsZVBlcm1pc3Npb25zKHJlbCwgQVRUX1RBQkxFIHwgQVRUX01BVFZJ RVcpOwohIAkJCUFUU2ltcGxlUmVjdXJzaW9uKHdxdWV1ZSwgcmVsLCBjbWQs IHJlY3Vyc2UsIGxvY2ttb2RlKTsKICAJCQkvKiBObyBjb21tYW5kLXNwZWNp ZmljIHByZXAgbmVlZGVkICovCiAgCQkJcGFzcyA9IEFUX1BBU1NfTUlTQzsK ICAJCQlicmVhazsKLS0tIDMwNTAsMzA1NyAtLS0tCiAgCQkJYnJlYWs7CiAg CQljYXNlIEFUX1NldFN0b3JhZ2U6CQkvKiBBTFRFUiBDT0xVTU4gU0VUIFNU T1JBR0UgKi8KICAJCQlBVFNpbXBsZVBlcm1pc3Npb25zKHJlbCwgQVRUX1RB QkxFIHwgQVRUX01BVFZJRVcpOwohIAkJCS8qIERvbid0IHJlY3Vyc2UgdG8g Y2hpbGQgdGFibGVzIHRoYXQgYXJlIGZvcmVpZ24gKi8KISAJCQlBVFNpbXBs ZVJlY3Vyc2lvbih3cXVldWUsIHJlbCwgY21kLCByZWN1cnNlLCBmYWxzZSwg bG9ja21vZGUpOwogIAkJCS8qIE5vIGNvbW1hbmQtc3BlY2lmaWMgcHJlcCBu ZWVkZWQgKi8KICAJCQlwYXNzID0gQVRfUEFTU19NSVNDOwogIAkJCWJyZWFr OwoqKioqKioqKioqKioqKioKKioqIDMwNjcsMzA3MyAqKioqIEFUUHJlcENt ZChMaXN0ICoqd3F1ZXVlLCBSZWxhdGlvbiByZWwsIEFsdGVyVGFibGVDbWQg KmNtZCwKICAJCQlwYXNzID0gQVRfUEFTU19BRERfSU5ERVg7CiAgCQkJYnJl YWs7CiAgCQljYXNlIEFUX0FkZENvbnN0cmFpbnQ6CS8qIEFERCBDT05TVFJB SU5UICovCiEgCQkJQVRTaW1wbGVQZXJtaXNzaW9ucyhyZWwsIEFUVF9UQUJM RSk7CiAgCQkJLyogUmVjdXJzaW9uIG9jY3VycyBkdXJpbmcgZXhlY3V0aW9u IHBoYXNlICovCiAgCQkJLyogTm8gY29tbWFuZC1zcGVjaWZpYyBwcmVwIG5l ZWRlZCBleGNlcHQgc2F2aW5nIHJlY3Vyc2UgZmxhZyAqLwogIAkJCWlmIChy ZWN1cnNlKQotLS0gMzA2OSwzMDc1IC0tLS0KICAJCQlwYXNzID0gQVRfUEFT U19BRERfSU5ERVg7CiAgCQkJYnJlYWs7CiAgCQljYXNlIEFUX0FkZENvbnN0 cmFpbnQ6CS8qIEFERCBDT05TVFJBSU5UICovCiEgCQkJQVRTaW1wbGVQZXJt aXNzaW9ucyhyZWwsIEFUVF9UQUJMRSB8IEFUVF9GT1JFSUdOX1RBQkxFKTsK ICAJCQkvKiBSZWN1cnNpb24gb2NjdXJzIGR1cmluZyBleGVjdXRpb24gcGhh c2UgKi8KICAJCQkvKiBObyBjb21tYW5kLXNwZWNpZmljIHByZXAgbmVlZGVk IGV4Y2VwdCBzYXZpbmcgcmVjdXJzZSBmbGFnICovCiAgCQkJaWYgKHJlY3Vy c2UpCioqKioqKioqKioqKioqKgoqKiogMzA4MSwzMDg3ICoqKiogQVRQcmVw Q21kKExpc3QgKip3cXVldWUsIFJlbGF0aW9uIHJlbCwgQWx0ZXJUYWJsZUNt ZCAqY21kLAogIAkJCXBhc3MgPSBBVF9QQVNTX0FERF9DT05TVFI7CiAgCQkJ YnJlYWs7CiAgCQljYXNlIEFUX0Ryb3BDb25zdHJhaW50OgkvKiBEUk9QIENP TlNUUkFJTlQgKi8KISAJCQlBVFNpbXBsZVBlcm1pc3Npb25zKHJlbCwgQVRU X1RBQkxFKTsKICAJCQkvKiBSZWN1cnNpb24gb2NjdXJzIGR1cmluZyBleGVj dXRpb24gcGhhc2UgKi8KICAJCQkvKiBObyBjb21tYW5kLXNwZWNpZmljIHBy ZXAgbmVlZGVkIGV4Y2VwdCBzYXZpbmcgcmVjdXJzZSBmbGFnICovCiAgCQkJ aWYgKHJlY3Vyc2UpCi0tLSAzMDgzLDMwODkgLS0tLQogIAkJCXBhc3MgPSBB VF9QQVNTX0FERF9DT05TVFI7CiAgCQkJYnJlYWs7CiAgCQljYXNlIEFUX0Ry b3BDb25zdHJhaW50OgkvKiBEUk9QIENPTlNUUkFJTlQgKi8KISAJCQlBVFNp bXBsZVBlcm1pc3Npb25zKHJlbCwgQVRUX1RBQkxFIHwgQVRUX0ZPUkVJR05f VEFCTEUpOwogIAkJCS8qIFJlY3Vyc2lvbiBvY2N1cnMgZHVyaW5nIGV4ZWN1 dGlvbiBwaGFzZSAqLwogIAkJCS8qIE5vIGNvbW1hbmQtc3BlY2lmaWMgcHJl cCBuZWVkZWQgZXhjZXB0IHNhdmluZyByZWN1cnNlIGZsYWcgKi8KICAJCQlp ZiAocmVjdXJzZSkKKioqKioqKioqKioqKioqCioqKiAzMTQ5LDMxNTkgKioq KiBBVFByZXBDbWQoTGlzdCAqKndxdWV1ZSwgUmVsYXRpb24gcmVsLCBBbHRl clRhYmxlQ21kICpjbWQsCiAgCQkJcGFzcyA9IEFUX1BBU1NfTUlTQzsKICAJ CQlicmVhazsKICAJCWNhc2UgQVRfQWRkSW5oZXJpdDoJCS8qIElOSEVSSVQg Ki8KISAJCQlBVFNpbXBsZVBlcm1pc3Npb25zKHJlbCwgQVRUX1RBQkxFKTsK ICAJCQkvKiBUaGlzIGNvbW1hbmQgbmV2ZXIgcmVjdXJzZXMgKi8KICAJCQlB VFByZXBBZGRJbmhlcml0KHJlbCk7CiAgCQkJcGFzcyA9IEFUX1BBU1NfTUlT QzsKICAJCQlicmVhazsKICAJCWNhc2UgQVRfQWx0ZXJDb25zdHJhaW50OgkJ LyogQUxURVIgQ09OU1RSQUlOVCAqLwogIAkJCUFUU2ltcGxlUGVybWlzc2lv bnMocmVsLCBBVFRfVEFCTEUpOwogIAkJCXBhc3MgPSBBVF9QQVNTX01JU0M7 Ci0tLSAzMTUxLDMxNjcgLS0tLQogIAkJCXBhc3MgPSBBVF9QQVNTX01JU0M7 CiAgCQkJYnJlYWs7CiAgCQljYXNlIEFUX0FkZEluaGVyaXQ6CQkvKiBJTkhF UklUICovCiEgCQkJQVRTaW1wbGVQZXJtaXNzaW9ucyhyZWwsIEFUVF9UQUJM RSB8IEFUVF9GT1JFSUdOX1RBQkxFKTsKICAJCQkvKiBUaGlzIGNvbW1hbmQg bmV2ZXIgcmVjdXJzZXMgKi8KICAJCQlBVFByZXBBZGRJbmhlcml0KHJlbCk7 CiAgCQkJcGFzcyA9IEFUX1BBU1NfTUlTQzsKICAJCQlicmVhazsKKyAJCWNh c2UgQVRfRHJvcEluaGVyaXQ6CS8qIE5PIElOSEVSSVQgKi8KKyAJCQlBVFNp bXBsZVBlcm1pc3Npb25zKHJlbCwgQVRUX1RBQkxFIHwgQVRUX0ZPUkVJR05f VEFCTEUpOworIAkJCS8qIFRoaXMgY29tbWFuZCBuZXZlciByZWN1cnNlcyAq LworIAkJCS8qIE5vIGNvbW1hbmQtc3BlY2lmaWMgcHJlcCBuZWVkZWQgKi8K KyAJCQlwYXNzID0gQVRfUEFTU19NSVNDOworIAkJCWJyZWFrOwogIAkJY2Fz ZSBBVF9BbHRlckNvbnN0cmFpbnQ6CQkvKiBBTFRFUiBDT05TVFJBSU5UICov CiAgCQkJQVRTaW1wbGVQZXJtaXNzaW9ucyhyZWwsIEFUVF9UQUJMRSk7CiAg CQkJcGFzcyA9IEFUX1BBU1NfTUlTQzsKKioqKioqKioqKioqKioqCioqKiAz MTg0LDMxOTAgKioqKiBBVFByZXBDbWQoTGlzdCAqKndxdWV1ZSwgUmVsYXRp b24gcmVsLCBBbHRlclRhYmxlQ21kICpjbWQsCiAgCQljYXNlIEFUX0VuYWJs ZUFsd2F5c1J1bGU6CiAgCQljYXNlIEFUX0VuYWJsZVJlcGxpY2FSdWxlOgog IAkJY2FzZSBBVF9EaXNhYmxlUnVsZToKLSAJCWNhc2UgQVRfRHJvcEluaGVy aXQ6CS8qIE5PIElOSEVSSVQgKi8KICAJCWNhc2UgQVRfQWRkT2Y6CQkJLyog T0YgKi8KICAJCWNhc2UgQVRfRHJvcE9mOiAvKiBOT1QgT0YgKi8KICAJCQlB VFNpbXBsZVBlcm1pc3Npb25zKHJlbCwgQVRUX1RBQkxFKTsKLS0tIDMxOTIs MzE5NyAtLS0tCioqKioqKioqKioqKioqKgoqKiogNDEyNSw0MTMxICoqKiog QVRXcm9uZ1JlbGtpbmRFcnJvcihSZWxhdGlvbiByZWwsIGludCBhbGxvd2Vk X3RhcmdldHMpCiAgICovCiAgc3RhdGljIHZvaWQKICBBVFNpbXBsZVJlY3Vy c2lvbihMaXN0ICoqd3F1ZXVlLCBSZWxhdGlvbiByZWwsCiEgCQkJCSAgQWx0 ZXJUYWJsZUNtZCAqY21kLCBib29sIHJlY3Vyc2UsIExPQ0tNT0RFIGxvY2tt b2RlKQogIHsKICAJLyoKICAJICogUHJvcGFnYXRlIHRvIGNoaWxkcmVuIGlm IGRlc2lyZWQuICBOb24tdGFibGUgcmVsYXRpb25zIG5ldmVyIGhhdmUKLS0t IDQxMzIsNDEzOSAtLS0tCiAgICovCiAgc3RhdGljIHZvaWQKICBBVFNpbXBs ZVJlY3Vyc2lvbihMaXN0ICoqd3F1ZXVlLCBSZWxhdGlvbiByZWwsCiEgCQkJ CSAgQWx0ZXJUYWJsZUNtZCAqY21kLCBib29sIHJlY3Vyc2UsCiEgCQkJCSAg Ym9vbCBpbmNsdWRlX2ZvcmVpZ24sIExPQ0tNT0RFIGxvY2ttb2RlKQogIHsK ICAJLyoKICAJICogUHJvcGFnYXRlIHRvIGNoaWxkcmVuIGlmIGRlc2lyZWQu ICBOb24tdGFibGUgcmVsYXRpb25zIG5ldmVyIGhhdmUKKioqKioqKioqKioq KioqCioqKiA0MTUzLDQxNjAgKioqKiBBVFNpbXBsZVJlY3Vyc2lvbihMaXN0 ICoqd3F1ZXVlLCBSZWxhdGlvbiByZWwsCiAgCQkJCWNvbnRpbnVlOwogIAkJ CS8qIGZpbmRfYWxsX2luaGVyaXRvcnMgYWxyZWFkeSBnb3QgbG9jayAqLwog IAkJCWNoaWxkcmVsID0gcmVsYXRpb25fb3BlbihjaGlsZHJlbGlkLCBOb0xv Y2spOwohIAkJCUNoZWNrVGFibGVOb3RJblVzZShjaGlsZHJlbCwgIkFMVEVS IFRBQkxFIik7CiEgCQkJQVRQcmVwQ21kKHdxdWV1ZSwgY2hpbGRyZWwsIGNt ZCwgZmFsc2UsIHRydWUsIGxvY2ttb2RlKTsKICAJCQlyZWxhdGlvbl9jbG9z ZShjaGlsZHJlbCwgTm9Mb2NrKTsKICAJCX0KICAJfQotLS0gNDE2MSw0MTcy IC0tLS0KICAJCQkJY29udGludWU7CiAgCQkJLyogZmluZF9hbGxfaW5oZXJp dG9ycyBhbHJlYWR5IGdvdCBsb2NrICovCiAgCQkJY2hpbGRyZWwgPSByZWxh dGlvbl9vcGVuKGNoaWxkcmVsaWQsIE5vTG9jayk7CiEgCQkJaWYgKGNoaWxk cmVsLT5yZF9yZWwtPnJlbGtpbmQgIT0gUkVMS0lORF9GT1JFSUdOX1RBQkxF CiEgCQkJCXx8IGluY2x1ZGVfZm9yZWlnbikKISAJCQl7CiEgCQkJCUNoZWNr VGFibGVOb3RJblVzZShjaGlsZHJlbCwgIkFMVEVSIFRBQkxFIik7CiEgCQkJ CUFUUHJlcENtZCh3cXVldWUsIGNoaWxkcmVsLCBjbWQsIGZhbHNlLCB0cnVl LCBsb2NrbW9kZSk7CiEgCQkJfQogIAkJCXJlbGF0aW9uX2Nsb3NlKGNoaWxk cmVsLCBOb0xvY2spOwogIAkJfQogIAl9CioqKioqKioqKioqKioqKgoqKiog NDQ0NCw0NDUwICoqKiogQVRFeGVjQWRkQ29sdW1uKExpc3QgKip3cXVldWUs IEFsdGVyZWRUYWJsZUluZm8gKnRhYiwgUmVsYXRpb24gcmVsLAogIAogIAkv KiBBdCB0b3AgbGV2ZWwsIHBlcm1pc3Npb24gY2hlY2sgd2FzIGRvbmUgaW4g QVRQcmVwQ21kLCBlbHNlIGRvIGl0ICovCiAgCWlmIChyZWN1cnNpbmcpCiEg CQlBVFNpbXBsZVBlcm1pc3Npb25zKHJlbCwgQVRUX1RBQkxFKTsKICAKICAJ YXR0cmRlc2MgPSBoZWFwX29wZW4oQXR0cmlidXRlUmVsYXRpb25JZCwgUm93 RXhjbHVzaXZlTG9jayk7CiAgCi0tLSA0NDU2LDQ0NjIgLS0tLQogIAogIAkv KiBBdCB0b3AgbGV2ZWwsIHBlcm1pc3Npb24gY2hlY2sgd2FzIGRvbmUgaW4g QVRQcmVwQ21kLCBlbHNlIGRvIGl0ICovCiAgCWlmIChyZWN1cnNpbmcpCiEg CQlBVFNpbXBsZVBlcm1pc3Npb25zKHJlbCwgQVRUX1RBQkxFIHwgQVRUX0ZP UkVJR05fVEFCTEUpOwogIAogIAlhdHRyZGVzYyA9IGhlYXBfb3BlbihBdHRy aWJ1dGVSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKICAKKioqKioq KioqKioqKioqCioqKiA0NzQwLDQ3NDUgKioqKiBBVEV4ZWNBZGRDb2x1bW4o TGlzdCAqKndxdWV1ZSwgQWx0ZXJlZFRhYmxlSW5mbyAqdGFiLCBSZWxhdGlv biByZWwsCi0tLSA0NzUyLDQ3NjIgLS0tLQogIAogIAkJLyogZmluZF9pbmhl cml0YW5jZV9jaGlsZHJlbiBhbHJlYWR5IGdvdCBsb2NrICovCiAgCQljaGls ZHJlbCA9IGhlYXBfb3BlbihjaGlsZHJlbGlkLCBOb0xvY2spOworIAkJaWYg KGNoaWxkcmVsLT5yZF9yZWwtPnJlbGtpbmQgPT0gUkVMS0lORF9GT1JFSUdO X1RBQkxFICYmIGlzT2lkKQorIAkJCWVyZXBvcnQoRVJST1IsCisgCQkJCQko ZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisgCQkJ CQkgZXJybXNnKCJjYW5ub3QgYWRkIE9JRCBjb2x1bW4gdG8gZm9yZWlnbiB0 YWJsZSBcIiVzXCIiLAorIAkJCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFt ZShjaGlsZHJlbCkpKSk7CiAgCQlDaGVja1RhYmxlTm90SW5Vc2UoY2hpbGRy ZWwsICJBTFRFUiBUQUJMRSIpOwogIAogIAkJLyogRmluZCBvciBjcmVhdGUg d29yayBxdWV1ZSBlbnRyeSBmb3IgdGhpcyB0YWJsZSAqLwoqKioqKioqKioq KioqKioKKioqIDUzNDAsNTM0NiAqKioqIEFURXhlY0Ryb3BDb2x1bW4oTGlz dCAqKndxdWV1ZSwgUmVsYXRpb24gcmVsLCBjb25zdCBjaGFyICpjb2xOYW1l LAogIAogIAkvKiBBdCB0b3AgbGV2ZWwsIHBlcm1pc3Npb24gY2hlY2sgd2Fz IGRvbmUgaW4gQVRQcmVwQ21kLCBlbHNlIGRvIGl0ICovCiAgCWlmIChyZWN1 cnNpbmcpCiEgCQlBVFNpbXBsZVBlcm1pc3Npb25zKHJlbCwgQVRUX1RBQkxF KTsKICAKICAJLyoKICAJICogZ2V0IHRoZSBudW1iZXIgb2YgdGhlIGF0dHJp YnV0ZQotLS0gNTM1Nyw1MzYzIC0tLS0KICAKICAJLyogQXQgdG9wIGxldmVs LCBwZXJtaXNzaW9uIGNoZWNrIHdhcyBkb25lIGluIEFUUHJlcENtZCwgZWxz ZSBkbyBpdCAqLwogIAlpZiAocmVjdXJzaW5nKQohIAkJQVRTaW1wbGVQZXJt aXNzaW9ucyhyZWwsIEFUVF9UQUJMRSB8IEFUVF9GT1JFSUdOX1RBQkxFKTsK ICAKICAJLyoKICAJICogZ2V0IHRoZSBudW1iZXIgb2YgdGhlIGF0dHJpYnV0 ZQoqKioqKioqKioqKioqKioKKioqIDU3MzIsNTczOCAqKioqIEFUQWRkQ2hl Y2tDb25zdHJhaW50KExpc3QgKip3cXVldWUsIEFsdGVyZWRUYWJsZUluZm8g KnRhYiwgUmVsYXRpb24gcmVsLAogIAogIAkvKiBBdCB0b3AgbGV2ZWwsIHBl cm1pc3Npb24gY2hlY2sgd2FzIGRvbmUgaW4gQVRQcmVwQ21kLCBlbHNlIGRv IGl0ICovCiAgCWlmIChyZWN1cnNpbmcpCiEgCQlBVFNpbXBsZVBlcm1pc3Np b25zKHJlbCwgQVRUX1RBQkxFKTsKICAKICAJLyoKICAJICogQ2FsbCBBZGRS ZWxhdGlvbk5ld0NvbnN0cmFpbnRzIHRvIGRvIHRoZSB3b3JrLCBtYWtpbmcg c3VyZSBpdCB3b3JrcyBvbgotLS0gNTc0OSw1NzYyIC0tLS0KICAKICAJLyog QXQgdG9wIGxldmVsLCBwZXJtaXNzaW9uIGNoZWNrIHdhcyBkb25lIGluIEFU UHJlcENtZCwgZWxzZSBkbyBpdCAqLwogIAlpZiAocmVjdXJzaW5nKQohIAkJ QVRTaW1wbGVQZXJtaXNzaW9ucyhyZWwsIEFUVF9UQUJMRSB8IEFUVF9GT1JF SUdOX1RBQkxFKTsKISAKISAJLyogRG9uJ3QgYWxsb3cgQUREIENPTlNUUkFJ TlQgTk9UIFZBTElEIHRvIGJlIGFwcGxpZWQgdG8gZm9yZWlnbiB0YWJsZXMg Ki8KISAJaWYgKHRhYi0+cmVsa2luZCA9PSBSRUxLSU5EX0ZPUkVJR05fVEFC TEUgJiYKISAJCWNvbnN0ci0+c2tpcF92YWxpZGF0aW9uICYmICFyZWN1cnNp bmcpCiEgCQllcmVwb3J0KEVSUk9SLAohIAkJCQkoZXJyY29kZShFUlJDT0RF X0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCiEgCQkJCSBlcnJtc2coIk5PVCBW QUxJRCBpcyBub3Qgc3VwcG9ydGVkIG9uIGZvcmVpZ24gdGFibGVzIikpKTsK ICAKICAJLyoKICAJICogQ2FsbCBBZGRSZWxhdGlvbk5ld0NvbnN0cmFpbnRz IHRvIGRvIHRoZSB3b3JrLCBtYWtpbmcgc3VyZSBpdCB3b3JrcyBvbgoqKioq KioqKioqKioqKioKKioqIDU3NDMsNTc1MSAqKioqIEFUQWRkQ2hlY2tDb25z dHJhaW50KExpc3QgKip3cXVldWUsIEFsdGVyZWRUYWJsZUluZm8gKnRhYiwg UmVsYXRpb24gcmVsLAogIAkgKiBvbWl0dGVkIGZyb20gdGhlIHJldHVybmVk IGxpc3QsIHdoaWNoIGlzIHdoYXQgd2Ugd2FudDogd2UgZG8gbm90IG5lZWQK ICAJICogdG8gZG8gYW55IHZhbGlkYXRpb24gd29yay4gIFRoYXQgY2FuIG9u bHkgaGFwcGVuIGF0IGNoaWxkIHRhYmxlcywKICAJICogdGhvdWdoLCBzaW5j ZSB3ZSBkaXNhbGxvdyBtZXJnaW5nIGF0IHRoZSB0b3AgbGV2ZWwuCiAgCSAq LwogIAluZXdjb25zID0gQWRkUmVsYXRpb25OZXdDb25zdHJhaW50cyhyZWws IE5JTCwKISAJCQkJCQkJCQkJbGlzdF9tYWtlMShjb3B5T2JqZWN0KGNvbnN0 cikpLAogIAkJCQkJCQkJCQlyZWN1cnNpbmcsCQkvKiBhbGxvd19tZXJnZSAq LwogIAkJCQkJCQkJCQkhcmVjdXJzaW5nLAkJLyogaXNfbG9jYWwgKi8KICAJ CQkJCQkJCQkJaXNfcmVhZGQpOwkJLyogaXNfaW50ZXJuYWwgKi8KLS0tIDU3 NjcsNTc4MyAtLS0tCiAgCSAqIG9taXR0ZWQgZnJvbSB0aGUgcmV0dXJuZWQg bGlzdCwgd2hpY2ggaXMgd2hhdCB3ZSB3YW50OiB3ZSBkbyBub3QgbmVlZAog IAkgKiB0byBkbyBhbnkgdmFsaWRhdGlvbiB3b3JrLiAgVGhhdCBjYW4gb25s eSBoYXBwZW4gYXQgY2hpbGQgdGFibGVzLAogIAkgKiB0aG91Z2gsIHNpbmNl IHdlIGRpc2FsbG93IG1lcmdpbmcgYXQgdGhlIHRvcCBsZXZlbC4KKyAJICoK KyAJICogV2hlbiBwcm9wYWdhdGluZyBhIE5PVCBWQUxJRCBvcHRpb24gdG8g Y2hpbGRyZW4gdGhhdCBhcmUgZm9yZWlnbiB0YWJsZXMsCisgCSAqIHdlIHF1 aWV0bHkgaWdub3JlIHRoZSBvcHRpb24uICBOb3RlIHRoYXQgdGhpcyBpcyBz YWZlIGJlY2F1c2UgZm9yZWlnbgorIAkgKiB0YWJsZXMgZG9uJ3QgaGF2ZSBh bnkgY2hpbGRyZW4uCiAgCSAqLworIAljb25zdHIgPSAoQ29uc3RyYWludCAq KSBjb3B5T2JqZWN0KGNvbnN0cik7CisgCWlmICh0YWItPnJlbGtpbmQgPT0g UkVMS0lORF9GT1JFSUdOX1RBQkxFICYmCisgCQljb25zdHItPnNraXBfdmFs aWRhdGlvbiAmJiByZWN1cnNpbmcpCisgCQljb25zdHItPnNraXBfdmFsaWRh dGlvbiA9IGZhbHNlOwogIAluZXdjb25zID0gQWRkUmVsYXRpb25OZXdDb25z dHJhaW50cyhyZWwsIE5JTCwKISAJCQkJCQkJCQkJbGlzdF9tYWtlMShjb25z dHIpLAogIAkJCQkJCQkJCQlyZWN1cnNpbmcsCQkvKiBhbGxvd19tZXJnZSAq LwogIAkJCQkJCQkJCQkhcmVjdXJzaW5nLAkJLyogaXNfbG9jYWwgKi8KICAJ CQkJCQkJCQkJaXNfcmVhZGQpOwkJLyogaXNfaW50ZXJuYWwgKi8KKioqKioq KioqKioqKioqCioqKiA3MjI1LDcyMzEgKioqKiBBVEV4ZWNEcm9wQ29uc3Ry YWludChSZWxhdGlvbiByZWwsIGNvbnN0IGNoYXIgKmNvbnN0ck5hbWUsCiAg CiAgCS8qIEF0IHRvcCBsZXZlbCwgcGVybWlzc2lvbiBjaGVjayB3YXMgZG9u ZSBpbiBBVFByZXBDbWQsIGVsc2UgZG8gaXQgKi8KICAJaWYgKHJlY3Vyc2lu ZykKISAJCUFUU2ltcGxlUGVybWlzc2lvbnMocmVsLCBBVFRfVEFCTEUpOwog IAogIAljb25yZWwgPSBoZWFwX29wZW4oQ29uc3RyYWludFJlbGF0aW9uSWQs IFJvd0V4Y2x1c2l2ZUxvY2spOwogIAotLS0gNzI1Nyw3MjYzIC0tLS0KICAK ICAJLyogQXQgdG9wIGxldmVsLCBwZXJtaXNzaW9uIGNoZWNrIHdhcyBkb25l IGluIEFUUHJlcENtZCwgZWxzZSBkbyBpdCAqLwogIAlpZiAocmVjdXJzaW5n KQohIAkJQVRTaW1wbGVQZXJtaXNzaW9ucyhyZWwsIEFUVF9UQUJMRSB8IEFU VF9GT1JFSUdOX1RBQkxFKTsKICAKICAJY29ucmVsID0gaGVhcF9vcGVuKENv bnN0cmFpbnRSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKICAKKioq KioqKioqKioqKioqCioqKiA3NTYwLDc1NjYgKioqKiBBVFByZXBBbHRlckNv bHVtblR5cGUoTGlzdCAqKndxdWV1ZSwKICAJICogYWx0ZXIgd291bGQgcHV0 IHRoZW0gb3V0IG9mIHN0ZXAuCiAgCSAqLwogIAlpZiAocmVjdXJzZSkKISAJ CUFUU2ltcGxlUmVjdXJzaW9uKHdxdWV1ZSwgcmVsLCBjbWQsIHJlY3Vyc2Us IGxvY2ttb2RlKTsKICAJZWxzZSBpZiAoIXJlY3Vyc2luZyAmJgogIAkJCSBm aW5kX2luaGVyaXRhbmNlX2NoaWxkcmVuKFJlbGF0aW9uR2V0UmVsaWQocmVs KSwgTm9Mb2NrKSAhPSBOSUwpCiAgCQllcmVwb3J0KEVSUk9SLAotLS0gNzU5 Miw3NjAxIC0tLS0KICAJICogYWx0ZXIgd291bGQgcHV0IHRoZW0gb3V0IG9m IHN0ZXAuCiAgCSAqLwogIAlpZiAocmVjdXJzZSkKISAJewohIAkJLyogUmVj dXJzZSB0byBjaGlsZCB0YWJsZXMgdGhhdCBhcmUgZm9yZWlnbiwgdG9vICov CiEgCQlBVFNpbXBsZVJlY3Vyc2lvbih3cXVldWUsIHJlbCwgY21kLCByZWN1 cnNlLCB0cnVlLCBsb2NrbW9kZSk7CiEgCX0KICAJZWxzZSBpZiAoIXJlY3Vy c2luZyAmJgogIAkJCSBmaW5kX2luaGVyaXRhbmNlX2NoaWxkcmVuKFJlbGF0 aW9uR2V0UmVsaWQocmVsKSwgTm9Mb2NrKSAhPSBOSUwpCiAgCQllcmVwb3J0 KEVSUk9SLAoqKiogYS9zcmMvYmFja2VuZC9jb21tYW5kcy92YWN1dW0uYwot LS0gYi9zcmMvYmFja2VuZC9jb21tYW5kcy92YWN1dW0uYwoqKioqKioqKioq KioqKioKKioqIDYxLDY2ICoqKiogaW50CQkJdmFjdXVtX211bHRpeGFjdF9m cmVlemVfdGFibGVfYWdlOwotLS0gNjEsNjcgLS0tLQogIAogIC8qIEEgZmV3 IHZhcmlhYmxlcyB0aGF0IGRvbid0IHNlZW0gd29ydGggcGFzc2luZyBhcm91 bmQgYXMgcGFyYW1ldGVycyAqLwogIHN0YXRpYyBNZW1vcnlDb250ZXh0IHZh Y19jb250ZXh0ID0gTlVMTDsKKyBzdGF0aWMgVmFjdXVtTW9kZSB2YWNfbW9k ZTsKICBzdGF0aWMgQnVmZmVyQWNjZXNzU3RyYXRlZ3kgdmFjX3N0cmF0ZWd5 OwogIAogIAoqKioqKioqKioqKioqKioKKioqIDE0NiwxNTEgKioqKiB2YWN1 dW0oVmFjdXVtU3RtdCAqdmFjc3RtdCwgT2lkIHJlbGlkLCBib29sIGRvX3Rv YXN0LAotLS0gMTQ3LDE2NiAtLS0tCiAgCQkJCQkJCQkJCUFMTE9DU0VUX0RF RkFVTFRfTUFYU0laRSk7CiAgCiAgCS8qCisgCSAqIElkZW50aWZ5IHZhY3V1 bSBtb2RlLiAgSWYgcmVsaWQgaXMgbm90IEludmFsaWRPaWQsIHRoZSBjYWxs ZXIgc2hvdWxkIGJlCisgCSAqIGFuIGF1dG92YWN1dW0gd29ya2VyLiAgU2Vl IHRoZSBhYm92ZSBjb21tZW50cy4KKyAJICovCisgCWlmIChyZWxpZCAhPSBJ bnZhbGlkT2lkKQorIAkJdmFjX21vZGUgPSBWQUNfTU9ERV9BVVRPVkFDVVVN OworIAllbHNlCisgCXsKKyAJCWlmICghdmFjc3RtdC0+cmVsYXRpb24pCisg CQkJdmFjX21vZGUgPSBWQUNfTU9ERV9BTEw7CisgCQllbHNlCisgCQkJdmFj X21vZGUgPSBWQUNfTU9ERV9TSU5HTEU7CisgCX0KKyAKKyAJLyoKICAJICog SWYgY2FsbGVyIGRpZG4ndCBnaXZlIHVzIGEgYnVmZmVyIHN0cmF0ZWd5IG9i amVjdCwgbWFrZSBvbmUgaW4gdGhlCiAgCSAqIGNyb3NzLXRyYW5zYWN0aW9u IG1lbW9yeSBjb250ZXh0LgogIAkgKi8KKioqKioqKioqKioqKioqCioqKiAy NDgsMjU0ICoqKiogdmFjdXVtKFZhY3V1bVN0bXQgKnZhY3N0bXQsIE9pZCBy ZWxpZCwgYm9vbCBkb190b2FzdCwKICAJCQkJCVB1c2hBY3RpdmVTbmFwc2hv dChHZXRUcmFuc2FjdGlvblNuYXBzaG90KCkpOwogIAkJCQl9CiAgCiEgCQkJ CWFuYWx5emVfcmVsKHJlbGlkLCB2YWNzdG10LCB2YWNfc3RyYXRlZ3kpOwog IAogIAkJCQlpZiAodXNlX293bl94YWN0cykKICAJCQkJewotLS0gMjYzLDI2 OSAtLS0tCiAgCQkJCQlQdXNoQWN0aXZlU25hcHNob3QoR2V0VHJhbnNhY3Rp b25TbmFwc2hvdCgpKTsKICAJCQkJfQogIAohIAkJCQlhbmFseXplX3JlbChy ZWxpZCwgdmFjc3RtdCwgdmFjX21vZGUsIHZhY19zdHJhdGVneSk7CiAgCiAg CQkJCWlmICh1c2Vfb3duX3hhY3RzKQogIAkJCQl7CioqKiBhL3NyYy9iYWNr ZW5kL29wdGltaXplci9wcmVwL3ByZXB1bmlvbi5jCi0tLSBiL3NyYy9iYWNr ZW5kL29wdGltaXplci9wcmVwL3ByZXB1bmlvbi5jCioqKioqKioqKioqKioq KgoqKiogMTMzNywxMzQ3ICoqKiogZXhwYW5kX2luaGVyaXRlZF9ydGVudHJ5 KFBsYW5uZXJJbmZvICpyb290LCBSYW5nZVRibEVudHJ5ICpydGUsIEluZGV4 IHJ0aSkKICAJCS8qCiAgCQkgKiBCdWlsZCBhbiBSVEUgZm9yIHRoZSBjaGls ZCwgYW5kIGF0dGFjaCB0byBxdWVyeSdzIHJhbmdldGFibGUgbGlzdC4KICAJ CSAqIFdlIGNvcHkgbW9zdCBmaWVsZHMgb2YgdGhlIHBhcmVudCdzIFJURSwg YnV0IHJlcGxhY2UgcmVsYXRpb24gT0lELAohIAkJICogYW5kIHNldCBpbmgg PSBmYWxzZS4gIEFsc28sIHNldCByZXF1aXJlZFBlcm1zIHRvIHplcm8gc2lu Y2UgYWxsCiEgCQkgKiByZXF1aXJlZCBwZXJtaXNzaW9ucyBjaGVja3MgYXJl IGRvbmUgb24gdGhlIG9yaWdpbmFsIFJURS4KICAJCSAqLwogIAkJY2hpbGRy dGUgPSBjb3B5T2JqZWN0KHJ0ZSk7CiAgCQljaGlsZHJ0ZS0+cmVsaWQgPSBj aGlsZE9JRDsKICAJCWNoaWxkcnRlLT5pbmggPSBmYWxzZTsKICAJCWNoaWxk cnRlLT5yZXF1aXJlZFBlcm1zID0gMDsKICAJCXBhcnNlLT5ydGFibGUgPSBs YXBwZW5kKHBhcnNlLT5ydGFibGUsIGNoaWxkcnRlKTsKLS0tIDEzMzcsMTM0 OCAtLS0tCiAgCQkvKgogIAkJICogQnVpbGQgYW4gUlRFIGZvciB0aGUgY2hp bGQsIGFuZCBhdHRhY2ggdG8gcXVlcnkncyByYW5nZXRhYmxlIGxpc3QuCiAg CQkgKiBXZSBjb3B5IG1vc3QgZmllbGRzIG9mIHRoZSBwYXJlbnQncyBSVEUs IGJ1dCByZXBsYWNlIHJlbGF0aW9uIE9JRCwKISAJCSAqIHJlbGtpbmQgYW5k IHNldCBpbmggPSBmYWxzZS4gIEFsc28sIHNldCByZXF1aXJlZFBlcm1zIHRv IHplcm8gc2luY2UKISAJCSAqIGFsbCByZXF1aXJlZCBwZXJtaXNzaW9ucyBj aGVja3MgYXJlIGRvbmUgb24gdGhlIG9yaWdpbmFsIFJURS4KICAJCSAqLwog IAkJY2hpbGRydGUgPSBjb3B5T2JqZWN0KHJ0ZSk7CiAgCQljaGlsZHJ0ZS0+ cmVsaWQgPSBjaGlsZE9JRDsKKyAJCWNoaWxkcnRlLT5yZWxraW5kID0gbmV3 cmVsYXRpb24tPnJkX3JlbC0+cmVsa2luZDsKICAJCWNoaWxkcnRlLT5pbmgg PSBmYWxzZTsKICAJCWNoaWxkcnRlLT5yZXF1aXJlZFBlcm1zID0gMDsKICAJ CXBhcnNlLT5ydGFibGUgPSBsYXBwZW5kKHBhcnNlLT5ydGFibGUsIGNoaWxk cnRlKTsKKioqIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGF0aG5v ZGUuYwotLS0gYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRobm9k ZS5jCioqKioqKioqKioqKioqKgoqKiogMTYsMjEgKioqKgotLS0gMTYsMjIg LS0tLQogIAogICNpbmNsdWRlIDxtYXRoLmg+CiAgCisgI2luY2x1ZGUgImZv cmVpZ24vZmR3YXBpLmgiCiAgI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogICNp bmNsdWRlICJub2Rlcy9ub2RlRnVuY3MuaCIKICAjaW5jbHVkZSAib3B0aW1p emVyL2NsYXVzZXMuaCIKKioqKioqKioqKioqKioqCioqKiAyMDYyLDIwNjcg KioqKiByZXBhcmFtZXRlcml6ZV9wYXRoKFBsYW5uZXJJbmZvICpyb290LCBQ YXRoICpwYXRoLAotLS0gMjA2MywyMDkzIC0tLS0KICAJCWNhc2UgVF9TdWJx dWVyeVNjYW46CiAgCQkJcmV0dXJuIGNyZWF0ZV9zdWJxdWVyeXNjYW5fcGF0 aChyb290LCByZWwsIHBhdGgtPnBhdGhrZXlzLAogIAkJCQkJCQkJCQkJcmVx dWlyZWRfb3V0ZXIpOworIAkJY2FzZSBUX0ZvcmVpZ25TY2FuOgorIAkJCXsK KyAJCQkJRm9yZWlnblBhdGggKm5ld3BhdGggPSBOVUxMOworIAorIAkJCQkv KiBMZXQgdGhlIEZEVyByZXBhcmFtZXRlcml6ZSB0aGUgcGF0aCBub2RlIGlm IHBvc3NpYmxlICovCisgCQkJCWlmIChyZWwtPmZkd3JvdXRpbmUtPlJlcGFy YW1ldGVyaXplRm9yZWlnblBhdGggIT0gTlVMTCkKKyAJCQkJeworIAkJCQkJ SW5kZXgJCXNjYW5fcmVsaWQgPSByZWwtPnJlbGlkOworIAkJCQkJUmFuZ2VU YmxFbnRyeSAqcnRlOworIAorIAkJCQkJLyogaXQgc2hvdWxkIGJlIGEgYmFz ZSByZWwuLi4gKi8KKyAJCQkJCUFzc2VydChzY2FuX3JlbGlkID4gMCk7Cisg CQkJCQlBc3NlcnQocmVsLT5ydGVraW5kID09IFJURV9SRUxBVElPTik7Cisg CQkJCQlydGUgPSBwbGFubmVyX3J0X2ZldGNoKHNjYW5fcmVsaWQsIHJvb3Qp OworIAkJCQkJQXNzZXJ0KHJ0ZS0+cnRla2luZCA9PSBSVEVfUkVMQVRJT04p OworIAorIAkJCQkJbmV3cGF0aCA9CisgCQkJCQkJcmVsLT5mZHdyb3V0aW5l LT5SZXBhcmFtZXRlcml6ZUZvcmVpZ25QYXRoKHJvb3QsCisgCQkJCQkJCQkJ CQkJCQkJCSAgIHJlbCwKKyAJCQkJCQkJCQkJCQkJCQkJICAgcnRlLT5yZWxp ZCwKKyAJCQkJCQkJCQkJCQkJCSAgKEZvcmVpZ25QYXRoICopIHBhdGgsCisg CQkJCQkJCQkJCQkJCQkJICAgcmVxdWlyZWRfb3V0ZXIpOworIAkJCQl9Cisg CQkJCXJldHVybiAoUGF0aCAqKSBuZXdwYXRoOworIAkJCX0KICAJCWRlZmF1 bHQ6CiAgCQkJYnJlYWs7CiAgCX0KKioqIGEvc3JjL2JhY2tlbmQvcGFyc2Vy L2dyYW0ueQotLS0gYi9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55CioqKioq KioqKioqKioqKgoqKiogNDIwOSw0MjQwICoqKiogQWx0ZXJGb3JlaWduU2Vy dmVyU3RtdDogQUxURVIgU0VSVkVSIG5hbWUgZm9yZWlnbl9zZXJ2ZXJfdmVy c2lvbiBhbHRlcl9nZW5lcmljX28KICBDcmVhdGVGb3JlaWduVGFibGVTdG10 OgogIAkJQ1JFQVRFIEZPUkVJR04gVEFCTEUgcXVhbGlmaWVkX25hbWUKICAJ CQknKCcgT3B0VGFibGVFbGVtZW50TGlzdCAnKScKISAJCQlTRVJWRVIgbmFt ZSBjcmVhdGVfZ2VuZXJpY19vcHRpb25zCiAgCQkJCXsKICAJCQkJCUNyZWF0 ZUZvcmVpZ25UYWJsZVN0bXQgKm4gPSBtYWtlTm9kZShDcmVhdGVGb3JlaWdu VGFibGVTdG10KTsKICAJCQkJCSQ0LT5yZWxwZXJzaXN0ZW5jZSA9IFJFTFBF UlNJU1RFTkNFX1BFUk1BTkVOVDsKICAJCQkJCW4tPmJhc2UucmVsYXRpb24g PSAkNDsKICAJCQkJCW4tPmJhc2UudGFibGVFbHRzID0gJDY7CiEgCQkJCQlu LT5iYXNlLmluaFJlbGF0aW9ucyA9IE5JTDsKICAJCQkJCW4tPmJhc2UuaWZf bm90X2V4aXN0cyA9IGZhbHNlOwogIAkJCQkJLyogRkRXLXNwZWNpZmljIGRh dGEgKi8KISAJCQkJCW4tPnNlcnZlcm5hbWUgPSAkOTsKISAJCQkJCW4tPm9w dGlvbnMgPSAkMTA7CiAgCQkJCQkkJCA9IChOb2RlICopIG47CiAgCQkJCX0K ICAJCXwgQ1JFQVRFIEZPUkVJR04gVEFCTEUgSUZfUCBOT1QgRVhJU1RTIHF1 YWxpZmllZF9uYW1lCiAgCQkJJygnIE9wdFRhYmxlRWxlbWVudExpc3QgJykn CiEgCQkJU0VSVkVSIG5hbWUgY3JlYXRlX2dlbmVyaWNfb3B0aW9ucwogIAkJ CQl7CiAgCQkJCQlDcmVhdGVGb3JlaWduVGFibGVTdG10ICpuID0gbWFrZU5v ZGUoQ3JlYXRlRm9yZWlnblRhYmxlU3RtdCk7CiAgCQkJCQkkNy0+cmVscGVy c2lzdGVuY2UgPSBSRUxQRVJTSVNURU5DRV9QRVJNQU5FTlQ7CiAgCQkJCQlu LT5iYXNlLnJlbGF0aW9uID0gJDc7CiAgCQkJCQluLT5iYXNlLnRhYmxlRWx0 cyA9ICQ5OwohIAkJCQkJbi0+YmFzZS5pbmhSZWxhdGlvbnMgPSBOSUw7CiAg CQkJCQluLT5iYXNlLmlmX25vdF9leGlzdHMgPSB0cnVlOwogIAkJCQkJLyog RkRXLXNwZWNpZmljIGRhdGEgKi8KISAJCQkJCW4tPnNlcnZlcm5hbWUgPSAk MTI7CiEgCQkJCQluLT5vcHRpb25zID0gJDEzOwogIAkJCQkJJCQgPSAoTm9k ZSAqKSBuOwogIAkJCQl9CiAgCQk7Ci0tLSA0MjA5LDQyNDAgLS0tLQogIENy ZWF0ZUZvcmVpZ25UYWJsZVN0bXQ6CiAgCQlDUkVBVEUgRk9SRUlHTiBUQUJM RSBxdWFsaWZpZWRfbmFtZQogIAkJCScoJyBPcHRUYWJsZUVsZW1lbnRMaXN0 ICcpJwohIAkJCU9wdEluaGVyaXQgU0VSVkVSIG5hbWUgY3JlYXRlX2dlbmVy aWNfb3B0aW9ucwogIAkJCQl7CiAgCQkJCQlDcmVhdGVGb3JlaWduVGFibGVT dG10ICpuID0gbWFrZU5vZGUoQ3JlYXRlRm9yZWlnblRhYmxlU3RtdCk7CiAg CQkJCQkkNC0+cmVscGVyc2lzdGVuY2UgPSBSRUxQRVJTSVNURU5DRV9QRVJN QU5FTlQ7CiAgCQkJCQluLT5iYXNlLnJlbGF0aW9uID0gJDQ7CiAgCQkJCQlu LT5iYXNlLnRhYmxlRWx0cyA9ICQ2OwohIAkJCQkJbi0+YmFzZS5pbmhSZWxh dGlvbnMgPSAkODsKICAJCQkJCW4tPmJhc2UuaWZfbm90X2V4aXN0cyA9IGZh bHNlOwogIAkJCQkJLyogRkRXLXNwZWNpZmljIGRhdGEgKi8KISAJCQkJCW4t PnNlcnZlcm5hbWUgPSAkMTA7CiEgCQkJCQluLT5vcHRpb25zID0gJDExOwog IAkJCQkJJCQgPSAoTm9kZSAqKSBuOwogIAkJCQl9CiAgCQl8IENSRUFURSBG T1JFSUdOIFRBQkxFIElGX1AgTk9UIEVYSVNUUyBxdWFsaWZpZWRfbmFtZQog IAkJCScoJyBPcHRUYWJsZUVsZW1lbnRMaXN0ICcpJwohIAkJCU9wdEluaGVy aXQgU0VSVkVSIG5hbWUgY3JlYXRlX2dlbmVyaWNfb3B0aW9ucwogIAkJCQl7 CiAgCQkJCQlDcmVhdGVGb3JlaWduVGFibGVTdG10ICpuID0gbWFrZU5vZGUo Q3JlYXRlRm9yZWlnblRhYmxlU3RtdCk7CiAgCQkJCQkkNy0+cmVscGVyc2lz dGVuY2UgPSBSRUxQRVJTSVNURU5DRV9QRVJNQU5FTlQ7CiAgCQkJCQluLT5i YXNlLnJlbGF0aW9uID0gJDc7CiAgCQkJCQluLT5iYXNlLnRhYmxlRWx0cyA9 ICQ5OwohIAkJCQkJbi0+YmFzZS5pbmhSZWxhdGlvbnMgPSAkMTE7CiAgCQkJ CQluLT5iYXNlLmlmX25vdF9leGlzdHMgPSB0cnVlOwogIAkJCQkJLyogRkRX LXNwZWNpZmljIGRhdGEgKi8KISAJCQkJCW4tPnNlcnZlcm5hbWUgPSAkMTM7 CiEgCQkJCQluLT5vcHRpb25zID0gJDE0OwogIAkJCQkJJCQgPSAoTm9kZSAq KSBuOwogIAkJCQl9CiAgCQk7CioqKiBhL3NyYy9iYWNrZW5kL3BhcnNlci9w YXJzZV91dGlsY21kLmMKLS0tIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNl X3V0aWxjbWQuYwoqKioqKioqKioqKioqKioKKioqIDUxNSw1MjYgKioqKiB0 cmFuc2Zvcm1Db2x1bW5EZWZpbml0aW9uKENyZWF0ZVN0bXRDb250ZXh0ICpj eHQsIENvbHVtbkRlZiAqY29sdW1uKQogIAkJCQlicmVhazsKICAKICAJCQlj YXNlIENPTlNUUl9DSEVDSzoKLSAJCQkJaWYgKGN4dC0+aXNmb3JlaWduKQot IAkJCQkJZXJlcG9ydChFUlJPUiwKLSAJCQkJCQkJKGVycmNvZGUoRVJSQ09E RV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAotIAkJCQkJZXJybXNnKCJjb25z dHJhaW50cyBhcmUgbm90IHN1cHBvcnRlZCBvbiBmb3JlaWduIHRhYmxlcyIp LAotIAkJCQkJCQkgcGFyc2VyX2VycnBvc2l0aW9uKGN4dC0+cHN0YXRlLAot IAkJCQkJCQkJCQkJCWNvbnN0cmFpbnQtPmxvY2F0aW9uKSkpOwogIAkJCQlj eHQtPmNrY29uc3RyYWludHMgPSBsYXBwZW5kKGN4dC0+Y2tjb25zdHJhaW50 cywgY29uc3RyYWludCk7CiAgCQkJCWJyZWFrOwogIAotLS0gNTE1LDUyMCAt LS0tCioqKioqKioqKioqKioqKgoqKiogNTI5LDUzNSAqKioqIHRyYW5zZm9y bUNvbHVtbkRlZmluaXRpb24oQ3JlYXRlU3RtdENvbnRleHQgKmN4dCwgQ29s dW1uRGVmICpjb2x1bW4pCiAgCQkJCWlmIChjeHQtPmlzZm9yZWlnbikKICAJ CQkJCWVyZXBvcnQoRVJST1IsCiAgCQkJCQkJCShlcnJjb2RlKEVSUkNPREVf RkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKISAJCQkJCWVycm1zZygiY29uc3Ry YWludHMgYXJlIG5vdCBzdXBwb3J0ZWQgb24gZm9yZWlnbiB0YWJsZXMiKSwK ICAJCQkJCQkJIHBhcnNlcl9lcnJwb3NpdGlvbihjeHQtPnBzdGF0ZSwKICAJ CQkJCQkJCQkJCQljb25zdHJhaW50LT5sb2NhdGlvbikpKTsKICAJCQkJaWYg KGNvbnN0cmFpbnQtPmtleXMgPT0gTklMKQotLS0gNTIzLDUyOSAtLS0tCiAg CQkJCWlmIChjeHQtPmlzZm9yZWlnbikKICAJCQkJCWVyZXBvcnQoRVJST1Is CiAgCQkJCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9S VEVEKSwKISAJCQkJCWVycm1zZygicHJpbWFyeSBrZXkgb3IgdW5pcXVlIGNv bnN0cmFpbnRzIGFyZSBub3Qgc3VwcG9ydGVkIG9uIGZvcmVpZ24gdGFibGVz IiksCiAgCQkJCQkJCSBwYXJzZXJfZXJycG9zaXRpb24oY3h0LT5wc3RhdGUs CiAgCQkJCQkJCQkJCQkJY29uc3RyYWludC0+bG9jYXRpb24pKSk7CiAgCQkJ CWlmIChjb25zdHJhaW50LT5rZXlzID09IE5JTCkKKioqKioqKioqKioqKioq CioqKiA1NDYsNTUyICoqKiogdHJhbnNmb3JtQ29sdW1uRGVmaW5pdGlvbihD cmVhdGVTdG10Q29udGV4dCAqY3h0LCBDb2x1bW5EZWYgKmNvbHVtbikKICAJ CQkJaWYgKGN4dC0+aXNmb3JlaWduKQogIAkJCQkJZXJlcG9ydChFUlJPUiwK ICAJCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JU RUQpLAohIAkJCQkJZXJybXNnKCJjb25zdHJhaW50cyBhcmUgbm90IHN1cHBv cnRlZCBvbiBmb3JlaWduIHRhYmxlcyIpLAogIAkJCQkJCQkgcGFyc2VyX2Vy cnBvc2l0aW9uKGN4dC0+cHN0YXRlLAogIAkJCQkJCQkJCQkJCWNvbnN0cmFp bnQtPmxvY2F0aW9uKSkpOwogIAotLS0gNTQwLDU0NiAtLS0tCiAgCQkJCWlm IChjeHQtPmlzZm9yZWlnbikKICAJCQkJCWVyZXBvcnQoRVJST1IsCiAgCQkJ CQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwK ISAJCQkJCWVycm1zZygiZm9yZWlnbiBrZXkgY29uc3RyYWludHMgYXJlIG5v dCBzdXBwb3J0ZWQgb24gZm9yZWlnbiB0YWJsZXMiKSwKICAJCQkJCQkJIHBh cnNlcl9lcnJwb3NpdGlvbihjeHQtPnBzdGF0ZSwKICAJCQkJCQkJCQkJCQlj b25zdHJhaW50LT5sb2NhdGlvbikpKTsKICAKKioqKioqKioqKioqKioqCioq KiA2MDUsNjE0ICoqKiogdHJhbnNmb3JtQ29sdW1uRGVmaW5pdGlvbihDcmVh dGVTdG10Q29udGV4dCAqY3h0LCBDb2x1bW5EZWYgKmNvbHVtbikKICBzdGF0 aWMgdm9pZAogIHRyYW5zZm9ybVRhYmxlQ29uc3RyYWludChDcmVhdGVTdG10 Q29udGV4dCAqY3h0LCBDb25zdHJhaW50ICpjb25zdHJhaW50KQogIHsKISAJ aWYgKGN4dC0+aXNmb3JlaWduKQogIAkJZXJlcG9ydChFUlJPUiwKICAJCQkJ KGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAohIAkJ CQkgZXJybXNnKCJjb25zdHJhaW50cyBhcmUgbm90IHN1cHBvcnRlZCBvbiBm b3JlaWduIHRhYmxlcyIpLAogIAkJCQkgcGFyc2VyX2VycnBvc2l0aW9uKGN4 dC0+cHN0YXRlLAogIAkJCQkJCQkJCWNvbnN0cmFpbnQtPmxvY2F0aW9uKSkp OwogIAotLS0gNTk5LDYxMiAtLS0tCiAgc3RhdGljIHZvaWQKICB0cmFuc2Zv cm1UYWJsZUNvbnN0cmFpbnQoQ3JlYXRlU3RtdENvbnRleHQgKmN4dCwgQ29u c3RyYWludCAqY29uc3RyYWludCkKICB7CiEgCWlmIChjeHQtPmlzZm9yZWln biAmJgohIAkJKGNvbnN0cmFpbnQtPmNvbnR5cGUgPT0gQ09OU1RSX1BSSU1B UlkgfHwKISAJCSBjb25zdHJhaW50LT5jb250eXBlID09IENPTlNUUl9VTklR VUUgfHwKISAJCSBjb25zdHJhaW50LT5jb250eXBlID09IENPTlNUUl9FWENM VVNJT04gfHwKISAJCSBjb25zdHJhaW50LT5jb250eXBlID09IENPTlNUUl9G T1JFSUdOKSkKICAJCWVyZXBvcnQoRVJST1IsCiAgCQkJCShlcnJjb2RlKEVS UkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKISAJCQkJIGVycm1zZygi cHJpbWFyeSBrZXksIHVuaXF1ZSwgZXhjbHVzaW9uLCBvciBmb3JlaWduIGtl eSBjb25zdHJhaW50cyBhcmUgbm90IHN1cHBvcnRlZCBvbiBmb3JlaWduIHRh YmxlcyIpLAogIAkJCQkgcGFyc2VyX2VycnBvc2l0aW9uKGN4dC0+cHN0YXRl LAogIAkJCQkJCQkJCWNvbnN0cmFpbnQtPmxvY2F0aW9uKSkpOwogIAoqKiog YS9zcmMvaW5jbHVkZS9jb21tYW5kcy92YWN1dW0uaAotLS0gYi9zcmMvaW5j bHVkZS9jb21tYW5kcy92YWN1dW0uaAoqKioqKioqKioqKioqKioKKioqIDE0 MCwxNDUgKioqKiBleHRlcm4gaW50CXZhY3V1bV9tdWx0aXhhY3RfZnJlZXpl X21pbl9hZ2U7Ci0tLSAxNDAsMTU0IC0tLS0KICBleHRlcm4gaW50CXZhY3V1 bV9tdWx0aXhhY3RfZnJlZXplX3RhYmxlX2FnZTsKICAKICAKKyAvKiBQb3Nz aWJsZSBtb2RlcyBmb3IgdmFjdXVtKCkgKi8KKyB0eXBlZGVmIGVudW0KKyB7 CisgCVZBQ19NT0RFX0FMTCwJCQkJLyogVmFjdXVtL2FuYWx5emUgYWxsIHJl bGF0aW9ucyAqLworIAlWQUNfTU9ERV9TSU5HTEUsCQkJLyogVmFjdXVtL2Fu YWx5emUgYSBzcGVjaWZpYyByZWxhdGlvbiAqLworIAlWQUNfTU9ERV9BVVRP VkFDVVVNCQkJLyogQXV0b3ZhY3V1bSB3b3JrZXIgKi8KKyB9IFZhY3V1bU1v ZGU7CisgCisgCiAgLyogaW4gY29tbWFuZHMvdmFjdXVtLmMgKi8KICBleHRl cm4gdm9pZCB2YWN1dW0oVmFjdXVtU3RtdCAqdmFjc3RtdCwgT2lkIHJlbGlk LCBib29sIGRvX3RvYXN0LAogIAkgICBCdWZmZXJBY2Nlc3NTdHJhdGVneSBi c3RyYXRlZ3ksIGJvb2wgZm9yX3dyYXBhcm91bmQsIGJvb2wgaXNUb3BMZXZl bCk7CioqKioqKioqKioqKioqKgoqKiogMTc0LDE4MCAqKioqIGV4dGVybiB2 b2lkIGxhenlfdmFjdXVtX3JlbChSZWxhdGlvbiBvbmVyZWwsIFZhY3V1bVN0 bXQgKnZhY3N0bXQsCiAgCQkJCUJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IGJzdHJh dGVneSk7CiAgCiAgLyogaW4gY29tbWFuZHMvYW5hbHl6ZS5jICovCiEgZXh0 ZXJuIHZvaWQgYW5hbHl6ZV9yZWwoT2lkIHJlbGlkLCBWYWN1dW1TdG10ICp2 YWNzdG10LAogIAkJCUJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IGJzdHJhdGVneSk7 CiAgZXh0ZXJuIGJvb2wgc3RkX3R5cGFuYWx5emUoVmFjQXR0clN0YXRzICpz dGF0cyk7CiAgZXh0ZXJuIGRvdWJsZSBhbmxfcmFuZG9tX2ZyYWN0KHZvaWQp OwotLS0gMTgzLDE5MSAtLS0tCiAgCQkJCUJ1ZmZlckFjY2Vzc1N0cmF0ZWd5 IGJzdHJhdGVneSk7CiAgCiAgLyogaW4gY29tbWFuZHMvYW5hbHl6ZS5jICov CiEgZXh0ZXJuIHZvaWQgYW5hbHl6ZV9yZWwoT2lkIHJlbGlkLAohIAkJCVZh Y3V1bVN0bXQgKnZhY3N0bXQsCiEgCQkJVmFjdXVtTW9kZSB2YWNtb2RlLAog IAkJCUJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IGJzdHJhdGVneSk7CiAgZXh0ZXJu IGJvb2wgc3RkX3R5cGFuYWx5emUoVmFjQXR0clN0YXRzICpzdGF0cyk7CiAg ZXh0ZXJuIGRvdWJsZSBhbmxfcmFuZG9tX2ZyYWN0KHZvaWQpOwoqKiogYS9z cmMvaW5jbHVkZS9mb3JlaWduL2Zkd2FwaS5oCi0tLSBiL3NyYy9pbmNsdWRl L2ZvcmVpZ24vZmR3YXBpLmgKKioqKioqKioqKioqKioqCioqKiAzMSwzNiAq KioqIHR5cGVkZWYgdm9pZCAoKkdldEZvcmVpZ25QYXRoc19mdW5jdGlvbikg KFBsYW5uZXJJbmZvICpyb290LAotLS0gMzEsNDIgLS0tLQogIAkJCQkJCQkJ CQkJCQkgIFJlbE9wdEluZm8gKmJhc2VyZWwsCiAgCQkJCQkJCQkJCQkJCSAg T2lkIGZvcmVpZ250YWJsZWlkKTsKICAKKyB0eXBlZGVmIEZvcmVpZ25QYXRo ICooKlJlcGFyYW1ldGVyaXplRm9yZWlnblBhdGhfZnVuY3Rpb24pIChQbGFu bmVySW5mbyAqcm9vdCwKKyAJCQkJCQkJCQkJCQkJCSBSZWxPcHRJbmZvICpi YXNlcmVsLAorIAkJCQkJCQkJCQkJCQkJICBPaWQgZm9yZWlnbnRhYmxlaWQs CisgCQkJCQkJCQkJCQkJCQkJRm9yZWlnblBhdGggKnBhdGgsCisgCQkJCQkJ CQkJCQkJCSAgUmVsaWRzIHJlcXVpcmVkX291dGVyKTsKKyAKICB0eXBlZGVm IEZvcmVpZ25TY2FuICooKkdldEZvcmVpZ25QbGFuX2Z1bmN0aW9uKSAoUGxh bm5lckluZm8gKnJvb3QsCiAgCQkJCQkJCQkJCQkJCQkgUmVsT3B0SW5mbyAq YmFzZXJlbCwKICAJCQkJCQkJCQkJCQkJCSAgT2lkIGZvcmVpZ250YWJsZWlk LAoqKioqKioqKioqKioqKioKKioqIDExNywxMjIgKioqKiB0eXBlZGVmIHN0 cnVjdCBGZHdSb3V0aW5lCi0tLSAxMjMsMTI5IC0tLS0KICAJLyogRnVuY3Rp b25zIGZvciBzY2FubmluZyBmb3JlaWduIHRhYmxlcyAqLwogIAlHZXRGb3Jl aWduUmVsU2l6ZV9mdW5jdGlvbiBHZXRGb3JlaWduUmVsU2l6ZTsKICAJR2V0 Rm9yZWlnblBhdGhzX2Z1bmN0aW9uIEdldEZvcmVpZ25QYXRoczsKKyAJUmVw YXJhbWV0ZXJpemVGb3JlaWduUGF0aF9mdW5jdGlvbiBSZXBhcmFtZXRlcml6 ZUZvcmVpZ25QYXRoOwogIAlHZXRGb3JlaWduUGxhbl9mdW5jdGlvbiBHZXRG b3JlaWduUGxhbjsKICAJQmVnaW5Gb3JlaWduU2Nhbl9mdW5jdGlvbiBCZWdp bkZvcmVpZ25TY2FuOwogIAlJdGVyYXRlRm9yZWlnblNjYW5fZnVuY3Rpb24g SXRlcmF0ZUZvcmVpZ25TY2FuOwoqKiogYS9zcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL2ZvcmVpZ25fZGF0YS5vdXQKLS0tIGIvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9mb3JlaWduX2RhdGEub3V0CioqKioqKioqKioqKioqKgoq KiogNzUwLDc2NSAqKioqIENSRUFURSBUQUJMRSB1c2VfZnQxX2NvbHVtbl90 eXBlICh4IGZ0MSk7CiAgQUxURVIgRk9SRUlHTiBUQUJMRSBmdDEgQUxURVIg Q09MVU1OIGM4IFNFVCBEQVRBIFRZUEUgaW50ZWdlcjsJLS0gRVJST1IKICBF UlJPUjogIGNhbm5vdCBhbHRlciBmb3JlaWduIHRhYmxlICJmdDEiIGJlY2F1 c2UgY29sdW1uICJ1c2VfZnQxX2NvbHVtbl90eXBlLngiIHVzZXMgaXRzIHJv dyB0eXBlCiAgRFJPUCBUQUJMRSB1c2VfZnQxX2NvbHVtbl90eXBlOwohIEFM VEVSIEZPUkVJR04gVEFCTEUgZnQxIEFERCBDT05TVFJBSU5UIGZ0MV9jOV9j aGVjayBDSEVDSyAoYzkgPCAwKTsgLS0gRVJST1IKISBFUlJPUjogIGNvbnN0 cmFpbnRzIGFyZSBub3Qgc3VwcG9ydGVkIG9uIGZvcmVpZ24gdGFibGVzCiEg TElORSAxOiBBTFRFUiBGT1JFSUdOIFRBQkxFIGZ0MSBBREQgQ09OU1RSQUlO VCBmdDFfYzlfY2hlY2sgQ0hFQ0sgKGMuLi4KISAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBeCiAgQUxURVIgRk9SRUlHTiBUQUJMRSBm dDEgRFJPUCBDT05TVFJBSU5UIG5vX2NvbnN0OyAgICAgICAgICAgICAgIC0t IEVSUk9SCiEgRVJST1I6ICAiZnQxIiBpcyBub3QgYSB0YWJsZQogIEFMVEVS IEZPUkVJR04gVEFCTEUgZnQxIERST1AgQ09OU1RSQUlOVCBJRiBFWElTVFMg bm9fY29uc3Q7CiEgRVJST1I6ICAiZnQxIiBpcyBub3QgYSB0YWJsZQohIEFM VEVSIEZPUkVJR04gVEFCTEUgZnQxIERST1AgQ09OU1RSQUlOVCBmdDFfYzFf Y2hlY2s7CiEgRVJST1I6ICAiZnQxIiBpcyBub3QgYSB0YWJsZQogIEFMVEVS IEZPUkVJR04gVEFCTEUgZnQxIFNFVCBXSVRIIE9JRFM7ICAgICAgICAgICAg ICAgICAgICAgICAgICAtLSBFUlJPUgogIEVSUk9SOiAgImZ0MSIgaXMgbm90 IGEgdGFibGUKICBBTFRFUiBGT1JFSUdOIFRBQkxFIGZ0MSBPV05FUiBUTyBy ZWdyZXNzX3Rlc3Rfcm9sZTsKLS0tIDc1MCw3NjEgLS0tLQogIEFMVEVSIEZP UkVJR04gVEFCTEUgZnQxIEFMVEVSIENPTFVNTiBjOCBTRVQgREFUQSBUWVBF IGludGVnZXI7CS0tIEVSUk9SCiAgRVJST1I6ICBjYW5ub3QgYWx0ZXIgZm9y ZWlnbiB0YWJsZSAiZnQxIiBiZWNhdXNlIGNvbHVtbiAidXNlX2Z0MV9jb2x1 bW5fdHlwZS54IiB1c2VzIGl0cyByb3cgdHlwZQogIERST1AgVEFCTEUgdXNl X2Z0MV9jb2x1bW5fdHlwZTsKISBBTFRFUiBGT1JFSUdOIFRBQkxFIGZ0MSBB REQgQ09OU1RSQUlOVCBmdDFfYzlfY2hlY2sgQ0hFQ0sgKGM5IDwgMCk7CiAg QUxURVIgRk9SRUlHTiBUQUJMRSBmdDEgRFJPUCBDT05TVFJBSU5UIG5vX2Nv bnN0OyAgICAgICAgICAgICAgIC0tIEVSUk9SCiEgRVJST1I6ICBjb25zdHJh aW50ICJub19jb25zdCIgb2YgcmVsYXRpb24gImZ0MSIgZG9lcyBub3QgZXhp c3QKICBBTFRFUiBGT1JFSUdOIFRBQkxFIGZ0MSBEUk9QIENPTlNUUkFJTlQg SUYgRVhJU1RTIG5vX2NvbnN0OwohIE5PVElDRTogIGNvbnN0cmFpbnQgIm5v X2NvbnN0IiBvZiByZWxhdGlvbiAiZnQxIiBkb2VzIG5vdCBleGlzdCwgc2tp cHBpbmcKISBBTFRFUiBGT1JFSUdOIFRBQkxFIGZ0MSBEUk9QIENPTlNUUkFJ TlQgZnQxX2M5X2NoZWNrOwogIEFMVEVSIEZPUkVJR04gVEFCTEUgZnQxIFNF VCBXSVRIIE9JRFM7ICAgICAgICAgICAgICAgICAgICAgICAgICAtLSBFUlJP UgogIEVSUk9SOiAgImZ0MSIgaXMgbm90IGEgdGFibGUKICBBTFRFUiBGT1JF SUdOIFRBQkxFIGZ0MSBPV05FUiBUTyByZWdyZXNzX3Rlc3Rfcm9sZTsKKioq IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZm9yZWlnbl9kYXRhLnNxbAotLS0g Yi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9mb3JlaWduX2RhdGEuc3FsCioqKioq KioqKioqKioqKgoqKiogMzE0LDMyMyAqKioqIEFMVEVSIEZPUkVJR04gVEFC TEUgZnQxIEFMVEVSIENPTFVNTiBjOCBTRVQgU1RBVElTVElDUyAtMTsKICBD UkVBVEUgVEFCTEUgdXNlX2Z0MV9jb2x1bW5fdHlwZSAoeCBmdDEpOwogIEFM VEVSIEZPUkVJR04gVEFCTEUgZnQxIEFMVEVSIENPTFVNTiBjOCBTRVQgREFU QSBUWVBFIGludGVnZXI7CS0tIEVSUk9SCiAgRFJPUCBUQUJMRSB1c2VfZnQx X2NvbHVtbl90eXBlOwohIEFMVEVSIEZPUkVJR04gVEFCTEUgZnQxIEFERCBD T05TVFJBSU5UIGZ0MV9jOV9jaGVjayBDSEVDSyAoYzkgPCAwKTsgLS0gRVJS T1IKICBBTFRFUiBGT1JFSUdOIFRBQkxFIGZ0MSBEUk9QIENPTlNUUkFJTlQg bm9fY29uc3Q7ICAgICAgICAgICAgICAgLS0gRVJST1IKICBBTFRFUiBGT1JF SUdOIFRBQkxFIGZ0MSBEUk9QIENPTlNUUkFJTlQgSUYgRVhJU1RTIG5vX2Nv bnN0OwohIEFMVEVSIEZPUkVJR04gVEFCTEUgZnQxIERST1AgQ09OU1RSQUlO VCBmdDFfYzFfY2hlY2s7CiAgQUxURVIgRk9SRUlHTiBUQUJMRSBmdDEgU0VU IFdJVEggT0lEUzsgICAgICAgICAgICAgICAgICAgICAgICAgIC0tIEVSUk9S CiAgQUxURVIgRk9SRUlHTiBUQUJMRSBmdDEgT1dORVIgVE8gcmVncmVzc190 ZXN0X3JvbGU7CiAgQUxURVIgRk9SRUlHTiBUQUJMRSBmdDEgT1BUSU9OUyAo RFJPUCBkZWxpbWl0ZXIsIFNFVCBxdW90ZSAnficsIEFERCBlc2NhcGUgJ0An KTsKLS0tIDMxNCwzMjMgLS0tLQogIENSRUFURSBUQUJMRSB1c2VfZnQxX2Nv bHVtbl90eXBlICh4IGZ0MSk7CiAgQUxURVIgRk9SRUlHTiBUQUJMRSBmdDEg QUxURVIgQ09MVU1OIGM4IFNFVCBEQVRBIFRZUEUgaW50ZWdlcjsJLS0gRVJS T1IKICBEUk9QIFRBQkxFIHVzZV9mdDFfY29sdW1uX3R5cGU7CiEgQUxURVIg Rk9SRUlHTiBUQUJMRSBmdDEgQUREIENPTlNUUkFJTlQgZnQxX2M5X2NoZWNr IENIRUNLIChjOSA8IDApOwogIEFMVEVSIEZPUkVJR04gVEFCTEUgZnQxIERS T1AgQ09OU1RSQUlOVCBub19jb25zdDsgICAgICAgICAgICAgICAtLSBFUlJP UgogIEFMVEVSIEZPUkVJR04gVEFCTEUgZnQxIERST1AgQ09OU1RSQUlOVCBJ RiBFWElTVFMgbm9fY29uc3Q7CiEgQUxURVIgRk9SRUlHTiBUQUJMRSBmdDEg RFJPUCBDT05TVFJBSU5UIGZ0MV9jOV9jaGVjazsKICBBTFRFUiBGT1JFSUdO IFRBQkxFIGZ0MSBTRVQgV0lUSCBPSURTOyAgICAgICAgICAgICAgICAgICAg ICAgICAgLS0gRVJST1IKICBBTFRFUiBGT1JFSUdOIFRBQkxFIGZ0MSBPV05F UiBUTyByZWdyZXNzX3Rlc3Rfcm9sZTsKICBBTFRFUiBGT1JFSUdOIFRBQkxF IGZ0MSBPUFRJT05TIChEUk9QIGRlbGltaXRlciwgU0VUIHF1b3RlICd+Jywg QUREIGVzY2FwZSAnQCcpOwo= --------------050501030700030705080003 Content-Type: text/plain Content-Disposition: inline Content-Transfer-Encoding: 8bit MIME-Version: 1.0 -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers --------------050501030700030705080003--