Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.80) (envelope-from ) id 1W94HP-0000SD-0h for pgsql-hackers@arkaria.postgresql.org; Fri, 31 Jan 2014 02:56:31 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.80) (envelope-from ) id 1W94HO-0002MQ-GB for pgsql-hackers@arkaria.postgresql.org; Fri, 31 Jan 2014 02:56:30 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtp (Exim 4.80) (envelope-from ) id 1W94HL-0002KP-4O for pgsql-hackers@postgresql.org; Fri, 31 Jan 2014 02:56:27 +0000 Received: from tama50.ecl.ntt.co.jp ([129.60.39.147]) by magus.postgresql.org with esmtp (Exim 4.80) (envelope-from ) id 1W94H9-0004J7-LP for pgsql-hackers@postgresql.org; Fri, 31 Jan 2014 02:56:26 +0000 Received: from mfs5.rdh.ecl.ntt.co.jp (mfs5.rdh.ecl.ntt.co.jp [129.60.39.144]) by tama50.ecl.ntt.co.jp (8.13.8/8.13.8) with ESMTP id s0V2uAIP025347; Fri, 31 Jan 2014 11:56:10 +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 A1B9EE014B; Fri, 31 Jan 2014 11:56:10 +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 959A0E0149; Fri, 31 Jan 2014 11:56:10 +0900 (JST) Received: from [129.60.241.254] ([129.60.241.254]) by imail3.m.ecl.ntt.co.jp (8.13.8/8.13.8) with ESMTP id s0V2uAid024375; Fri, 31 Jan 2014 11:56:10 +0900 Message-ID: <52EB10AC.4070307@lab.ntt.co.jp> Date: Fri, 31 Jan 2014 11:55:40 +0900 From: Etsuro Fujita User-Agent: Mozilla/5.0 (Windows NT 6.0; rv:24.0) Gecko/20100101 Thunderbird/24.2.0 MIME-Version: 1.0 To: Shigeru Hanada CC: PostgreSQL-development Subject: Re: [Review] inherit support for foreign tables References: <52E11225.2080907@lab.ntt.co.jp> <52E5D9AD.4000202@lab.ntt.co.jp> <52E7AA1A.7000008@lab.ntt.co.jp> In-Reply-To: <52E7AA1A.7000008@lab.ntt.co.jp> Content-Type: multipart/mixed; boundary="------------000407030907050608090201" 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. --------------000407030907050608090201 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit (2014/01/28 22:01), Etsuro Fujita wrote: > (2014/01/27 21:49), Shigeru Hanada wrote: >> Is it too big change that making ANALYZE command to handle foreign >> tables too even if no table name was specified? IIRC, performance >> issue was the reason to exclude foreign tables from auto-analyze >> processing. ANALYZEing large database contains local huge data also >> takes long time. One idea to avoid unexpected long processing is to >> add option to foreign tables to mark it as "not-auto-analyzable". > > Maybe I didn't express my idea clearly. Sorry for that. > > I don't think that we now allow the ANALYZE command to handle foreign > tables when no table name is specified with the command. I think that > we allow the ANALYZE command to handle an inheritance tree that includes > foreign tables when the name of the parent table is specified, without > ignoring such foreign tables in the caluculation. ISTM it would be > possible to do so if we introduce a new parameter, say, vac_mode, which > indicates wether vacuum() is called with a specific table or not. > > I'll try to modify the ANALYZE command to do so on top of you patch. Done on top of your patch, foreign_inherit.patch, not the latest version, foreign_inherit-v2.patch. As I proposed, an inheritance tree that includes foreign tables is now ANALYZEd, without ignoring such foreign tables in the inherited-stats computation, if the name of the parent table is specified with the ANALYZE command. (That has been done by a small modification of analyze.c, thanks to [1].) The ANALYZE command with no tablename or the autovacuum worker skips the inherited-stats computation itself for inheritance trees that includes foreign tables, which is different from the original patch. To distinguish the ANALYZE-with-a-tablename command from the others (ie, the ANALYZE-with-no-tablename command or the autovacuum worker), I've introduced a new parameter, vacmode, in vacuum(), and thus called analyze_rel() with that parameter. Attached is the modified patch. Could you review the patch? Thanks, [1] http://www.postgresql.org/message-id/E1SGFOO-0006ZF-8n@gemulon.postgresql.org Best regards, Etsuro Fujita --------------000407030907050608090201 Content-Type: text/plain; charset=Shift_JIS; name="foreign_inherit-v1.1.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="foreign_inherit-v1.1.patch" KioqIGEvZG9jL3NyYy9zZ21sL2RkbC5zZ21sCi0tLSBiL2RvYy9zcmMvc2dt bC9kZGwuc2dtbAoqKioqKioqKioqKioqKioKKioqIDI1OCwyNjMgKioqKiBD UkVBVEUgVEFCTEUgcHJvZHVjdHMgKAotLS0gMjU4LDI3NCAtLS0tCiAgICAg ZXZlbiBpZiB0aGUgdmFsdWUgY2FtZSBmcm9tIHRoZSBkZWZhdWx0IHZhbHVl IGRlZmluaXRpb24uCiAgICA8L3BhcmE+CiAgCisgICA8bm90ZT4KKyAgICA8 cGFyYT4KKyAgICAgTm90ZSB0aGF0IGNvbnN0cmFpbnRzIGNhbiBiZSBkZWZp bmVkIG9uIGZvcmVpZ24gdGFibGVzIHRvbywgYnV0IHN1Y2gKKyAgICAgY29u c3RyYWludHMgYXJlIG5vdCBlbmZvcmNlZCBvbiBpbnNlcnQgb3IgdXBkYXRl LiAgVGhvc2UgY29uc3RyYWludHMgYXJlCisgICAgICJhc3NlcnRpdmUiLCBh bmQgd29yayBvbmx5IHRvIHRlbGwgcGxhbm5lciB0aGF0IHNvbWUga2luZCBv ZiBvcHRpbWl6YXRpb24KKyAgICAgc3VjaCBhcyBjb25zdHJhaW50IGV4Y2x1 c2lvbiBjYW4gYmUgY29uc2lkZXJkLiAgVGhpcyBzZWVtcyB1c2VsZXNzLCBi dXQKKyAgICAgYWxsb3dzIHVzIHRvIHVzZSBmb3JpZWduIHRhYmxlIGFzIGNo aWxkIHRhYmxlIChzZWUKKyAgICAgPHhyZWYgbGlua2VuZD0iZGRsLWluaGVy aXQiPikgdG8gb2ZmLWxvYWQgdG8gbXVsdGlwbGUgc2VydmVycy4KKyAgICA8 L3BhcmE+CisgICA8L25vdGU+CisgCiAgICA8c2VjdDIgaWQ9ImRkbC1jb25z dHJhaW50cy1jaGVjay1jb25zdHJhaW50cyI+CiAgICAgPHRpdGxlPkNoZWNr IENvbnN0cmFpbnRzPC90aXRsZT4KICAKKioqKioqKioqKioqKioqCioqKiAy MDIxLDIwMjggKioqKiBDUkVBVEUgVEFCTEUgY2FwaXRhbHMgKAogICAgPC9w YXJhPgogIAogICAgPHBhcmE+CiEgICAgSW4gPHByb2R1Y3RuYW1lPlBvc3Rn cmVTUUw8L3Byb2R1Y3RuYW1lPiwgYSB0YWJsZSBjYW4gaW5oZXJpdCBmcm9t CiEgICAgemVybyBvciBtb3JlIG90aGVyIHRhYmxlcywgYW5kIGEgcXVlcnkg Y2FuIHJlZmVyZW5jZSBlaXRoZXIgYWxsCiAgICAgcm93cyBvZiBhIHRhYmxl IG9yIGFsbCByb3dzIG9mIGEgdGFibGUgcGx1cyBhbGwgb2YgaXRzIGRlc2Nl bmRhbnQgdGFibGVzLgogICAgIFRoZSBsYXR0ZXIgYmVoYXZpb3IgaXMgdGhl IGRlZmF1bHQuCiAgICAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgcXVl cnkgZmluZHMgdGhlIG5hbWVzIG9mIGFsbCBjaXRpZXMsCi0tLSAyMDMyLDIw MzkgLS0tLQogICAgPC9wYXJhPgogIAogICAgPHBhcmE+CiEgICAgSW4gPHBy b2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiwgYSB0YWJsZSBv ciBmb3JlaWduIHRhYmxlIGNhbgohICAgIGluaGVyaXQgZnJvbSB6ZXJvIG9y IG1vcmUgb3RoZXIgdGFibGVzLCBhbmQgYSBxdWVyeSBjYW4gcmVmZXJlbmNl IGVpdGhlciBhbGwKICAgICByb3dzIG9mIGEgdGFibGUgb3IgYWxsIHJvd3Mg b2YgYSB0YWJsZSBwbHVzIGFsbCBvZiBpdHMgZGVzY2VuZGFudCB0YWJsZXMu CiAgICAgVGhlIGxhdHRlciBiZWhhdmlvciBpcyB0aGUgZGVmYXVsdC4KICAg ICBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBxdWVyeSBmaW5kcyB0aGUg bmFtZXMgb2YgYWxsIGNpdGllcywKKioqIGEvZG9jL3NyYy9zZ21sL3JlZi9h bHRlcl9mb3JlaWduX3RhYmxlLnNnbWwKLS0tIGIvZG9jL3NyYy9zZ21sL3Jl Zi9hbHRlcl9mb3JlaWduX3RhYmxlLnNnbWwKKioqKioqKioqKioqKioqCioq KiA0Miw0NyAqKioqIEFMVEVSIEZPUkVJR04gVEFCTEUgWyBJRiBFWElTVFMg XSA8cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFNRVRFUiI+bmFtZTwvcmVwbGFj ZWFiCi0tLSA0Miw0OSAtLS0tCiAgICAgIEFMVEVSIFsgQ09MVU1OIF0gPHJl cGxhY2VhYmxlIGNsYXNzPSJQQVJBTUVURVIiPmNvbHVtbl9uYW1lPC9yZXBs YWNlYWJsZT4gU0VUICggPHJlcGxhY2VhYmxlIGNsYXNzPSJQQVJBTUVURVIi PmF0dHJpYnV0ZV9vcHRpb248L3JlcGxhY2VhYmxlPiA9IDxyZXBsYWNlYWJs ZSBjbGFzcz0iUEFSQU1FVEVSIj52YWx1ZTwvcmVwbGFjZWFibGU+IFssIC4u LiBdICkKICAgICAgQUxURVIgWyBDT0xVTU4gXSA8cmVwbGFjZWFibGUgY2xh c3M9IlBBUkFNRVRFUiI+Y29sdW1uX25hbWU8L3JlcGxhY2VhYmxlPiBSRVNF VCAoIDxyZXBsYWNlYWJsZSBjbGFzcz0iUEFSQU1FVEVSIj5hdHRyaWJ1dGVf b3B0aW9uPC9yZXBsYWNlYWJsZT4gWywgLi4uIF0gKQogICAgICBBTFRFUiBb IENPTFVNTiBdIDxyZXBsYWNlYWJsZSBjbGFzcz0iUEFSQU1FVEVSIj5jb2x1 bW5fbmFtZTwvcmVwbGFjZWFibGU+IE9QVElPTlMgKCBbIEFERCB8IFNFVCB8 IERST1AgXSA8cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFNRVRFUiI+b3B0aW9u PC9yZXBsYWNlYWJsZT4gWyc8cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFNRVRF UiI+dmFsdWU8L3JlcGxhY2VhYmxlPiddIFssIC4uLiBdKQorICAgICBJTkhF UklUIDxyZXBsYWNlYWJsZSBjbGFzcz0iUEFSQU1FVEVSIj5wYXJlbnRfdGFi bGU8L3JlcGxhY2VhYmxlPgorICAgICBOTyBJTkhFUklUIDxyZXBsYWNlYWJs ZSBjbGFzcz0iUEFSQU1FVEVSIj5wYXJlbnRfdGFibGU8L3JlcGxhY2VhYmxl PgogICAgICBPV05FUiBUTyA8cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFNRVRF UiI+bmV3X293bmVyPC9yZXBsYWNlYWJsZT4KICAgICAgT1BUSU9OUyAoIFsg QUREIHwgU0VUIHwgRFJPUCBdIDxyZXBsYWNlYWJsZSBjbGFzcz0iUEFSQU1F VEVSIj5vcHRpb248L3JlcGxhY2VhYmxlPiBbJzxyZXBsYWNlYWJsZSBjbGFz cz0iUEFSQU1FVEVSIj52YWx1ZTwvcmVwbGFjZWFibGU+J10gWywgLi4uIF0p CiAgPC9zeW5vcHNpcz4KKioqKioqKioqKioqKioqCioqKiAxNzgsMTgzICoq KiogQUxURVIgRk9SRUlHTiBUQUJMRSBbIElGIEVYSVNUUyBdIDxyZXBsYWNl YWJsZSBjbGFzcz0iUEFSQU1FVEVSIj5uYW1lPC9yZXBsYWNlYWIKLS0tIDE4 MCwyMDUgLS0tLQogICAgIDwvdmFybGlzdGVudHJ5PgogIAogICAgIDx2YXJs aXN0ZW50cnk+CisgICAgIDx0ZXJtPjxsaXRlcmFsPklOSEVSSVQgPHJlcGxh Y2VhYmxlIGNsYXNzPSJQQVJBTUVURVIiPnBhcmVudF90YWJsZTwvcmVwbGFj ZWFibGU+PC9saXRlcmFsPjwvdGVybT4KKyAgICAgPGxpc3RpdGVtPgorICAg ICAgPHBhcmE+CisgICAgICAgVGhpcyBmb3JtIGFkZHMgdGhlIHRhcmdldCBm b3JlaWduIHRhYmxlIGFzIGEgbmV3IGNoaWxkIG9mIHRoZSBzcGVjaWZpZWQK KyAgICAgICBwYXJlbnQgdGFibGUuCisgICAgICA8L3BhcmE+CisgICAgIDwv bGlzdGl0ZW0+CisgICAgPC92YXJsaXN0ZW50cnk+CisgCisgICAgPHZhcmxp c3RlbnRyeT4KKyAgICAgPHRlcm0+PGxpdGVyYWw+Tk8gSU5IRVJJVCA8cmVw bGFjZWFibGUgY2xhc3M9IlBBUkFNRVRFUiI+cGFyZW50X3RhYmxlPC9yZXBs YWNlYWJsZT48L2xpdGVyYWw+PC90ZXJtPgorICAgICA8bGlzdGl0ZW0+Cisg ICAgICA8cGFyYT4KKyAgICAgICBUaGlzIGZvcm0gcmVtb3ZlcyB0aGUgdGFy Z2V0IGZvcmVpZ24gdGFibGUgZnJvbSB0aGUgbGlzdCBvZiBjaGlsZHJlbiBv ZgorICAgICAgIHRoZSBzcGVjaWZpZWQgcGFyZW50IHRhYmxlLgorICAgICAg PC9wYXJhPgorICAgICA8L2xpc3RpdGVtPgorICAgIDwvdmFybGlzdGVudHJ5 PgorIAorICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgIDx0ZXJtPjxsaXRlcmFs Pk9QVElPTlMgKCBbIEFERCB8IFNFVCB8IERST1AgXSA8cmVwbGFjZWFibGUg Y2xhc3M9IlBBUkFNRVRFUiI+b3B0aW9uPC9yZXBsYWNlYWJsZT4gWyc8cmVw bGFjZWFibGUgY2xhc3M9IlBBUkFNRVRFUiI+dmFsdWU8L3JlcGxhY2VhYmxl PiddIFssIC4uLiBdICk8L2xpdGVyYWw+PC90ZXJtPgogICAgICA8bGlzdGl0 ZW0+CiAgICAgICA8cGFyYT4KKioqKioqKioqKioqKioqCioqKiAzMDYsMzEx ICoqKiogQUxURVIgRk9SRUlHTiBUQUJMRSBbIElGIEVYSVNUUyBdIDxyZXBs YWNlYWJsZSBjbGFzcz0iUEFSQU1FVEVSIj5uYW1lPC9yZXBsYWNlYWIKLS0t IDMyOCwzNDIgLS0tLQogICAgICAgICA8L3BhcmE+CiAgICAgICAgPC9saXN0 aXRlbT4KICAgICAgIDwvdmFybGlzdGVudHJ5PgorIAorICAgICAgPHZhcmxp c3RlbnRyeT4KKyAgICAgICA8dGVybT48cmVwbGFjZWFibGUgY2xhc3M9IlBB UkFNRVRFUiI+cGFyZW50X25hbWU8L3JlcGxhY2VhYmxlPjwvdGVybT4KKyAg ICAgICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgQSBw YXJlbnQgdGFibGUgdG8gYXNzb2NpYXRlIG9yIGRlLWFzc29jaWF0ZSB3aXRo IHRoaXMgZm9yZWlnbiB0YWJsZS4KKyAgICAgICAgPC9wYXJhPgorICAgICAg IDwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRyeT4KICAgICAgPC92 YXJpYWJsZWxpc3Q+CiAgIDwvcmVmc2VjdDE+CiAgCioqKiBhL2RvYy9zcmMv c2dtbC9yZWYvY3JlYXRlX2ZvcmVpZ25fdGFibGUuc2dtbAotLS0gYi9kb2Mv c3JjL3NnbWwvcmVmL2NyZWF0ZV9mb3JlaWduX3RhYmxlLnNnbWwKKioqKioq KioqKioqKioqCioqKiAyMiwyNyAqKioqIENSRUFURSBGT1JFSUdOIFRBQkxF IFsgSUYgTk9UIEVYSVNUUyBdIDxyZXBsYWNlYWJsZSBjbGFzcz0iUEFSQU1F VEVSIj50YWJsZV9uYW1lCi0tLSAyMiwyOCAtLS0tCiAgICAgIDxyZXBsYWNl YWJsZSBjbGFzcz0iUEFSQU1FVEVSIj5jb2x1bW5fbmFtZTwvcmVwbGFjZWFi bGU+IDxyZXBsYWNlYWJsZSBjbGFzcz0iUEFSQU1FVEVSIj5kYXRhX3R5cGU8 L3JlcGxhY2VhYmxlPiBbIE9QVElPTlMgKCA8cmVwbGFjZWFibGUgY2xhc3M9 IlBBUkFNRVRFUiI+b3B0aW9uPC9yZXBsYWNlYWJsZT4gJzxyZXBsYWNlYWJs ZSBjbGFzcz0iUEFSQU1FVEVSIj52YWx1ZTwvcmVwbGFjZWFibGU+JyBbLCAu Li4gXSApIF0gWyBDT0xMQVRFIDxyZXBsYWNlYWJsZT5jb2xsYXRpb248L3Jl cGxhY2VhYmxlPiBdIFsgPHJlcGxhY2VhYmxlIGNsYXNzPSJQQVJBTUVURVIi PmNvbHVtbl9jb25zdHJhaW50PC9yZXBsYWNlYWJsZT4gWyAuLi4gXSBdCiAg ICAgIFssIC4uLiBdCiAgXSApCisgWyBJTkhFUklUUyAoIDxyZXBsYWNlYWJs ZT5wYXJlbnRfdGFibGU8L3JlcGxhY2VhYmxlPiBbLCAuLi4gXSApIF0KICAg IFNFUlZFUiA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+c2VydmVy X25hbWU8L3JlcGxhY2VhYmxlPgogIFsgT1BUSU9OUyAoIDxyZXBsYWNlYWJs ZSBjbGFzcz0iUEFSQU1FVEVSIj5vcHRpb248L3JlcGxhY2VhYmxlPiAnPHJl cGxhY2VhYmxlIGNsYXNzPSJQQVJBTUVURVIiPnZhbHVlPC9yZXBsYWNlYWJs ZT4nIFssIC4uLiBdICkgXQogIAoqKioqKioqKioqKioqKioKKioqIDE1OSwx NjQgKioqKiBDUkVBVEUgRk9SRUlHTiBUQUJMRSBbIElGIE5PVCBFWElTVFMg XSA8cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFNRVRFUiI+dGFibGVfbmFtZQot LS0gMTYwLDE3NiAtLS0tCiAgICAgPC92YXJsaXN0ZW50cnk+CiAgCiAgICAg PHZhcmxpc3RlbnRyeT4KKyAgICAgPHRlcm0+PHJlcGxhY2VhYmxlIGNsYXNz PSJQQVJBTUVURVIiPnBhcmVudF90YWJsZTwvcmVwbGFjZWFibGU+PC90ZXJt PgorICAgICA8bGlzdGl0ZW0+CisgICAgICA8cGFyYT4KKyAgICAgICBUaGUg bmFtZSBvZiBhbiBleGlzdGluZyB0YWJsZSBvciBmb3JlaWduIHRhYmxlIGZy b20gd2hpY2ggdGhlIG5ldyBmb3JlaWduCisgICAgICAgdGFibGUgYXV0b21h dGljYWxseSBpbmhlcml0cyBhbGwgY29sdW1ucywgc2VlCisgICAgICAgPHhy ZWYgbGlua2VuZD0iZGRsLWluaGVyaXQiPiBmb3IgZGV0YWlscyBvZiB0YWJs ZSBpbmhlcml0YW5jZS4KKyAgICAgIDwvcGFyYT4KKyAgICAgPC9saXN0aXRl bT4KKyAgICA8L3Zhcmxpc3RlbnRyeT4KKyAKKyAgICA8dmFybGlzdGVudHJ5 PgogICAgICA8dGVybT48cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFNRVRFUiI+ c2VydmVyX25hbWU8L3JlcGxhY2VhYmxlPjwvdGVybT4KICAgICAgPGxpc3Rp dGVtPgogICAgICAgPHBhcmE+CioqKiBhL3NyYy9iYWNrZW5kL2NvbW1hbmRz L2FuYWx5emUuYwotLS0gYi9zcmMvYmFja2VuZC9jb21tYW5kcy9hbmFseXpl LmMKKioqKioqKioqKioqKioqCioqKiA5MSw5NiAqKioqIHN0YXRpYyB2b2lk IEJsb2NrU2FtcGxlcl9Jbml0KEJsb2NrU2FtcGxlciBicywgQmxvY2tOdW1i ZXIgbmJsb2NrcywKLS0tIDkxLDk4IC0tLS0KICAJCQkJICBpbnQgc2FtcGxl c2l6ZSk7CiAgc3RhdGljIGJvb2wgQmxvY2tTYW1wbGVyX0hhc01vcmUoQmxv Y2tTYW1wbGVyIGJzKTsKICBzdGF0aWMgQmxvY2tOdW1iZXIgQmxvY2tTYW1w bGVyX05leHQoQmxvY2tTYW1wbGVyIGJzKTsKKyBzdGF0aWMgYm9vbCBpbmhl cml0YW5jZV90cmVlX2luY2x1ZGVfZm9yZWlnbihSZWxhdGlvbiBvbmVyZWws CisgCQkJCQkJCQkJCQkgYm9vbCAqaXNBbmFseXphYmxlKTsKICBzdGF0aWMg dm9pZCBjb21wdXRlX2luZGV4X3N0YXRzKFJlbGF0aW9uIG9uZXJlbCwgZG91 YmxlIHRvdGFscm93cywKICAJCQkJCUFubEluZGV4RGF0YSAqaW5kZXhkYXRh LCBpbnQgbmluZGV4ZXMsCiAgCQkJCQlIZWFwVHVwbGUgKnJvd3MsIGludCBu dW1yb3dzLAoqKioqKioqKioqKioqKioKKioqIDExNCwxMjAgKioqKiBzdGF0 aWMgRGF0dW0gaW5kX2ZldGNoX2Z1bmMoVmFjQXR0clN0YXRzUCBzdGF0cywg aW50IHJvd251bSwgYm9vbCAqaXNOdWxsKTsKICAgKglhbmFseXplX3JlbCgp IC0tIGFuYWx5emUgb25lIHJlbGF0aW9uCiAgICovCiAgdm9pZAohIGFuYWx5 emVfcmVsKE9pZCByZWxpZCwgVmFjdXVtU3RtdCAqdmFjc3RtdCwgQnVmZmVy QWNjZXNzU3RyYXRlZ3kgYnN0cmF0ZWd5KQogIHsKICAJUmVsYXRpb24Jb25l cmVsOwogIAlpbnQJCQllbGV2ZWw7Ci0tLSAxMTYsMTIzIC0tLS0KICAgKglh bmFseXplX3JlbCgpIC0tIGFuYWx5emUgb25lIHJlbGF0aW9uCiAgICovCiAg dm9pZAohIGFuYWx5emVfcmVsKE9pZCByZWxpZCwgVmFjdXVtU3RtdCAqdmFj c3RtdCwgVmFjdXVtTW9kZSB2YWNtb2RlLAohIAkJCUJ1ZmZlckFjY2Vzc1N0 cmF0ZWd5IGJzdHJhdGVneSkKICB7CiAgCVJlbGF0aW9uCW9uZXJlbDsKICAJ aW50CQkJZWxldmVsOwoqKioqKioqKioqKioqKioKKioqIDI3MCwyNzYgKioq KiBhbmFseXplX3JlbChPaWQgcmVsaWQsIFZhY3V1bVN0bXQgKnZhY3N0bXQs IEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IGJzdHJhdGVneSkKICAJICogSWYgdGhl cmUgYXJlIGNoaWxkIHRhYmxlcywgZG8gcmVjdXJzaXZlIEFOQUxZWkUuCiAg CSAqLwogIAlpZiAob25lcmVsLT5yZF9yZWwtPnJlbGhhc3N1YmNsYXNzKQoh IAkJZG9fYW5hbHl6ZV9yZWwob25lcmVsLCB2YWNzdG10LCBhY3F1aXJlZnVu YywgcmVscGFnZXMsIHRydWUsIGVsZXZlbCk7CiAgCiAgCS8qCiAgCSAqIENs b3NlIHNvdXJjZSByZWxhdGlvbiBub3csIGJ1dCBrZWVwIGxvY2sgc28gdGhh dCBubyBvbmUgZGVsZXRlcyBpdAotLS0gMjczLDI4OCAtLS0tCiAgCSAqIElm IHRoZXJlIGFyZSBjaGlsZCB0YWJsZXMsIGRvIHJlY3Vyc2l2ZSBBTkFMWVpF LgogIAkgKi8KICAJaWYgKG9uZXJlbC0+cmRfcmVsLT5yZWxoYXNzdWJjbGFz cykKISAJewohIAkJYm9vbAkJaW5jbHVkZV9mb3JlaWduOwohIAkJYm9vbAkJ aXNBbmFseXphYmxlOwohIAohIAkJaW5jbHVkZV9mb3JlaWduID0gaW5oZXJp dGFuY2VfdHJlZV9pbmNsdWRlX2ZvcmVpZ24ob25lcmVsLAohIAkJCQkJCQkJ CQkJCQkJICAgJmlzQW5hbHl6YWJsZSk7CiEgCiEgCQlpZiAoIWluY2x1ZGVf Zm9yZWlnbiB8fCAoaXNBbmFseXphYmxlICYmIHZhY21vZGUgPT0gVkFDX01P REVfU0lOR0xFKSkKISAJCQlkb19hbmFseXplX3JlbChvbmVyZWwsIHZhY3N0 bXQsIGFjcXVpcmVmdW5jLCByZWxwYWdlcywgdHJ1ZSwgZWxldmVsKTsKISAJ fQogIAogIAkvKgogIAkgKiBDbG9zZSBzb3VyY2UgcmVsYXRpb24gbm93LCBi dXQga2VlcCBsb2NrIHNvIHRoYXQgbm8gb25lIGRlbGV0ZXMgaXQKKioqKioq KioqKioqKioqCioqKiA2NjgsNjczICoqKiogZG9fYW5hbHl6ZV9yZWwoUmVs YXRpb24gb25lcmVsLCBWYWN1dW1TdG10ICp2YWNzdG10LAotLS0gNjgwLDc3 MiAtLS0tCiAgfQogIAogIC8qCisgICogQ2hlY2sgd2V0aGVyIHRoZSBpbmhl cml0YW5jZSB0cmVlIGluY2x1ZGVzIGZvcmVpZ24gdGFibGVzLiAgQW5kIGlm IHNvLAorICAqIGNoZWNrIHdldGhlciBzdWNoIGZvcmVpZ24gdGFibGVzIGFy ZSBhbGwgYW5hbHl6YWJsZS4KKyAgKi8KKyBzdGF0aWMgYm9vbAorIGluaGVy aXRhbmNlX3RyZWVfaW5jbHVkZV9mb3JlaWduKFJlbGF0aW9uIG9uZXJlbCwg Ym9vbCAqaXNBbmFseXphYmxlKQorIHsKKyAJYm9vbAkJcmVzdWx0ID0gZmFs c2U7CisgCUxpc3QJICAgKnRhYmxlT0lEczsKKyAJTGlzdENlbGwgICAqbGM7 CisgCisgCSppc0FuYWx5emFibGUgPSB0cnVlOworIAorIAkvKgorIAkgKiBG aW5kIGFsbCBtZW1iZXJzIG9mIGluaGVyaXRhbmNlIHNldC4gIFdlIG9ubHkg bmVlZCBBY2Nlc3NTaGFyZUxvY2sgb24KKyAJICogdGhlIGNoaWxkcmVuLgor IAkgKi8KKyAJdGFibGVPSURzID0KKyAJCWZpbmRfYWxsX2luaGVyaXRvcnMo UmVsYXRpb25HZXRSZWxpZChvbmVyZWwpLCBBY2Nlc3NTaGFyZUxvY2ssIE5V TEwpOworIAorIAkvKgorIAkgKiBDaGVjayB0aGF0IHRoZXJlJ3MgYXQgbGVh c3Qgb25lIGRlc2NlbmRhbnQsIGVsc2UgZmFpbC4gIFRoaXMgY291bGQKKyAJ ICogaGFwcGVuIGRlc3BpdGUgYW5hbHl6ZV9yZWwncyByZWxoYXNzdWJjbGFz cyBjaGVjaywgaWYgdGFibGUgb25jZSBoYWQgYQorIAkgKiBjaGlsZCBidXQg bm8gbG9uZ2VyIGRvZXMuICBJbiB0aGF0IGNhc2UsIHdlIGNhbiBjbGVhciB0 aGUKKyAJICogcmVsaGFzc3ViY2xhc3MgZmllbGQgc28gYXMgbm90IHRvIG1h a2UgdGhlIHNhbWUgbWlzdGFrZSBhZ2FpbiBsYXRlci4KKyAJICogKFRoaXMg aXMgc2FmZSBiZWNhdXNlIHdlIGhvbGQgU2hhcmVVcGRhdGVFeGNsdXNpdmVM b2NrLikKKyAJICovCisgCWlmIChsaXN0X2xlbmd0aCh0YWJsZU9JRHMpIDwg MikKKyAJeworIAkJLyogQ0NJIGJlY2F1c2Ugd2UgYWxyZWFkeSB1cGRhdGVk IHRoZSBwZ19jbGFzcyByb3cgaW4gdGhpcyBjb21tYW5kICovCisgCQlDb21t YW5kQ291bnRlckluY3JlbWVudCgpOworIAkJU2V0UmVsYXRpb25IYXNTdWJj bGFzcyhSZWxhdGlvbkdldFJlbGlkKG9uZXJlbCksIGZhbHNlKTsKKyAJCXJl dHVybiByZXN1bHQ7CisgCX0KKyAKKyAJLyoKKyAJICogQ2hlY2sgd2V0aGVy IHRoZSBpbmhlcml0YW5jZSB0cmVlIGluY2x1ZGVzIHNvbWUgZm9yZWlnbiB0 YWJsZXMuCisgCSAqLworIAlmb3JlYWNoKGxjLCB0YWJsZU9JRHMpCisgCXsK KyAJCU9pZAkJCWNoaWxkT0lEID0gbGZpcnN0X29pZChsYyk7CisgCQlSZWxh dGlvbgljaGlsZHJlbDsKKyAKKyAJCS8qIFBhcmVudCB0YWJsZSBzaG91bGQg bm90IGJlIGZvcmVpZ24gKi8KKyAJCWlmIChjaGlsZE9JRCA9PSBSZWxhdGlv bkdldFJlbGlkKG9uZXJlbCkpCisgCQkJY29udGludWU7CisgCisgCQkvKiBX ZSBhbHJlYWR5IGdvdCB0aGUgbmVlZGVkIGxvY2sgKi8KKyAJCWNoaWxkcmVs ID0gaGVhcF9vcGVuKGNoaWxkT0lELCBOb0xvY2spOworIAorIAkJLyogSWdu b3JlIGlmIHRlbXAgdGFibGUgb2YgYW5vdGhlciBiYWNrZW5kICovCisgCQlp ZiAoUkVMQVRJT05fSVNfT1RIRVJfVEVNUChjaGlsZHJlbCkpCisgCQl7Cisg CQkJLyogLi4uIGJ1dCByZWxlYXNlIHRoZSBsb2NrIG9uIGl0ICovCisgCQkJ QXNzZXJ0KGNoaWxkcmVsICE9IG9uZXJlbCk7CisgCQkJaGVhcF9jbG9zZShj aGlsZHJlbCwgQWNjZXNzU2hhcmVMb2NrKTsKKyAJCQljb250aW51ZTsKKyAJ CX0KKyAKKyAJCWlmIChjaGlsZHJlbC0+cmRfcmVsLT5yZWxraW5kID09IFJF TEtJTkRfRk9SRUlHTl9UQUJMRSkKKyAJCXsKKyAJCQlGZHdSb3V0aW5lICpm ZHdyb3V0aW5lOworIAkJCUFjcXVpcmVTYW1wbGVSb3dzRnVuYyBmdW5jID0g TlVMTDsKKyAJCQlCbG9ja051bWJlciByZWxwYWdlcyA9IDA7CisgCQkJYm9v bAkJb2sgPSBmYWxzZTsKKyAKKyAJCQkvKiBGb3VuZCBpdCAqLworIAkJCXJl c3VsdCA9IHRydWU7CisgCisgCQkJLyogQ2hlY2sgd2hldGhlciB0aGUgRkRX IHN1cHBvcnRzIGFuYWx5c2lzICovCisgCQkJZmR3cm91dGluZSA9IEdldEZk d1JvdXRpbmVGb3JSZWxhdGlvbihjaGlsZHJlbCwgZmFsc2UpOworIAorIAkJ CWlmIChmZHdyb3V0aW5lLT5BbmFseXplRm9yZWlnblRhYmxlICE9IE5VTEwp CisgCQkJCW9rID0gZmR3cm91dGluZS0+QW5hbHl6ZUZvcmVpZ25UYWJsZShj aGlsZHJlbCwKKyAJCQkJCQkJCQkJCQkJICZmdW5jLAorIAkJCQkJCQkJCQkJ CQkgJnJlbHBhZ2VzKTsKKyAKKyAJCQlpZiAoIW9rKQorIAkJCQkqaXNBbmFs eXphYmxlID0gZmFsc2U7CisgCQl9CisgCisgCQloZWFwX2Nsb3NlKGNoaWxk cmVsLCBBY2Nlc3NTaGFyZUxvY2spOworIAl9CisgCisgCXJldHVybiByZXN1 bHQ7CisgfQorIAorIC8qCiAgICogQ29tcHV0ZSBzdGF0aXN0aWNzIGFib3V0 IGluZGV4ZXMgb2YgYSByZWxhdGlvbgogICAqLwogIHN0YXRpYyB2b2lkCioq KioqKioqKioqKioqKgoqKiogMTQ1MSwxNDU2ICoqKiogYWNxdWlyZV9pbmhl cml0ZWRfc2FtcGxlX3Jvd3MoUmVsYXRpb24gb25lcmVsLCBpbnQgZWxldmVs LAotLS0gMTU1MCwxNTU2IC0tLS0KICB7CiAgCUxpc3QJICAgKnRhYmxlT0lE czsKICAJUmVsYXRpb24gICAqcmVsczsKKyAJQWNxdWlyZVNhbXBsZVJvd3NG dW5jICphY3F1aXJlZnVuYzsKICAJZG91YmxlCSAgICpyZWxibG9ja3M7CiAg CWRvdWJsZQkJdG90YWxibG9ja3M7CiAgCWludAkJCW51bXJvd3MsCioqKioq KioqKioqKioqKgoqKiogMTQ4NSwxNDkwICoqKiogYWNxdWlyZV9pbmhlcml0 ZWRfc2FtcGxlX3Jvd3MoUmVsYXRpb24gb25lcmVsLCBpbnQgZWxldmVsLAot LS0gMTU4NSwxNTkyIC0tLS0KICAJICogQmxvY2tOdW1iZXIsIHNvIHdlIHVz ZSBkb3VibGUgYXJpdGhtZXRpYy4KICAJICovCiAgCXJlbHMgPSAoUmVsYXRp b24gKikgcGFsbG9jKGxpc3RfbGVuZ3RoKHRhYmxlT0lEcykgKiBzaXplb2Yo UmVsYXRpb24pKTsKKyAJYWNxdWlyZWZ1bmMgPSAoQWNxdWlyZVNhbXBsZVJv d3NGdW5jICopIHBhbGxvYyhsaXN0X2xlbmd0aCh0YWJsZU9JRHMpCisgCQkJ CQkJCQkJCQkqIHNpemVvZihBY3F1aXJlU2FtcGxlUm93c0Z1bmMpKTsKICAJ cmVsYmxvY2tzID0gKGRvdWJsZSAqKSBwYWxsb2MobGlzdF9sZW5ndGgodGFi bGVPSURzKSAqIHNpemVvZihkb3VibGUpKTsKICAJdG90YWxibG9ja3MgPSAw OwogIAlucmVscyA9IDA7CioqKioqKioqKioqKioqKgoqKiogMTUwNiwxNTEy ICoqKiogYWNxdWlyZV9pbmhlcml0ZWRfc2FtcGxlX3Jvd3MoUmVsYXRpb24g b25lcmVsLCBpbnQgZWxldmVsLAogIAkJfQogIAogIAkJcmVsc1tucmVsc10g PSBjaGlsZHJlbDsKISAJCXJlbGJsb2Nrc1tucmVsc10gPSAoZG91YmxlKSBS ZWxhdGlvbkdldE51bWJlck9mQmxvY2tzKGNoaWxkcmVsKTsKICAJCXRvdGFs YmxvY2tzICs9IHJlbGJsb2Nrc1tucmVsc107CiAgCQlucmVscysrOwogIAl9 Ci0tLSAxNjA4LDE2MzggLS0tLQogIAkJfQogIAogIAkJcmVsc1tucmVsc10g PSBjaGlsZHJlbDsKISAKISAJCWlmIChjaGlsZHJlbC0+cmRfcmVsLT5yZWxr aW5kICE9IFJFTEtJTkRfRk9SRUlHTl9UQUJMRSkKISAJCXsKISAJCQlhY3F1 aXJlZnVuY1tucmVsc10gPSBhY3F1aXJlX3NhbXBsZV9yb3dzOwohIAkJCXJl bGJsb2Nrc1tucmVsc10gPSAoZG91YmxlKSBSZWxhdGlvbkdldE51bWJlck9m QmxvY2tzKGNoaWxkcmVsKTsKISAJCX0KISAJCWVsc2UKISAJCXsKISAJCQlG ZHdSb3V0aW5lICpmZHdyb3V0aW5lOwohIAkJCUJsb2NrTnVtYmVyIHJlbHBh Z2VzID0gMDsKISAJCQlib29sCQlvayA9IGZhbHNlOwohIAohIAkJCWFjcXVp cmVmdW5jW25yZWxzXSA9IE5VTEw7CiEgCiEgCQkJZmR3cm91dGluZSA9IEdl dEZkd1JvdXRpbmVGb3JSZWxhdGlvbihjaGlsZHJlbCwgZmFsc2UpOwohIAkJ CUFzc2VydChmZHdyb3V0aW5lLT5BbmFseXplRm9yZWlnblRhYmxlICE9IE5V TEwpCiEgCiEgCQkJb2sgPSBmZHdyb3V0aW5lLT5BbmFseXplRm9yZWlnblRh YmxlKGNoaWxkcmVsLAohIAkJCQkJCQkJCQkJCSAmYWNxdWlyZWZ1bmNbbnJl bHNdLAohIAkJCQkJCQkJCQkJCSAmcmVscGFnZXMpOwohIAkJCUFzc2VydChv ayk7CiEgCiEgCQkJcmVsYmxvY2tzW25yZWxzXSA9IChkb3VibGUpIHJlbHBh Z2VzOwohIAkJfQohIAogIAkJdG90YWxibG9ja3MgKz0gcmVsYmxvY2tzW25y ZWxzXTsKICAJCW5yZWxzKys7CiAgCX0KKioqKioqKioqKioqKioqCioqKiAx NTI0LDE1MjkgKioqKiBhY3F1aXJlX2luaGVyaXRlZF9zYW1wbGVfcm93cyhS ZWxhdGlvbiBvbmVyZWwsIGludCBlbGV2ZWwsCi0tLSAxNjUwLDE2NTYgLS0t LQogIAl7CiAgCQlSZWxhdGlvbgljaGlsZHJlbCA9IHJlbHNbaV07CiAgCQlk b3VibGUJCWNoaWxkYmxvY2tzID0gcmVsYmxvY2tzW2ldOworIAkJQWNxdWly ZVNhbXBsZVJvd3NGdW5jIGNoaWxkYWNxdWlyZWZ1bmMgPSBhY3F1aXJlZnVu Y1tpXTsKICAKICAJCWlmIChjaGlsZGJsb2NrcyA+IDApCiAgCQl7CioqKioq KioqKioqKioqKgoqKiogMTUzOSwxNTUwICoqKiogYWNxdWlyZV9pbmhlcml0 ZWRfc2FtcGxlX3Jvd3MoUmVsYXRpb24gb25lcmVsLCBpbnQgZWxldmVsLAog IAkJCQkJCQl0ZHJvd3M7CiAgCiAgCQkJCS8qIEZldGNoIGEgcmFuZG9tIHNh bXBsZSBvZiB0aGUgY2hpbGQncyByb3dzICovCiEgCQkJCWNoaWxkcm93cyA9 IGFjcXVpcmVfc2FtcGxlX3Jvd3MoY2hpbGRyZWwsCiEgCQkJCQkJCQkJCQkJ ZWxldmVsLAohIAkJCQkJCQkJCQkJCXJvd3MgKyBudW1yb3dzLAohIAkJCQkJ CQkJCQkJCWNoaWxkdGFyZ3Jvd3MsCiEgCQkJCQkJCQkJCQkJJnRyb3dzLAoh IAkJCQkJCQkJCQkJCSZ0ZHJvd3MpOwogIAogIAkJCQkvKiBXZSBtYXkgbmVl ZCB0byBjb252ZXJ0IGZyb20gY2hpbGQncyByb3d0eXBlIHRvIHBhcmVudCdz ICovCiAgCQkJCWlmIChjaGlsZHJvd3MgPiAwICYmCi0tLSAxNjY2LDE2Nzcg LS0tLQogIAkJCQkJCQl0ZHJvd3M7CiAgCiAgCQkJCS8qIEZldGNoIGEgcmFu ZG9tIHNhbXBsZSBvZiB0aGUgY2hpbGQncyByb3dzICovCiEgCQkJCWNoaWxk cm93cyA9IGNoaWxkYWNxdWlyZWZ1bmMoY2hpbGRyZWwsCiEgCQkJCQkJCQkJ CQkgZWxldmVsLAohIAkJCQkJCQkJCQkJIHJvd3MgKyBudW1yb3dzLAohIAkJ CQkJCQkJCQkJIGNoaWxkdGFyZ3Jvd3MsCiEgCQkJCQkJCQkJCQkgJnRyb3dz LAohIAkJCQkJCQkJCQkJICZ0ZHJvd3MpOwogIAogIAkJCQkvKiBXZSBtYXkg bmVlZCB0byBjb252ZXJ0IGZyb20gY2hpbGQncyByb3d0eXBlIHRvIHBhcmVu dCdzICovCiAgCQkJCWlmIChjaGlsZHJvd3MgPiAwICYmCioqKiBhL3NyYy9i YWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCi0tLSBiL3NyYy9iYWNrZW5k L2NvbW1hbmRzL3RhYmxlY21kcy5jCioqKioqKioqKioqKioqKgoqKiogNDY1 LDQ3NCAqKioqIERlZmluZVJlbGF0aW9uKENyZWF0ZVN0bXQgKnN0bXQsIGNo YXIgcmVsa2luZCwgT2lkIG93bmVySWQpCiAgCQllcmVwb3J0KEVSUk9SLAog IAkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfVEFCTEVfREVGSU5JVElP TiksCiAgCQkJCSBlcnJtc2coIk9OIENPTU1JVCBjYW4gb25seSBiZSB1c2Vk IG9uIHRlbXBvcmFyeSB0YWJsZXMiKSkpOwohIAlpZiAoc3RtdC0+Y29uc3Ry YWludHMgIT0gTklMICYmIHJlbGtpbmQgPT0gUkVMS0lORF9GT1JFSUdOX1RB QkxFKQohIAkJZXJlcG9ydChFUlJPUiwKISAJCQkJKGVycmNvZGUoRVJSQ09E RV9XUk9OR19PQkpFQ1RfVFlQRSksCiEgCQkJCSBlcnJtc2coImNvbnN0cmFp bnRzIGFyZSBub3Qgc3VwcG9ydGVkIG9uIGZvcmVpZ24gdGFibGVzIikpKTsK ICAKICAJLyoKICAJICogTG9vayB1cCB0aGUgbmFtZXNwYWNlIGluIHdoaWNo IHdlIGFyZSBzdXBwb3NlZCB0byBjcmVhdGUgdGhlIHJlbGF0aW9uLAotLS0g NDY1LDQ4OSAtLS0tCiAgCQllcmVwb3J0KEVSUk9SLAogIAkJCQkoZXJyY29k ZShFUlJDT0RFX0lOVkFMSURfVEFCTEVfREVGSU5JVElPTiksCiAgCQkJCSBl cnJtc2coIk9OIENPTU1JVCBjYW4gb25seSBiZSB1c2VkIG9uIHRlbXBvcmFy eSB0YWJsZXMiKSkpOwohIC8qCiEgICogU2hvdWxkbid0IHRoaXMgaGF2ZSBi ZWVuIGNoZWNrZWQgaW4gcGFyc2VyPwohICAqLwohIAlpZiAocmVsa2luZCA9 PSBSRUxLSU5EX0ZPUkVJR05fVEFCTEUpCiEgCXsKISAJCUxpc3RDZWxsICAg KmxjOwohIAkJZm9yZWFjaChsYywgc3RtdC0+Y29uc3RyYWludHMpCiEgCQl7 CiEgCQkJTmV3Q29uc3RyYWludAkgICAqbmMgPSBsZmlyc3QobGMpOwohIAoh IAkJCWlmIChuYy0+Y29udHlwZSAhPSBDT05TVFJfQ0hFQ0sgJiYKISAJCQkJ bmMtPmNvbnR5cGUgIT0gQ09OU1RSX0RFRkFVTFQgJiYKISAJCQkJbmMtPmNv bnR5cGUgIT0gQ09OU1RSX05VTEwgJiYKISAJCQkJbmMtPmNvbnR5cGUgIT0g Q09OU1RSX05PVE5VTEwpCiEgCQkJCWVyZXBvcnQoRVJST1IsCiEgCQkJCQkJ KGVycmNvZGUoRVJSQ09ERV9XUk9OR19PQkpFQ1RfVFlQRSksCiEgCQkJCQkJ IGVycm1zZygib25seSBjaGVjayBjb25zdHJhaW50cyBhcmUgc3VwcG9ydGVk IG9uIGZvcmVpZ24gdGFibGVzIikpKTsKISAJCX0KISAJfQogIAogIAkvKgog IAkgKiBMb29rIHVwIHRoZSBuYW1lc3BhY2UgaW4gd2hpY2ggd2UgYXJlIHN1 cHBvc2VkIHRvIGNyZWF0ZSB0aGUgcmVsYXRpb24sCioqKioqKioqKioqKioq KgoqKiogMzA0NCwzMDUwICoqKiogQVRQcmVwQ21kKExpc3QgKip3cXVldWUs IFJlbGF0aW9uIHJlbCwgQWx0ZXJUYWJsZUNtZCAqY21kLAogIAkJCXBhc3Mg PSBBVF9QQVNTX0FERF9JTkRFWDsKICAJCQlicmVhazsKICAJCWNhc2UgQVRf QWRkQ29uc3RyYWludDoJLyogQUREIENPTlNUUkFJTlQgKi8KISAJCQlBVFNp bXBsZVBlcm1pc3Npb25zKHJlbCwgQVRUX1RBQkxFKTsKICAJCQkvKiBSZWN1 cnNpb24gb2NjdXJzIGR1cmluZyBleGVjdXRpb24gcGhhc2UgKi8KICAJCQkv KiBObyBjb21tYW5kLXNwZWNpZmljIHByZXAgbmVlZGVkIGV4Y2VwdCBzYXZp bmcgcmVjdXJzZSBmbGFnICovCiAgCQkJaWYgKHJlY3Vyc2UpCi0tLSAzMDU5 LDMwNjUgLS0tLQogIAkJCXBhc3MgPSBBVF9QQVNTX0FERF9JTkRFWDsKICAJ CQlicmVhazsKICAJCWNhc2UgQVRfQWRkQ29uc3RyYWludDoJLyogQUREIENP TlNUUkFJTlQgKi8KISAJCQlBVFNpbXBsZVBlcm1pc3Npb25zKHJlbCwgQVRU X1RBQkxFIHwgQVRUX0ZPUkVJR05fVEFCTEUpOwogIAkJCS8qIFJlY3Vyc2lv biBvY2N1cnMgZHVyaW5nIGV4ZWN1dGlvbiBwaGFzZSAqLwogIAkJCS8qIE5v IGNvbW1hbmQtc3BlY2lmaWMgcHJlcCBuZWVkZWQgZXhjZXB0IHNhdmluZyBy ZWN1cnNlIGZsYWcgKi8KICAJCQlpZiAocmVjdXJzZSkKKioqKioqKioqKioq KioqCioqKiAzMDU4LDMwNjQgKioqKiBBVFByZXBDbWQoTGlzdCAqKndxdWV1 ZSwgUmVsYXRpb24gcmVsLCBBbHRlclRhYmxlQ21kICpjbWQsCiAgCQkJcGFz cyA9IEFUX1BBU1NfQUREX0NPTlNUUjsKICAJCQlicmVhazsKICAJCWNhc2Ug QVRfRHJvcENvbnN0cmFpbnQ6CS8qIERST1AgQ09OU1RSQUlOVCAqLwohIAkJ CUFUU2ltcGxlUGVybWlzc2lvbnMocmVsLCBBVFRfVEFCTEUpOwogIAkJCS8q IFJlY3Vyc2lvbiBvY2N1cnMgZHVyaW5nIGV4ZWN1dGlvbiBwaGFzZSAqLwog IAkJCS8qIE5vIGNvbW1hbmQtc3BlY2lmaWMgcHJlcCBuZWVkZWQgZXhjZXB0 IHNhdmluZyByZWN1cnNlIGZsYWcgKi8KICAJCQlpZiAocmVjdXJzZSkKLS0t IDMwNzMsMzA3OSAtLS0tCiAgCQkJcGFzcyA9IEFUX1BBU1NfQUREX0NPTlNU UjsKICAJCQlicmVhazsKICAJCWNhc2UgQVRfRHJvcENvbnN0cmFpbnQ6CS8q IERST1AgQ09OU1RSQUlOVCAqLwohIAkJCUFUU2ltcGxlUGVybWlzc2lvbnMo cmVsLCBBVFRfVEFCTEUgfCBBVFRfRk9SRUlHTl9UQUJMRSk7CiAgCQkJLyog UmVjdXJzaW9uIG9jY3VycyBkdXJpbmcgZXhlY3V0aW9uIHBoYXNlICovCiAg CQkJLyogTm8gY29tbWFuZC1zcGVjaWZpYyBwcmVwIG5lZWRlZCBleGNlcHQg c2F2aW5nIHJlY3Vyc2UgZmxhZyAqLwogIAkJCWlmIChyZWN1cnNlKQoqKioq KioqKioqKioqKioKKioqIDMxMjYsMzEzOCAqKioqIEFUUHJlcENtZChMaXN0 ICoqd3F1ZXVlLCBSZWxhdGlvbiByZWwsIEFsdGVyVGFibGVDbWQgKmNtZCwK ICAJCQlwYXNzID0gQVRfUEFTU19NSVNDOwogIAkJCWJyZWFrOwogIAkJY2Fz ZSBBVF9BZGRJbmhlcml0OgkJLyogSU5IRVJJVCAqLwohIAkJCUFUU2ltcGxl UGVybWlzc2lvbnMocmVsLCBBVFRfVEFCTEUpOwogIAkJCS8qIFRoaXMgY29t bWFuZCBuZXZlciByZWN1cnNlcyAqLwogIAkJCUFUUHJlcEFkZEluaGVyaXQo cmVsKTsKICAJCQlwYXNzID0gQVRfUEFTU19NSVNDOwogIAkJCWJyZWFrOwog IAkJY2FzZSBBVF9BbHRlckNvbnN0cmFpbnQ6CQkvKiBBTFRFUiBDT05TVFJB SU5UICovCiEgCQkJQVRTaW1wbGVQZXJtaXNzaW9ucyhyZWwsIEFUVF9UQUJM RSk7CiAgCQkJcGFzcyA9IEFUX1BBU1NfTUlTQzsKICAJCQlicmVhazsKICAJ CWNhc2UgQVRfVmFsaWRhdGVDb25zdHJhaW50OgkJLyogVkFMSURBVEUgQ09O U1RSQUlOVCAqLwotLS0gMzE0MSwzMTUzIC0tLS0KICAJCQlwYXNzID0gQVRf UEFTU19NSVNDOwogIAkJCWJyZWFrOwogIAkJY2FzZSBBVF9BZGRJbmhlcml0 OgkJLyogSU5IRVJJVCAqLwohIAkJCUFUU2ltcGxlUGVybWlzc2lvbnMocmVs LCBBVFRfVEFCTEUgfCBBVFRfRk9SRUlHTl9UQUJMRSk7CiAgCQkJLyogVGhp cyBjb21tYW5kIG5ldmVyIHJlY3Vyc2VzICovCiAgCQkJQVRQcmVwQWRkSW5o ZXJpdChyZWwpOwogIAkJCXBhc3MgPSBBVF9QQVNTX01JU0M7CiAgCQkJYnJl YWs7CiAgCQljYXNlIEFUX0FsdGVyQ29uc3RyYWludDoJCS8qIEFMVEVSIENP TlNUUkFJTlQgKi8KISAJCQlBVFNpbXBsZVBlcm1pc3Npb25zKHJlbCwgQVRU X1RBQkxFIHwgQVRUX0ZPUkVJR05fVEFCTEUpOwogIAkJCXBhc3MgPSBBVF9Q QVNTX01JU0M7CiAgCQkJYnJlYWs7CiAgCQljYXNlIEFUX1ZhbGlkYXRlQ29u c3RyYWludDoJCS8qIFZBTElEQVRFIENPTlNUUkFJTlQgKi8KKioqKioqKioq KioqKioqCioqKiAzMTYxLDMxNjcgKioqKiBBVFByZXBDbWQoTGlzdCAqKndx dWV1ZSwgUmVsYXRpb24gcmVsLCBBbHRlclRhYmxlQ21kICpjbWQsCiAgCQlj YXNlIEFUX0VuYWJsZUFsd2F5c1J1bGU6CiAgCQljYXNlIEFUX0VuYWJsZVJl cGxpY2FSdWxlOgogIAkJY2FzZSBBVF9EaXNhYmxlUnVsZToKLSAJCWNhc2Ug QVRfRHJvcEluaGVyaXQ6CS8qIE5PIElOSEVSSVQgKi8KICAJCWNhc2UgQVRf QWRkT2Y6CQkJLyogT0YgKi8KICAJCWNhc2UgQVRfRHJvcE9mOiAvKiBOT1Qg T0YgKi8KICAJCQlBVFNpbXBsZVBlcm1pc3Npb25zKHJlbCwgQVRUX1RBQkxF KTsKLS0tIDMxNzYsMzE4MSAtLS0tCioqKioqKioqKioqKioqKgoqKiogMzE2 OSwzMTc0ICoqKiogQVRQcmVwQ21kKExpc3QgKip3cXVldWUsIFJlbGF0aW9u IHJlbCwgQWx0ZXJUYWJsZUNtZCAqY21kLAotLS0gMzE4MywzMTk0IC0tLS0K ICAJCQkvKiBObyBjb21tYW5kLXNwZWNpZmljIHByZXAgbmVlZGVkICovCiAg CQkJcGFzcyA9IEFUX1BBU1NfTUlTQzsKICAJCQlicmVhazsKKyAJCWNhc2Ug QVRfRHJvcEluaGVyaXQ6CS8qIE5PIElOSEVSSVQgKi8KKyAJCQlBVFNpbXBs ZVBlcm1pc3Npb25zKHJlbCwgQVRUX1RBQkxFIHwgQVRUX0ZPUkVJR05fVEFC TEUpOworIAkJCS8qIFRoZXNlIGNvbW1hbmRzIG5ldmVyIHJlY3Vyc2UgKi8K KyAJCQkvKiBObyBjb21tYW5kLXNwZWNpZmljIHByZXAgbmVlZGVkICovCisg CQkJcGFzcyA9IEFUX1BBU1NfTUlTQzsKKyAJCQlicmVhazsKICAJCWNhc2Ug QVRfR2VuZXJpY09wdGlvbnM6CiAgCQkJQVRTaW1wbGVQZXJtaXNzaW9ucyhy ZWwsIEFUVF9GT1JFSUdOX1RBQkxFKTsKICAJCQkvKiBObyBjb21tYW5kLXNw ZWNpZmljIHByZXAgbmVlZGVkICovCioqKioqKioqKioqKioqKgoqKiogNDQy MSw0NDI3ICoqKiogQVRFeGVjQWRkQ29sdW1uKExpc3QgKip3cXVldWUsIEFs dGVyZWRUYWJsZUluZm8gKnRhYiwgUmVsYXRpb24gcmVsLAogIAogIAkvKiBB dCB0b3AgbGV2ZWwsIHBlcm1pc3Npb24gY2hlY2sgd2FzIGRvbmUgaW4gQVRQ cmVwQ21kLCBlbHNlIGRvIGl0ICovCiAgCWlmIChyZWN1cnNpbmcpCiEgCQlB VFNpbXBsZVBlcm1pc3Npb25zKHJlbCwgQVRUX1RBQkxFKTsKICAKICAJYXR0 cmRlc2MgPSBoZWFwX29wZW4oQXR0cmlidXRlUmVsYXRpb25JZCwgUm93RXhj bHVzaXZlTG9jayk7CiAgCi0tLSA0NDQxLDQ0NDcgLS0tLQogIAogIAkvKiBB dCB0b3AgbGV2ZWwsIHBlcm1pc3Npb24gY2hlY2sgd2FzIGRvbmUgaW4gQVRQ cmVwQ21kLCBlbHNlIGRvIGl0ICovCiAgCWlmIChyZWN1cnNpbmcpCiEgCQlB VFNpbXBsZVBlcm1pc3Npb25zKHJlbCwgQVRUX1RBQkxFIHwgQVRUX0ZPUkVJ R05fVEFCTEUpOwogIAogIAlhdHRyZGVzYyA9IGhlYXBfb3BlbihBdHRyaWJ1 dGVSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKICAKKioqKioqKioq KioqKioqCioqKiA1MzE3LDUzMjMgKioqKiBBVEV4ZWNEcm9wQ29sdW1uKExp c3QgKip3cXVldWUsIFJlbGF0aW9uIHJlbCwgY29uc3QgY2hhciAqY29sTmFt ZSwKICAKICAJLyogQXQgdG9wIGxldmVsLCBwZXJtaXNzaW9uIGNoZWNrIHdh cyBkb25lIGluIEFUUHJlcENtZCwgZWxzZSBkbyBpdCAqLwogIAlpZiAocmVj dXJzaW5nKQohIAkJQVRTaW1wbGVQZXJtaXNzaW9ucyhyZWwsIEFUVF9UQUJM RSk7CiAgCiAgCS8qCiAgCSAqIGdldCB0aGUgbnVtYmVyIG9mIHRoZSBhdHRy aWJ1dGUKLS0tIDUzMzcsNTM0MyAtLS0tCiAgCiAgCS8qIEF0IHRvcCBsZXZl bCwgcGVybWlzc2lvbiBjaGVjayB3YXMgZG9uZSBpbiBBVFByZXBDbWQsIGVs c2UgZG8gaXQgKi8KICAJaWYgKHJlY3Vyc2luZykKISAJCUFUU2ltcGxlUGVy bWlzc2lvbnMocmVsLCBBVFRfVEFCTEUgfCBBVFRfRk9SRUlHTl9UQUJMRSk7 CiAgCiAgCS8qCiAgCSAqIGdldCB0aGUgbnVtYmVyIG9mIHRoZSBhdHRyaWJ1 dGUKKioqKioqKioqKioqKioqCioqKiA1NzA4LDU3MTQgKioqKiBBVEFkZENo ZWNrQ29uc3RyYWludChMaXN0ICoqd3F1ZXVlLCBBbHRlcmVkVGFibGVJbmZv ICp0YWIsIFJlbGF0aW9uIHJlbCwKICAKICAJLyogQXQgdG9wIGxldmVsLCBw ZXJtaXNzaW9uIGNoZWNrIHdhcyBkb25lIGluIEFUUHJlcENtZCwgZWxzZSBk byBpdCAqLwogIAlpZiAocmVjdXJzaW5nKQohIAkJQVRTaW1wbGVQZXJtaXNz aW9ucyhyZWwsIEFUVF9UQUJMRSk7CiAgCiAgCS8qCiAgCSAqIENhbGwgQWRk UmVsYXRpb25OZXdDb25zdHJhaW50cyB0byBkbyB0aGUgd29yaywgbWFraW5n IHN1cmUgaXQgd29ya3Mgb24KLS0tIDU3MjgsNTczNCAtLS0tCiAgCiAgCS8q IEF0IHRvcCBsZXZlbCwgcGVybWlzc2lvbiBjaGVjayB3YXMgZG9uZSBpbiBB VFByZXBDbWQsIGVsc2UgZG8gaXQgKi8KICAJaWYgKHJlY3Vyc2luZykKISAJ CUFUU2ltcGxlUGVybWlzc2lvbnMocmVsLCBBVFRfVEFCTEUgfCBBVFRfRk9S RUlHTl9UQUJMRSk7CiAgCiAgCS8qCiAgCSAqIENhbGwgQWRkUmVsYXRpb25O ZXdDb25zdHJhaW50cyB0byBkbyB0aGUgd29yaywgbWFraW5nIHN1cmUgaXQg d29ya3Mgb24KKioqKioqKioqKioqKioqCioqKiA3MTk3LDcyMDMgKioqKiBB VEV4ZWNEcm9wQ29uc3RyYWludChSZWxhdGlvbiByZWwsIGNvbnN0IGNoYXIg KmNvbnN0ck5hbWUsCiAgCiAgCS8qIEF0IHRvcCBsZXZlbCwgcGVybWlzc2lv biBjaGVjayB3YXMgZG9uZSBpbiBBVFByZXBDbWQsIGVsc2UgZG8gaXQgKi8K ICAJaWYgKHJlY3Vyc2luZykKISAJCUFUU2ltcGxlUGVybWlzc2lvbnMocmVs LCBBVFRfVEFCTEUpOwogIAogIAljb25yZWwgPSBoZWFwX29wZW4oQ29uc3Ry YWludFJlbGF0aW9uSWQsIFJvd0V4Y2x1c2l2ZUxvY2spOwogIAotLS0gNzIx Nyw3MjIzIC0tLS0KICAKICAJLyogQXQgdG9wIGxldmVsLCBwZXJtaXNzaW9u IGNoZWNrIHdhcyBkb25lIGluIEFUUHJlcENtZCwgZWxzZSBkbyBpdCAqLwog IAlpZiAocmVjdXJzaW5nKQohIAkJQVRTaW1wbGVQZXJtaXNzaW9ucyhyZWws IEFUVF9UQUJMRSB8IEFUVF9GT1JFSUdOX1RBQkxFKTsKICAKICAJY29ucmVs ID0gaGVhcF9vcGVuKENvbnN0cmFpbnRSZWxhdGlvbklkLCBSb3dFeGNsdXNp dmVMb2NrKTsKICAKKioqIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdmFjdXVt LmMKLS0tIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdmFjdXVtLmMKKioqKioq KioqKioqKioqCioqKiA5NiwxMDEgKioqKiB2YWN1dW0oVmFjdXVtU3RtdCAq dmFjc3RtdCwgT2lkIHJlbGlkLCBib29sIGRvX3RvYXN0LAotLS0gOTYsMTAy IC0tLS0KICAJICAgQnVmZmVyQWNjZXNzU3RyYXRlZ3kgYnN0cmF0ZWd5LCBi b29sIGZvcl93cmFwYXJvdW5kLCBib29sIGlzVG9wTGV2ZWwpCiAgewogIAlj b25zdCBjaGFyICpzdG10dHlwZTsKKyAJVmFjdXVtTW9kZQl2YWNtb2RlOwog IAl2b2xhdGlsZSBib29sIGluX291dGVyX3hhY3QsCiAgCQkJCXVzZV9vd25f eGFjdHM7CiAgCUxpc3QJICAgKnJlbGF0aW9uczsKKioqKioqKioqKioqKioq CioqKiAxNDQsMTQ5ICoqKiogdmFjdXVtKFZhY3V1bVN0bXQgKnZhY3N0bXQs IE9pZCByZWxpZCwgYm9vbCBkb190b2FzdCwKLS0tIDE0NSwxNjQgLS0tLQog IAkJCQkJCQkJCQlBTExPQ1NFVF9ERUZBVUxUX01BWFNJWkUpOwogIAogIAkv KgorIAkgKiBJZGVudGlmeSB2YWN1dW0gbW9kZS4gIElmIHJlbGlkIGlzIG5v dCBJbnZhbGlkT2lkLCB0aGUgY2FsbGVyIHNob3VsZCBiZQorIAkgKiBhbiBh dXRvdmFjdXVtIHdvcmtlci4gIFNlZSB0aGUgYWJvdmUgY29tbWVudHMuCisg CSAqLworIAlpZiAocmVsaWQgIT0gSW52YWxpZE9pZCkKKyAJCXZhY21vZGUg PSBWQUNfTU9ERV9BVVRPVkFDVVVNOworIAllbHNlCisgCXsKKyAJCWlmICgh dmFjc3RtdC0+cmVsYXRpb24pCisgCQkJdmFjbW9kZSA9IFZBQ19NT0RFX0FM TDsKKyAJCWVsc2UKKyAJCQl2YWNtb2RlID0gVkFDX01PREVfU0lOR0xFOwor IAl9CisgCisgCS8qCiAgCSAqIElmIGNhbGxlciBkaWRuJ3QgZ2l2ZSB1cyBh IGJ1ZmZlciBzdHJhdGVneSBvYmplY3QsIG1ha2Ugb25lIGluIHRoZQogIAkg KiBjcm9zcy10cmFuc2FjdGlvbiBtZW1vcnkgY29udGV4dC4KICAJICovCioq KioqKioqKioqKioqKgoqKiogMjQ2LDI1MiAqKioqIHZhY3V1bShWYWN1dW1T dG10ICp2YWNzdG10LCBPaWQgcmVsaWQsIGJvb2wgZG9fdG9hc3QsCiAgCQkJ CQlQdXNoQWN0aXZlU25hcHNob3QoR2V0VHJhbnNhY3Rpb25TbmFwc2hvdCgp KTsKICAJCQkJfQogIAohIAkJCQlhbmFseXplX3JlbChyZWxpZCwgdmFjc3Rt dCwgdmFjX3N0cmF0ZWd5KTsKICAKICAJCQkJaWYgKHVzZV9vd25feGFjdHMp CiAgCQkJCXsKLS0tIDI2MSwyNjcgLS0tLQogIAkJCQkJUHVzaEFjdGl2ZVNu YXBzaG90KEdldFRyYW5zYWN0aW9uU25hcHNob3QoKSk7CiAgCQkJCX0KICAK ISAJCQkJYW5hbHl6ZV9yZWwocmVsaWQsIHZhY3N0bXQsIHZhY21vZGUsIHZh Y19zdHJhdGVneSk7CiAgCiAgCQkJCWlmICh1c2Vfb3duX3hhY3RzKQogIAkJ CQl7CioqKiBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wcmVwL3ByZXB1bmlv bi5jCi0tLSBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wcmVwL3ByZXB1bmlv bi5jCioqKioqKioqKioqKioqKgoqKiogMTMzNywxMzQ3ICoqKiogZXhwYW5k X2luaGVyaXRlZF9ydGVudHJ5KFBsYW5uZXJJbmZvICpyb290LCBSYW5nZVRi bEVudHJ5ICpydGUsIEluZGV4IHJ0aSkKICAJCS8qCiAgCQkgKiBCdWlsZCBh biBSVEUgZm9yIHRoZSBjaGlsZCwgYW5kIGF0dGFjaCB0byBxdWVyeSdzIHJh bmdldGFibGUgbGlzdC4KICAJCSAqIFdlIGNvcHkgbW9zdCBmaWVsZHMgb2Yg dGhlIHBhcmVudCdzIFJURSwgYnV0IHJlcGxhY2UgcmVsYXRpb24gT0lELAoh IAkJICogYW5kIHNldCBpbmggPSBmYWxzZS4gIEFsc28sIHNldCByZXF1aXJl ZFBlcm1zIHRvIHplcm8gc2luY2UgYWxsCiEgCQkgKiByZXF1aXJlZCBwZXJt aXNzaW9ucyBjaGVja3MgYXJlIGRvbmUgb24gdGhlIG9yaWdpbmFsIFJURS4K ICAJCSAqLwogIAkJY2hpbGRydGUgPSBjb3B5T2JqZWN0KHJ0ZSk7CiAgCQlj aGlsZHJ0ZS0+cmVsaWQgPSBjaGlsZE9JRDsKICAJCWNoaWxkcnRlLT5pbmgg PSBmYWxzZTsKICAJCWNoaWxkcnRlLT5yZXF1aXJlZFBlcm1zID0gMDsKICAJ CXBhcnNlLT5ydGFibGUgPSBsYXBwZW5kKHBhcnNlLT5ydGFibGUsIGNoaWxk cnRlKTsKLS0tIDEzMzcsMTM0OCAtLS0tCiAgCQkvKgogIAkJICogQnVpbGQg YW4gUlRFIGZvciB0aGUgY2hpbGQsIGFuZCBhdHRhY2ggdG8gcXVlcnkncyBy YW5nZXRhYmxlIGxpc3QuCiAgCQkgKiBXZSBjb3B5IG1vc3QgZmllbGRzIG9m IHRoZSBwYXJlbnQncyBSVEUsIGJ1dCByZXBsYWNlIHJlbGF0aW9uIE9JRCwK ISAJCSAqIHJlbGtpbmQgYW5kIHNldCBpbmggPSBmYWxzZS4gIEFsc28sIHNl dCByZXF1aXJlZFBlcm1zIHRvIHplcm8gc2luY2UKISAJCSAqIGFsbCByZXF1 aXJlZCBwZXJtaXNzaW9ucyBjaGVja3MgYXJlIGRvbmUgb24gdGhlIG9yaWdp bmFsIFJURS4KICAJCSAqLwogIAkJY2hpbGRydGUgPSBjb3B5T2JqZWN0KHJ0 ZSk7CiAgCQljaGlsZHJ0ZS0+cmVsaWQgPSBjaGlsZE9JRDsKKyAJCWNoaWxk cnRlLT5yZWxraW5kID0gbmV3cmVsYXRpb24tPnJkX3JlbC0+cmVsa2luZDsK ICAJCWNoaWxkcnRlLT5pbmggPSBmYWxzZTsKICAJCWNoaWxkcnRlLT5yZXF1 aXJlZFBlcm1zID0gMDsKICAJCXBhcnNlLT5ydGFibGUgPSBsYXBwZW5kKHBh cnNlLT5ydGFibGUsIGNoaWxkcnRlKTsKKioqIGEvc3JjL2JhY2tlbmQvcGFy c2VyL2dyYW0ueQotLS0gYi9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55Cioq KioqKioqKioqKioqKgoqKiogNDIwNiw0MjM3ICoqKiogQWx0ZXJGb3JlaWdu U2VydmVyU3RtdDogQUxURVIgU0VSVkVSIG5hbWUgZm9yZWlnbl9zZXJ2ZXJf dmVyc2lvbiBhbHRlcl9nZW5lcmljX28KICBDcmVhdGVGb3JlaWduVGFibGVT dG10OgogIAkJQ1JFQVRFIEZPUkVJR04gVEFCTEUgcXVhbGlmaWVkX25hbWUK ICAJCQknKCcgT3B0VGFibGVFbGVtZW50TGlzdCAnKScKISAJCQlTRVJWRVIg bmFtZSBjcmVhdGVfZ2VuZXJpY19vcHRpb25zCiAgCQkJCXsKICAJCQkJCUNy ZWF0ZUZvcmVpZ25UYWJsZVN0bXQgKm4gPSBtYWtlTm9kZShDcmVhdGVGb3Jl aWduVGFibGVTdG10KTsKICAJCQkJCSQ0LT5yZWxwZXJzaXN0ZW5jZSA9IFJF TFBFUlNJU1RFTkNFX1BFUk1BTkVOVDsKICAJCQkJCW4tPmJhc2UucmVsYXRp b24gPSAkNDsKICAJCQkJCW4tPmJhc2UudGFibGVFbHRzID0gJDY7CiEgCQkJ CQluLT5iYXNlLmluaFJlbGF0aW9ucyA9IE5JTDsKICAJCQkJCW4tPmJhc2Uu aWZfbm90X2V4aXN0cyA9IGZhbHNlOwogIAkJCQkJLyogRkRXLXNwZWNpZmlj IGRhdGEgKi8KISAJCQkJCW4tPnNlcnZlcm5hbWUgPSAkOTsKISAJCQkJCW4t Pm9wdGlvbnMgPSAkMTA7CiAgCQkJCQkkJCA9IChOb2RlICopIG47CiAgCQkJ CX0KICAJCXwgQ1JFQVRFIEZPUkVJR04gVEFCTEUgSUZfUCBOT1QgRVhJU1RT IHF1YWxpZmllZF9uYW1lCiAgCQkJJygnIE9wdFRhYmxlRWxlbWVudExpc3Qg JyknCiEgCQkJU0VSVkVSIG5hbWUgY3JlYXRlX2dlbmVyaWNfb3B0aW9ucwog IAkJCQl7CiAgCQkJCQlDcmVhdGVGb3JlaWduVGFibGVTdG10ICpuID0gbWFr ZU5vZGUoQ3JlYXRlRm9yZWlnblRhYmxlU3RtdCk7CiAgCQkJCQkkNy0+cmVs cGVyc2lzdGVuY2UgPSBSRUxQRVJTSVNURU5DRV9QRVJNQU5FTlQ7CiAgCQkJ CQluLT5iYXNlLnJlbGF0aW9uID0gJDc7CiAgCQkJCQluLT5iYXNlLnRhYmxl RWx0cyA9ICQ5OwohIAkJCQkJbi0+YmFzZS5pbmhSZWxhdGlvbnMgPSBOSUw7 CiAgCQkJCQluLT5iYXNlLmlmX25vdF9leGlzdHMgPSB0cnVlOwogIAkJCQkJ LyogRkRXLXNwZWNpZmljIGRhdGEgKi8KISAJCQkJCW4tPnNlcnZlcm5hbWUg PSAkMTI7CiEgCQkJCQluLT5vcHRpb25zID0gJDEzOwogIAkJCQkJJCQgPSAo Tm9kZSAqKSBuOwogIAkJCQl9CiAgCQk7Ci0tLSA0MjA2LDQyMzcgLS0tLQog IENyZWF0ZUZvcmVpZ25UYWJsZVN0bXQ6CiAgCQlDUkVBVEUgRk9SRUlHTiBU QUJMRSBxdWFsaWZpZWRfbmFtZQogIAkJCScoJyBPcHRUYWJsZUVsZW1lbnRM aXN0ICcpJwohIAkJCU9wdEluaGVyaXQgU0VSVkVSIG5hbWUgY3JlYXRlX2dl bmVyaWNfb3B0aW9ucwogIAkJCQl7CiAgCQkJCQlDcmVhdGVGb3JlaWduVGFi bGVTdG10ICpuID0gbWFrZU5vZGUoQ3JlYXRlRm9yZWlnblRhYmxlU3RtdCk7 CiAgCQkJCQkkNC0+cmVscGVyc2lzdGVuY2UgPSBSRUxQRVJTSVNURU5DRV9Q RVJNQU5FTlQ7CiAgCQkJCQluLT5iYXNlLnJlbGF0aW9uID0gJDQ7CiAgCQkJ CQluLT5iYXNlLnRhYmxlRWx0cyA9ICQ2OwohIAkJCQkJbi0+YmFzZS5pbmhS ZWxhdGlvbnMgPSAkODsKICAJCQkJCW4tPmJhc2UuaWZfbm90X2V4aXN0cyA9 IGZhbHNlOwogIAkJCQkJLyogRkRXLXNwZWNpZmljIGRhdGEgKi8KISAJCQkJ CW4tPnNlcnZlcm5hbWUgPSAkMTA7CiEgCQkJCQluLT5vcHRpb25zID0gJDEx OwogIAkJCQkJJCQgPSAoTm9kZSAqKSBuOwogIAkJCQl9CiAgCQl8IENSRUFU RSBGT1JFSUdOIFRBQkxFIElGX1AgTk9UIEVYSVNUUyBxdWFsaWZpZWRfbmFt ZQogIAkJCScoJyBPcHRUYWJsZUVsZW1lbnRMaXN0ICcpJwohIAkJCU9wdElu aGVyaXQgU0VSVkVSIG5hbWUgY3JlYXRlX2dlbmVyaWNfb3B0aW9ucwogIAkJ CQl7CiAgCQkJCQlDcmVhdGVGb3JlaWduVGFibGVTdG10ICpuID0gbWFrZU5v ZGUoQ3JlYXRlRm9yZWlnblRhYmxlU3RtdCk7CiAgCQkJCQkkNy0+cmVscGVy c2lzdGVuY2UgPSBSRUxQRVJTSVNURU5DRV9QRVJNQU5FTlQ7CiAgCQkJCQlu LT5iYXNlLnJlbGF0aW9uID0gJDc7CiAgCQkJCQluLT5iYXNlLnRhYmxlRWx0 cyA9ICQ5OwohIAkJCQkJbi0+YmFzZS5pbmhSZWxhdGlvbnMgPSAkMTE7CiAg CQkJCQluLT5iYXNlLmlmX25vdF9leGlzdHMgPSB0cnVlOwogIAkJCQkJLyog RkRXLXNwZWNpZmljIGRhdGEgKi8KISAJCQkJCW4tPnNlcnZlcm5hbWUgPSAk MTM7CiEgCQkJCQluLT5vcHRpb25zID0gJDE0OwogIAkJCQkJJCQgPSAoTm9k ZSAqKSBuOwogIAkJCQl9CiAgCQk7CioqKiBhL3NyYy9iYWNrZW5kL3BhcnNl ci9wYXJzZV91dGlsY21kLmMKLS0tIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3Bh cnNlX3V0aWxjbWQuYwoqKioqKioqKioqKioqKioKKioqIDUxNSw1MjYgKioq KiB0cmFuc2Zvcm1Db2x1bW5EZWZpbml0aW9uKENyZWF0ZVN0bXRDb250ZXh0 ICpjeHQsIENvbHVtbkRlZiAqY29sdW1uKQogIAkJCQlicmVhazsKICAKICAJ CQljYXNlIENPTlNUUl9DSEVDSzoKLSAJCQkJaWYgKGN4dC0+aXNmb3JlaWdu KQotIAkJCQkJZXJlcG9ydChFUlJPUiwKLSAJCQkJCQkJKGVycmNvZGUoRVJS Q09ERV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAotIAkJCQkJZXJybXNnKCJj b25zdHJhaW50cyBhcmUgbm90IHN1cHBvcnRlZCBvbiBmb3JlaWduIHRhYmxl cyIpLAotIAkJCQkJCQkgcGFyc2VyX2VycnBvc2l0aW9uKGN4dC0+cHN0YXRl LAotIAkJCQkJCQkJCQkJCWNvbnN0cmFpbnQtPmxvY2F0aW9uKSkpOwogIAkJ CQljeHQtPmNrY29uc3RyYWludHMgPSBsYXBwZW5kKGN4dC0+Y2tjb25zdHJh aW50cywgY29uc3RyYWludCk7CiAgCQkJCWJyZWFrOwogIAotLS0gNTE1LDUy MCAtLS0tCioqKioqKioqKioqKioqKgoqKiogNjA1LDYxNCAqKioqIHRyYW5z Zm9ybUNvbHVtbkRlZmluaXRpb24oQ3JlYXRlU3RtdENvbnRleHQgKmN4dCwg Q29sdW1uRGVmICpjb2x1bW4pCiAgc3RhdGljIHZvaWQKICB0cmFuc2Zvcm1U YWJsZUNvbnN0cmFpbnQoQ3JlYXRlU3RtdENvbnRleHQgKmN4dCwgQ29uc3Ry YWludCAqY29uc3RyYWludCkKICB7CiEgCWlmIChjeHQtPmlzZm9yZWlnbikK ICAJCWVyZXBvcnQoRVJST1IsCiAgCQkJCShlcnJjb2RlKEVSUkNPREVfRkVB VFVSRV9OT1RfU1VQUE9SVEVEKSwKISAJCQkJIGVycm1zZygiY29uc3RyYWlu dHMgYXJlIG5vdCBzdXBwb3J0ZWQgb24gZm9yZWlnbiB0YWJsZXMiKSwKICAJ CQkJIHBhcnNlcl9lcnJwb3NpdGlvbihjeHQtPnBzdGF0ZSwKICAJCQkJCQkJ CQljb25zdHJhaW50LT5sb2NhdGlvbikpKTsKICAKLS0tIDU5OSw2MDggLS0t LQogIHN0YXRpYyB2b2lkCiAgdHJhbnNmb3JtVGFibGVDb25zdHJhaW50KENy ZWF0ZVN0bXRDb250ZXh0ICpjeHQsIENvbnN0cmFpbnQgKmNvbnN0cmFpbnQp CiAgewohIAlpZiAoY3h0LT5pc2ZvcmVpZ24gJiYgY29uc3RyYWludC0+Y29u dHlwZSAhPSBDT05TVFJfQ0hFQ0spCiAgCQllcmVwb3J0KEVSUk9SLAogIAkJ CQkoZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCiEg CQkJCSBlcnJtc2coIm9ubHkgY2hlY2sgY29uc3RyYWludHMgYXJlIHN1cHBv cnRlZCBvbiBmb3JlaWduIHRhYmxlcyIpLAogIAkJCQkgcGFyc2VyX2VycnBv c2l0aW9uKGN4dC0+cHN0YXRlLAogIAkJCQkJCQkJCWNvbnN0cmFpbnQtPmxv Y2F0aW9uKSkpOwogIAoqKiogYS9zcmMvaW5jbHVkZS9jb21tYW5kcy92YWN1 dW0uaAotLS0gYi9zcmMvaW5jbHVkZS9jb21tYW5kcy92YWN1dW0uaAoqKioq KioqKioqKioqKioKKioqIDEzOCwxNDMgKioqKiBleHRlcm4gaW50CXZhY3V1 bV9mcmVlemVfbWluX2FnZTsKLS0tIDEzOCwxNTIgLS0tLQogIGV4dGVybiBp bnQJdmFjdXVtX2ZyZWV6ZV90YWJsZV9hZ2U7CiAgCiAgCisgLyogUG9zc2li bGUgbW9kZXMgZm9yIHZhY3V1bSgpICovCisgdHlwZWRlZiBlbnVtCisgewor IAlWQUNfTU9ERV9BTEwsCQkJCS8qIFZhY3V1bS9hbmFseXplIGFsbCByZWxh dGlvbnMgKi8KKyAJVkFDX01PREVfU0lOR0xFLAkJCS8qIFZhY3V1bS9hbmFs eXplIGEgc3BlY2lmaWMgcmVsYXRpb24gKi8KKyAJVkFDX01PREVfQVVUT1ZB Q1VVTQkJCS8qIEF1dG92YWN1dW0gd29ya2VyICovCisgfSBWYWN1dW1Nb2Rl OworIAorIAogIC8qIGluIGNvbW1hbmRzL3ZhY3V1bS5jICovCiAgZXh0ZXJu IHZvaWQgdmFjdXVtKFZhY3V1bVN0bXQgKnZhY3N0bXQsIE9pZCByZWxpZCwg Ym9vbCBkb190b2FzdCwKICAJICAgQnVmZmVyQWNjZXNzU3RyYXRlZ3kgYnN0 cmF0ZWd5LCBib29sIGZvcl93cmFwYXJvdW5kLCBib29sIGlzVG9wTGV2ZWwp OwoqKioqKioqKioqKioqKioKKioqIDE3MCwxNzYgKioqKiBleHRlcm4gdm9p ZCBsYXp5X3ZhY3V1bV9yZWwoUmVsYXRpb24gb25lcmVsLCBWYWN1dW1TdG10 ICp2YWNzdG10LAogIAkJCQlCdWZmZXJBY2Nlc3NTdHJhdGVneSBic3RyYXRl Z3kpOwogIAogIC8qIGluIGNvbW1hbmRzL2FuYWx5emUuYyAqLwohIGV4dGVy biB2b2lkIGFuYWx5emVfcmVsKE9pZCByZWxpZCwgVmFjdXVtU3RtdCAqdmFj c3RtdCwKICAJCQlCdWZmZXJBY2Nlc3NTdHJhdGVneSBic3RyYXRlZ3kpOwog IGV4dGVybiBib29sIHN0ZF90eXBhbmFseXplKFZhY0F0dHJTdGF0cyAqc3Rh dHMpOwogIGV4dGVybiBkb3VibGUgYW5sX3JhbmRvbV9mcmFjdCh2b2lkKTsK LS0tIDE3OSwxODUgLS0tLQogIAkJCQlCdWZmZXJBY2Nlc3NTdHJhdGVneSBi c3RyYXRlZ3kpOwogIAogIC8qIGluIGNvbW1hbmRzL2FuYWx5emUuYyAqLwoh IGV4dGVybiB2b2lkIGFuYWx5emVfcmVsKE9pZCByZWxpZCwgVmFjdXVtU3Rt dCAqdmFjc3RtdCwgVmFjdXVtTW9kZSB2YWNtb2RlLAogIAkJCUJ1ZmZlckFj Y2Vzc1N0cmF0ZWd5IGJzdHJhdGVneSk7CiAgZXh0ZXJuIGJvb2wgc3RkX3R5 cGFuYWx5emUoVmFjQXR0clN0YXRzICpzdGF0cyk7CiAgZXh0ZXJuIGRvdWJs ZSBhbmxfcmFuZG9tX2ZyYWN0KHZvaWQpOwoqKiogYS9zcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL2ZvcmVpZ25fZGF0YS5vdXQKLS0tIGIvc3JjL3Rlc3Qv cmVncmVzcy9leHBlY3RlZC9mb3JlaWduX2RhdGEub3V0CioqKioqKioqKioq KioqKgoqKiogNzUwLDc2NSAqKioqIENSRUFURSBUQUJMRSB1c2VfZnQxX2Nv bHVtbl90eXBlICh4IGZ0MSk7CiAgQUxURVIgRk9SRUlHTiBUQUJMRSBmdDEg QUxURVIgQ09MVU1OIGM4IFNFVCBEQVRBIFRZUEUgaW50ZWdlcjsJLS0gRVJS T1IKICBFUlJPUjogIGNhbm5vdCBhbHRlciBmb3JlaWduIHRhYmxlICJmdDEi IGJlY2F1c2UgY29sdW1uICJ1c2VfZnQxX2NvbHVtbl90eXBlLngiIHVzZXMg aXRzIHJvdyB0eXBlCiAgRFJPUCBUQUJMRSB1c2VfZnQxX2NvbHVtbl90eXBl OwohIEFMVEVSIEZPUkVJR04gVEFCTEUgZnQxIEFERCBDT05TVFJBSU5UIGZ0 MV9jOV9jaGVjayBDSEVDSyAoYzkgPCAwKTsgLS0gRVJST1IKISBFUlJPUjog IGNvbnN0cmFpbnRzIGFyZSBub3Qgc3VwcG9ydGVkIG9uIGZvcmVpZ24gdGFi bGVzCiEgTElORSAxOiBBTFRFUiBGT1JFSUdOIFRBQkxFIGZ0MSBBREQgQ09O U1RSQUlOVCBmdDFfYzlfY2hlY2sgQ0hFQ0sgKGMuLi4KISAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBeCiAgQUxURVIgRk9SRUlHTiBU QUJMRSBmdDEgRFJPUCBDT05TVFJBSU5UIG5vX2NvbnN0OyAgICAgICAgICAg ICAgIC0tIEVSUk9SCiEgRVJST1I6ICAiZnQxIiBpcyBub3QgYSB0YWJsZQog IEFMVEVSIEZPUkVJR04gVEFCTEUgZnQxIERST1AgQ09OU1RSQUlOVCBJRiBF WElTVFMgbm9fY29uc3Q7CiEgRVJST1I6ICAiZnQxIiBpcyBub3QgYSB0YWJs ZQohIEFMVEVSIEZPUkVJR04gVEFCTEUgZnQxIERST1AgQ09OU1RSQUlOVCBm dDFfYzFfY2hlY2s7CiEgRVJST1I6ICAiZnQxIiBpcyBub3QgYSB0YWJsZQog IEFMVEVSIEZPUkVJR04gVEFCTEUgZnQxIFNFVCBXSVRIIE9JRFM7ICAgICAg ICAgICAgICAgICAgICAgICAgICAtLSBFUlJPUgogIEVSUk9SOiAgImZ0MSIg aXMgbm90IGEgdGFibGUKICBBTFRFUiBGT1JFSUdOIFRBQkxFIGZ0MSBPV05F UiBUTyByZWdyZXNzX3Rlc3Rfcm9sZTsKLS0tIDc1MCw3NjEgLS0tLQogIEFM VEVSIEZPUkVJR04gVEFCTEUgZnQxIEFMVEVSIENPTFVNTiBjOCBTRVQgREFU QSBUWVBFIGludGVnZXI7CS0tIEVSUk9SCiAgRVJST1I6ICBjYW5ub3QgYWx0 ZXIgZm9yZWlnbiB0YWJsZSAiZnQxIiBiZWNhdXNlIGNvbHVtbiAidXNlX2Z0 MV9jb2x1bW5fdHlwZS54IiB1c2VzIGl0cyByb3cgdHlwZQogIERST1AgVEFC TEUgdXNlX2Z0MV9jb2x1bW5fdHlwZTsKISBBTFRFUiBGT1JFSUdOIFRBQkxF IGZ0MSBBREQgQ09OU1RSQUlOVCBmdDFfYzlfY2hlY2sgQ0hFQ0sgKGM5IDwg MCk7CiAgQUxURVIgRk9SRUlHTiBUQUJMRSBmdDEgRFJPUCBDT05TVFJBSU5U IG5vX2NvbnN0OyAgICAgICAgICAgICAgIC0tIEVSUk9SCiEgRVJST1I6ICBj b25zdHJhaW50ICJub19jb25zdCIgb2YgcmVsYXRpb24gImZ0MSIgZG9lcyBu b3QgZXhpc3QKICBBTFRFUiBGT1JFSUdOIFRBQkxFIGZ0MSBEUk9QIENPTlNU UkFJTlQgSUYgRVhJU1RTIG5vX2NvbnN0OwohIE5PVElDRTogIGNvbnN0cmFp bnQgIm5vX2NvbnN0IiBvZiByZWxhdGlvbiAiZnQxIiBkb2VzIG5vdCBleGlz dCwgc2tpcHBpbmcKISBBTFRFUiBGT1JFSUdOIFRBQkxFIGZ0MSBEUk9QIENP TlNUUkFJTlQgZnQxX2M5X2NoZWNrOwogIEFMVEVSIEZPUkVJR04gVEFCTEUg ZnQxIFNFVCBXSVRIIE9JRFM7ICAgICAgICAgICAgICAgICAgICAgICAgICAt LSBFUlJPUgogIEVSUk9SOiAgImZ0MSIgaXMgbm90IGEgdGFibGUKICBBTFRF UiBGT1JFSUdOIFRBQkxFIGZ0MSBPV05FUiBUTyByZWdyZXNzX3Rlc3Rfcm9s ZTsKKioqIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZm9yZWlnbl9kYXRhLnNx bAotLS0gYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9mb3JlaWduX2RhdGEuc3Fs CioqKioqKioqKioqKioqKgoqKiogMzE0LDMyMyAqKioqIEFMVEVSIEZPUkVJ R04gVEFCTEUgZnQxIEFMVEVSIENPTFVNTiBjOCBTRVQgU1RBVElTVElDUyAt MTsKICBDUkVBVEUgVEFCTEUgdXNlX2Z0MV9jb2x1bW5fdHlwZSAoeCBmdDEp OwogIEFMVEVSIEZPUkVJR04gVEFCTEUgZnQxIEFMVEVSIENPTFVNTiBjOCBT RVQgREFUQSBUWVBFIGludGVnZXI7CS0tIEVSUk9SCiAgRFJPUCBUQUJMRSB1 c2VfZnQxX2NvbHVtbl90eXBlOwohIEFMVEVSIEZPUkVJR04gVEFCTEUgZnQx IEFERCBDT05TVFJBSU5UIGZ0MV9jOV9jaGVjayBDSEVDSyAoYzkgPCAwKTsg LS0gRVJST1IKICBBTFRFUiBGT1JFSUdOIFRBQkxFIGZ0MSBEUk9QIENPTlNU UkFJTlQgbm9fY29uc3Q7ICAgICAgICAgICAgICAgLS0gRVJST1IKICBBTFRF UiBGT1JFSUdOIFRBQkxFIGZ0MSBEUk9QIENPTlNUUkFJTlQgSUYgRVhJU1RT IG5vX2NvbnN0OwohIEFMVEVSIEZPUkVJR04gVEFCTEUgZnQxIERST1AgQ09O U1RSQUlOVCBmdDFfYzFfY2hlY2s7CiAgQUxURVIgRk9SRUlHTiBUQUJMRSBm dDEgU0VUIFdJVEggT0lEUzsgICAgICAgICAgICAgICAgICAgICAgICAgIC0t IEVSUk9SCiAgQUxURVIgRk9SRUlHTiBUQUJMRSBmdDEgT1dORVIgVE8gcmVn cmVzc190ZXN0X3JvbGU7CiAgQUxURVIgRk9SRUlHTiBUQUJMRSBmdDEgT1BU SU9OUyAoRFJPUCBkZWxpbWl0ZXIsIFNFVCBxdW90ZSAnficsIEFERCBlc2Nh cGUgJ0AnKTsKLS0tIDMxNCwzMjMgLS0tLQogIENSRUFURSBUQUJMRSB1c2Vf ZnQxX2NvbHVtbl90eXBlICh4IGZ0MSk7CiAgQUxURVIgRk9SRUlHTiBUQUJM RSBmdDEgQUxURVIgQ09MVU1OIGM4IFNFVCBEQVRBIFRZUEUgaW50ZWdlcjsJ LS0gRVJST1IKICBEUk9QIFRBQkxFIHVzZV9mdDFfY29sdW1uX3R5cGU7CiEg QUxURVIgRk9SRUlHTiBUQUJMRSBmdDEgQUREIENPTlNUUkFJTlQgZnQxX2M5 X2NoZWNrIENIRUNLIChjOSA8IDApOwogIEFMVEVSIEZPUkVJR04gVEFCTEUg ZnQxIERST1AgQ09OU1RSQUlOVCBub19jb25zdDsgICAgICAgICAgICAgICAt LSBFUlJPUgogIEFMVEVSIEZPUkVJR04gVEFCTEUgZnQxIERST1AgQ09OU1RS QUlOVCBJRiBFWElTVFMgbm9fY29uc3Q7CiEgQUxURVIgRk9SRUlHTiBUQUJM RSBmdDEgRFJPUCBDT05TVFJBSU5UIGZ0MV9jOV9jaGVjazsKICBBTFRFUiBG T1JFSUdOIFRBQkxFIGZ0MSBTRVQgV0lUSCBPSURTOyAgICAgICAgICAgICAg ICAgICAgICAgICAgLS0gRVJST1IKICBBTFRFUiBGT1JFSUdOIFRBQkxFIGZ0 MSBPV05FUiBUTyByZWdyZXNzX3Rlc3Rfcm9sZTsKICBBTFRFUiBGT1JFSUdO IFRBQkxFIGZ0MSBPUFRJT05TIChEUk9QIGRlbGltaXRlciwgU0VUIHF1b3Rl ICd+JywgQUREIGVzY2FwZSAnQCcpOwo= --------------000407030907050608090201 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 --------------000407030907050608090201--