From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 2054 invoked by alias); 2 Feb 2002 00:30:49 -0000 Mailing-List: contact sourcenav-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: sourcenav-owner@sources.redhat.com Received: (qmail 1960 invoked from network); 2 Feb 2002 00:30:24 -0000 Received: from unknown (HELO cygnus.com) (205.180.230.5) by sources.redhat.com with SMTP; 2 Feb 2002 00:30:24 -0000 Received: from localhost.localdomain (cse.sfbay.redhat.com [205.180.230.236]) by runyon.cygnus.com (8.8.7-cygnus/8.8.7) with SMTP id QAA29840; Fri, 1 Feb 2002 16:30:16 -0800 (PST) Date: Fri, 01 Feb 2002 17:57:00 -0000 From: Ian Roxborough To: insight@sources.redhat.com Cc: sourcenav@sources.redhat.com Subject: [Patch] Fix Source-Navigator X-Ref on Tcl8.3. Message-Id: <20020201162055.7b46ecb8.irox@redhat.com> Organization: Red Hat Inc. X-Mailer: Sylpheed version 0.6.5 (GTK+ 1.2.10; i686-pc-linux-gnu) Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="Multipart_Fri__1_Feb_2002_16:20:55_-0800_0823e280" X-SW-Source: 2002-q1/txt/msg00053.txt.bz2 This is a multi-part message in MIME format. --Multipart_Fri__1_Feb_2002_16:20:55_-0800_0823e280 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Content-length: 558 Hi, this is a heads up for a large libgui patch I'm going to checkin soon. This doesn't actually touch any code that Insight uses, but if you see any strange build problems with libgui, it's probably my fault. ChangeLog: * src/tkCanvEdge.c (CreateEdge, EdgeCoords, ConfigureEdge): Objectify functions to use Tcl_Obj instead of char**. * src/tkGraphCanvas.c: Cut and paste parts of the new Tcl8.3 tagsearch code in to replace old. Rewrite much of the code to use the new tagsearch features. I've sent the patch as an attachment on this email. Ian. --Multipart_Fri__1_Feb_2002_16:20:55_-0800_0823e280 Content-Type: application/octet-stream; name="libgui.patch" Content-Disposition: attachment; filename="libgui.patch" Content-Transfer-Encoding: base64 Content-length: 58040 SW5kZXg6IHRrQ2FudkVkZ2UuYw0KPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0K UkNTIGZpbGU6IC9jdnMvY3ZzZmlsZXMvZGV2by9saWJndWkvc3JjL3RrQ2Fu dkVkZ2UuYyx2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMw0KZGlmZiAtdSAt MiAtcjEuMyB0a0NhbnZFZGdlLmMNCi0tLSB0a0NhbnZFZGdlLmMJMTk5OC8w OC8xNCAwMToxNjo1NwkxLjMNCisrKyB0a0NhbnZFZGdlLmMJMjAwMi8wMi8w MSAyMzo1ODoyMw0KQEAgLTE0MCwxMCArMTQwLDEwIEBADQogc3RhdGljIGlu dAkJQ29uZmlndXJlRWRnZSBfQU5TSV9BUkdTXygoVGNsX0ludGVycCAqaW50 ZXJwLA0KIAkJCSAgICBUa19DYW52YXMgY2FudmFzLCBUa19JdGVtICppdGVt UHRyLCBpbnQgYXJnYywNCi0JCQkgICAgY2hhciAqKmFyZ3YsIGludCBmbGFn cykpOw0KKwkJCSAgICBUY2xfT2JqICoqT2JqQXJndiwgaW50IGZsYWdzKSk7 DQogc3RhdGljIGludAkJQ29uZmlndXJlQXJyb3dzIF9BTlNJX0FSR1NfKChU a19DYW52YXMgY2FudmFzLA0KIAkJCSAgICBFZGdlSXRlbSAqZWRnZVB0cikp Ow0KIHN0YXRpYyBpbnQJCUNyZWF0ZUVkZ2UgX0FOU0lfQVJHU18oKFRjbF9J bnRlcnAgKmludGVycCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg VGtfQ2FudmFzIGNhbnZhcywgc3RydWN0IFRrX0l0ZW0gKml0ZW1QdHIsIA0K LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYXJnYywgY2hhciAq KmFyZ3YpKTsNCisJCQkgICAgaW50IGFyZ2MsIFRjbF9PYmogKipPYmpBcmd2 KSk7DQogc3RhdGljIHZvaWQJCURlbGV0ZUVkZ2UgX0FOU0lfQVJHU18oKFRr X0NhbnZhcyBjYW52YXMsDQogCQkJICAgIFRrX0l0ZW0gKml0ZW1QdHIsIERp c3BsYXkgKmRpc3BsYXkpKTsNCkBAIC0xNTMsNSArMTUzLDUgQEANCiBzdGF0 aWMgaW50CQlFZGdlQ29vcmRzIF9BTlNJX0FSR1NfKChUY2xfSW50ZXJwICpp bnRlcnAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRrX0NhbnZh cyBjYW52YXMsIFRrX0l0ZW0gKml0ZW1QdHIsDQotICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGludCBhcmdjLCBjaGFyICoqYXJndikpOw0KKwkJCSAg ICBpbnQgYXJnYywgVGNsX09iaiAqKk9iakFyZ3YpKTsNCiBzdGF0aWMgaW50 CQlFZGdlVG9BcmVhIF9BTlNJX0FSR1NfKChUa19DYW52YXMgY2FudmFzLA0K IAkJCSAgICBUa19JdGVtICppdGVtUHRyLCBkb3VibGUgKnJlY3RQdHIpKTsN CkBAIC0yNTAsNSArMjUwLDUgQEANCiAgICAgRGVsZXRlRWRnZSwJCQkJLyog ZGVsZXRlUHJvYyAqLw0KICAgICBEaXNwbGF5RWRnZSwJCQkvKiBkaXNwbGF5 UHJvYyAqLw0KLSAgICAwLAkJCQkJLyogYWx3YXlzUmVkcmF3ICovDQorICAg IFRLX0NPTkZJR19PQkpTLAkJCS8qIGZsYWdzICovDQogICAgIEVkZ2VUb1Bv aW50LAkJCS8qIHBvaW50UHJvYyAqLw0KICAgICBFZGdlVG9BcmVhLAkJCQkv KiBhcmVhUHJvYyAqLw0KQEAgLTMwMSw1ICszMDEsNSBAQA0KIA0KIHN0YXRp YyBpbnQNCi1DcmVhdGVFZGdlKGludGVycCwgY2FudmFzLCBpdGVtUHRyLCBh cmdjLCBhcmd2KQ0KK0NyZWF0ZUVkZ2UoaW50ZXJwLCBjYW52YXMsIGl0ZW1Q dHIsIGFyZ2MsIE9iakFyZ3YpDQogICAgICBUY2xfSW50ZXJwICppbnRlcnA7 CQkvKiBJbnRlcnByZXRlciBmb3IgZXJyb3IgcmVwb3J0aW5nLiAqLw0KICAg ICAgVGtfQ2FudmFzIGNhbnZhczsJICAgICAgICAgICAgICAgIC8qIENhbnZh cyB0byBob2xkIG5ldyBpdGVtLiAqLw0KQEAgLTMwNyw2ICszMDcsNyBAQA0K IAkJCQkJICogaGFzIGJlZW4gaW5pdGlhbGl6ZWQgYnkgY2FsbGVyLiAqLw0K ICAgICAgaW50IGFyZ2M7CQkJCS8qIE51bWJlciBvZiBhcmd1bWVudHMgaW4g YXJndi4gKi8NCi0gICAgIGNoYXIgKiphcmd2OwkJCS8qIEFyZ3VtZW50cyBk ZXNjcmliaW5nIGVkZ2UuICovDQorICAgICBUY2xfT2JqICoqT2JqQXJndjsJ CQkvKiBBcmd1bWVudHMgZGVzY3JpYmluZyBlZGdlLiAqLw0KIHsNCisgIGNo YXIgKiphcmd2Ow0KICAgRWRnZUl0ZW0gKmVkZ2VQdHIgPSAoRWRnZUl0ZW0g KikgaXRlbVB0cjsNCiAgIGludCBpOw0KQEAgLTM3MSw2ICszNzIsMTUgQEAN CiAgICAqIHN0YXJ0IHdpdGggYSBkaWdpdCBvciBhIG1pbnVzIHNpZ24gZm9s bG93ZWQgYnkgYSBkaWdpdC4NCiAgICAqLw0KLSAgDQorDQorICAvKiBUT0RP OiB0aWR5IHVwIGZvciBsb29wLCB3ZSBzaG91bGRuJ3QgbmVlZCB0byBkbw0K KyAgICogY2thbGxvYyBhbmQgVGNsX0dldFN0cmluZywgc2hvdWxkIHdlPw0K KyAgICovDQorDQorICAvKg0KKyAgICogRklYTUU6IG1lbW9yeSBsZWFrIGhl cmUuIA0KKyAgICovICANCisgIGFyZ3YgPSAoY2hhcioqKSBja2FsbG9jKGFy Z2MgKiBzaXplb2YoY2hhcioqKSk7DQogICBmb3IgKGkgPSA0OyBpIDwgKGFy Z2MtMSk7IGkrPTIpIHsNCisgICAgYXJndltpXT1UY2xfR2V0U3RyaW5nKE9i akFyZ3ZbaV0pOw0KICAgICBpZiAoKCFpc2RpZ2l0KFVDSEFSKGFyZ3ZbaV1b MF0pKSkgJiYNCiAJKChhcmd2W2ldWzBdICE9ICctJykgfHwgKCFpc2RpZ2l0 KFVDSEFSKGFyZ3ZbaV1bMV0pKSkpKSB7DQpAQCAtMzc4LDEwICszODgsMTEg QEANCiAgICAgfQ0KICAgfQ0KLSAgaWYgKEVkZ2VDb29yZHMoaW50ZXJwLCBj YW52YXMsIGl0ZW1QdHIsIGksIGFyZ3YpICE9IFRDTF9PSykgew0KKw0KKyAg aWYgKEVkZ2VDb29yZHMoaW50ZXJwLCBjYW52YXMsIGl0ZW1QdHIsIGksIE9i akFyZ3YpICE9IFRDTF9PSykgew0KICAgICBnb3RvIGVycm9yOw0KICAgfQ0K LSAgaWYgKENvbmZpZ3VyZUVkZ2UoaW50ZXJwLCBjYW52YXMsIGl0ZW1QdHIs IGFyZ2MtaSwgYXJnditpLCAwKSA9PSBUQ0xfT0spIHsNCisgIGlmIChDb25m aWd1cmVFZGdlKGludGVycCwgY2FudmFzLCBpdGVtUHRyLCBhcmdjLWksIE9i akFyZ3YraSwgMCkgPT0gVENMX09LKSB7DQogICAgIHJldHVybiBUQ0xfT0s7 DQotICB9DQorICB9IA0KICAgDQogIGVycm9yOg0KQEAgLTQwOSw1ICs0MjAs NSBAQA0KIA0KIHN0YXRpYyBpbnQNCi1FZGdlQ29vcmRzKGludGVycCwgY2Fu dmFzLCBpdGVtUHRyLCBhcmdjLCBhcmd2KQ0KK0VkZ2VDb29yZHMoaW50ZXJw LCBjYW52YXMsIGl0ZW1QdHIsIGFyZ2MsIE9iakFyZ3YpDQogICAgICBUY2xf SW50ZXJwICppbnRlcnA7CQkvKiBVc2VkIGZvciBlcnJvciByZXBvcnRpbmcu ICovDQogICAgICBUa19DYW52YXMgY2FudmFzOwkgICAgICAgICAgICAgICAg LyogQ2FudmFzIGNvbnRhaW5pbmcgaXRlbS4gKi8NCkBAIC00MTYsNSArNDI3 LDUgQEANCiAgICAgIGludCBhcmdjOwkJCQkvKiBOdW1iZXIgb2YgY29vcmRp bmF0ZXMgc3VwcGxpZWQgaW4NCiAJCQkJCSAqIGFyZ3YuICovDQotICAgICBj aGFyICoqYXJndjsJCQkvKiBBcnJheSBvZiBjb29yZGluYXRlczogeDEsIHkx LA0KKyAgICAgVGNsX09iaiAqKk9iakFyZ3Y7CQkJLyogQXJyYXkgb2YgY29v cmRpbmF0ZXM6IHgxLCB5MSwNCiAJCQkJCSAqIHgyLCB5MiwgLi4uICovDQog ew0KQEAgLTQ2NCw1ICs0NzUsNSBAQA0KICAgICB9DQogICAgIGZvciAoaSA9 IGFyZ2MtMTsgaSA+PSAwOyBpLS0pIHsNCi0gICAgICBpZiAoVGtfQ2FudmFz R2V0Q29vcmQoaW50ZXJwLCBjYW52YXMsIGFyZ3ZbaV0sICZlZGdlUHRyLT5j b29yZFB0cltpXSkNCisgICAgICBpZiAoVGtfQ2FudmFzR2V0Q29vcmQoaW50 ZXJwLCBjYW52YXMsIFRjbF9HZXRTdHJpbmcoT2JqQXJndltpXSksICZlZGdl UHRyLT5jb29yZFB0cltpXSkNCiAJICAhPSBUQ0xfT0spIHsNCiAJcmV0dXJu IFRDTF9FUlJPUjsNCkBAIC01MTEsMTAgKzUyMiwxMCBAQA0KIA0KIHN0YXRp YyBpbnQNCi1Db25maWd1cmVFZGdlKGludGVycCwgY2FudmFzLCBpdGVtUHRy LCBhcmdjLCBhcmd2LCBmbGFncykNCitDb25maWd1cmVFZGdlKGludGVycCwg Y2FudmFzLCBpdGVtUHRyLCBhcmdjLCBPYmpBcmd2LCBmbGFncykNCiAgICAg IFRjbF9JbnRlcnAgKmludGVycDsJLyogVXNlZCBmb3IgZXJyb3IgcmVwb3J0 aW5nLiAqLw0KICAgICAgVGtfQ2FudmFzIGNhbnZhczsJICAgICAgICAvKiBD YW52YXMgY29udGFpbmluZyBpdGVtUHRyLiAqLw0KICAgICAgVGtfSXRlbSAq aXRlbVB0cjsJCS8qIEVkZ2UgaXRlbSB0byByZWNvbmZpZ3VyZS4gKi8NCiAg ICAgIGludCBhcmdjOwkJCS8qIE51bWJlciBvZiBlbGVtZW50cyBpbiBhcmd2 LiAgKi8NCi0gICAgIGNoYXIgKiphcmd2OwkJLyogQXJndW1lbnRzIGRlc2Ny aWJpbmcgdGhpbmdzIHRvIGNvbmZpZ3VyZS4gKi8NCisgICAgIFRjbF9PYmog KipPYmpBcmd2OwkJLyogQXJndW1lbnRzIGRlc2NyaWJpbmcgdGhpbmdzIHRv IGNvbmZpZ3VyZS4gKi8NCiAgICAgIGludCBmbGFnczsJCQkvKiBGbGFncyB0 byBwYXNzIHRvIFRrX0NvbmZpZ3VyZVdpZGdldC4gKi8NCiB7DQpAQCAtNTI4 LDggKzUzOSwxNCBAQA0KICAgVGtfV2luZG93IHRrd2luOw0KICAgVGtfM0RC b3JkZXIgYmdCb3JkZXI7DQorICBjaGFyICoqYXJndjsNCisgIGludCBsb29w Y291bnQ7DQogDQogICB0a3dpbiA9IFRrX0NhbnZhc1Rrd2luKGNhbnZhcyk7 DQogICBiZ0JvcmRlciA9ICgoVGtDYW52YXMgKikgY2FudmFzKS0+YmdCb3Jk ZXI7DQogDQorICBhcmd2ID0gKGNoYXIqKikgY2thbGxvYyhhcmdjICogc2l6 ZW9mKGNoYXIqKikpOw0KKyAgZm9yIChsb29wY291bnQgPSAwIDsgbG9vcGNv dW50IDwgYXJnYyA7IGxvb3Bjb3VudCsrKSB7DQorICAgICAgYXJndltsb29w Y291bnRdID0gVGNsX0dldFN0cmluZyggT2JqQXJndltsb29wY291bnRdICk7 DQorICB9DQogICBpZiAoVGtfQ29uZmlndXJlV2lkZ2V0KGludGVycCwgdGt3 aW4sDQogCQkJIGNvbmZpZ1NwZWNzLCBhcmdjLCBhcmd2LA0KSW5kZXg6IHRr R3JhcGhDYW52YXMuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZp bGU6IC9jdnMvY3ZzZmlsZXMvZGV2by9saWJndWkvc3JjL3RrR3JhcGhDYW52 YXMuYyx2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNA0KZGlmZiAtdSAtMiAt cjEuNCB0a0dyYXBoQ2FudmFzLmMNCi0tLSB0a0dyYXBoQ2FudmFzLmMJMTk5 OS8wMy8wNSAxOTowNTo1NwkxLjQNCisrKyB0a0dyYXBoQ2FudmFzLmMJMjAw Mi8wMi8wMSAyMzo1ODoyNw0KQEAgLTcsNSArNywzNSBAQA0KIGV4dGVybiBU a19JdGVtVHlwZSB0a0VkZ2VUeXBlOw0KIA0KKy8qDQorICogVG8gc3VwcG9y dCBUY2wvVGs4LjMgY29ycmVjdGx5IHdlIG11c3Qgc3VwcG9ydCB0aGUgbmV3 IHR5cGUgb2YNCisgKiBUYWdTZWFyY2guDQorICovDQorDQorI2lmbmRlZiBV U0VfT0xEX1RBR19TRUFSQ0gNCisgICNpZiAoVENMX01BSk9SX1ZFUlNJT04g PT0gOCkgJiYgKFRDTF9NSU5PUl9WRVJTSU9OIDwgMykNCisgICAgI2RlZmlu ZSBVU0VfT0xEX1RBR19TRUFSQ0ggMQ0KKyAgI2VuZGlmDQorI2VuZGlmDQor DQorI3VuZGVmIFVTRV9PTERfVEFHX1NFQVJDSA0KKw0KKyNpZm5kZWYgVVNF X09MRF9UQUdfU0VBUkNIDQorLyoNCisgKiBVaWRzIGZvciBvcGVyYW5kcyBp biBjb21waWxlZCBhZHZhbmNlZCB0YWcgc2VhcmNoIGV4cHJlc3Npb25zDQor ICogSW5pdGlhbGl6YXRpb24gaXMgZG9uZSBieSBJbml0Q2FudmFzKCkNCisg Ki8NCitzdGF0aWMgVGtfVWlkIGFsbFVpZCA9IE5VTEw7DQorc3RhdGljIFRr X1VpZCBjdXJyZW50VWlkID0gTlVMTDsNCitzdGF0aWMgVGtfVWlkIGFuZFVp ZCA9IE5VTEw7DQorc3RhdGljIFRrX1VpZCBvclVpZCA9IE5VTEw7DQorc3Rh dGljIFRrX1VpZCB4b3JVaWQgPSBOVUxMOw0KK3N0YXRpYyBUa19VaWQgcGFy ZW5VaWQgPSBOVUxMOw0KK3N0YXRpYyBUa19VaWQgbmVncGFyZW5VaWQgPSBO VUxMOw0KK3N0YXRpYyBUa19VaWQgZW5kcGFyZW5VaWQgPSBOVUxMOw0KK3N0 YXRpYyBUa19VaWQgdGFndmFsVWlkID0gTlVMTDsNCitzdGF0aWMgVGtfVWlk IG5lZ3RhZ3ZhbFVpZCA9IE5VTEw7DQorI2Vsc2UgIC8qIFVTRV9PTERfVEFH X1NFQVJDSCAqLw0KIHN0YXRpYyBUa19VaWQgYWxsVWlkID0gTlVMTDsNCisj ZW5kaWYgLyogVVNFX09MRF9UQUdfU0VBUkNIICovDQogDQogdHlwZWRlZiBz dHJ1Y3QgTGF5b3V0X0dyYXBoIExheW91dF9HcmFwaDsNCkBAIC01NSw4ICs4 NSwxMCBAQA0KIH07DQogDQorDQogLyoNCiAgKiBTZWUgdGtDYW52YXMuaCBm b3Iga2V5IGRhdGEgc3RydWN0dXJlcyB1c2VkIHRvIGltcGxlbWVudCBjYW52 YXNlcy4NCiAgKi8NCiANCisjaWZkZWYgVVNFX09MRF9UQUdfU0VBUkNIDQog LyoNCiAgKiBUaGUgc3RydWN0dXJlIGRlZmluZWQgYmVsb3cgaXMgdXNlZCB0 byBrZWVwIHRyYWNrIG9mIGEgdGFnIHNlYXJjaA0KQEAgLTc3LDcgKzEwOSw2 NyBAQA0KIH0gVGFnU2VhcmNoOw0KIA0KKyNlbHNlIC8qIFVTRV9PTERfVEFH X1NFQVJDSCAqLw0KKy8qDQorICogVGhlIHN0cnVjdHVyZSBkZWZpbmVkIGJl bG93IGlzIHVzZWQgdG8ga2VlcCB0cmFjayBvZiBhIHRhZyBzZWFyY2gNCisg KiBpbiBwcm9ncmVzcy4gIE5vIGZpZWxkIHNob3VsZCBiZSBhY2Nlc3NlZCBi eSBhbnlvbmUgb3RoZXIgdGhhbg0KKyAqIFRhZ1NlYXJjaFNjYW4sIFRhZ1Nl YXJjaEZpcnN0LCBUYWdTZWFyY2hOZXh0LA0KKyAqIFRhZ1NlYXJjaFNjYW5F eHByLCBUYWdTZWFyY2hFdmFsRXhwciwgDQorICogVGFnU2VhcmNoRXhwcklu aXQsIFRhZ1NlYXJjaEV4cHJEZXN0cm95LA0KKyAqIFRhZ1NlYXJjaERlc3Ry b3kuDQorICogKA0KKyAqICAgTm90IHF1aXRlIGFjY3VyYXRlOiB0aGUgVGFn U2VhcmNoIHN0cnVjdHVyZSBpcyBhbHNvIGFjY2Vzc2VkIGZyb206DQorICog ICAgQ2FudmFzV2lkZ2V0Q21kLCBGaW5kSXRlbXMsIFJlbGlua0l0ZW1zDQor ICogICBUaGUgb25seSBpbnN0YW5jZXMgb2YgdGhlIHN0cnVjdHVyZSBhcmUg b3duZWQgYnk6DQorICogICAgQ2FudmFzV2lkZ2V0Q21kDQorICogICBDYW52 YXNXaWRnZXRDbWQgaXMgdGhlIG9ubHkgZnVuY3Rpb24gdGhhdCBjYWxsczoN CisgKiAgICBGaW5kSXRlbXMsIFJlbGlua0l0ZW1zDQorICogICBDYW52YXNX aWRnZXRDbWQsIEZpbmRJdGVtcywgUmVsaW5rSXRlbXMsIGFyZSB0aGUgb25s eSBmdW5jdGlvbnMgdGhhdCBjYWxsDQorICogICAgVGFnU2VhcmNoKg0KKyAq ICkNCisgKi8NCisNCit0eXBlZGVmIHN0cnVjdCBUYWdTZWFyY2ggew0KKyAg ICBUa0NhbnZhcyAqY2FudmFzUHRyOwkvKiBDYW52YXMgd2lkZ2V0IGJlaW5n IHNlYXJjaGVkLiAqLw0KKyAgICBUa19JdGVtICpjdXJyZW50UHRyOwkvKiBQ b2ludGVyIHRvIGxhc3QgaXRlbSByZXR1cm5lZC4gKi8NCisgICAgVGtfSXRl bSAqbGFzdFB0cjsJCS8qIFRoZSBpdGVtIHJpZ2h0IGJlZm9yZSB0aGUgY3Vy cmVudFB0cg0KKwkJCQkgKiBpcyB0cmFja2VkIHNvIGlmIHRoZSBjdXJyZW50 UHRyIGlzDQorCQkJCSAqIGRlbGV0ZWQgd2UgZG9uJ3QgaGF2ZSB0byBzdGFy dCBmcm9tIHRoZQ0KKwkJCQkgKiBiZWdpbm5pbmcuICovDQorICAgIGludCBz ZWFyY2hPdmVyOwkJLyogTm9uLXplcm8gbWVhbnMgTmV4dEl0ZW0gc2hvdWxk IGFsd2F5cw0KKwkJCQkgKiByZXR1cm4gTlVMTC4gKi8NCisgICAgaW50IHR5 cGU7CQkJLyogc2VhcmNoIHR5cGUgKi8NCisgICAgaW50IGlkOwkJCS8qIGl0 ZW0gaWQgZm9yIHNlYXJjaGVzIGJ5IGlkICovDQorDQorICAgIGNoYXIgKnN0 cmluZzsJCS8qIHRhZyBleHByZXNzaW9uIHN0cmluZyAqLw0KKyAgICBpbnQg c3RyaW5nSW5kZXg7CQkvKiBjdXJyZW50IHBvc2l0aW9uIGluIHN0cmluZyBz Y2FuICovDQorICAgIGludCBzdHJpbmdMZW5ndGg7CQkvKiBsZW5ndGggb2Yg dGFnIGV4cHJlc3Npb24gc3RyaW5nICovDQorDQorICAgIGNoYXIgKnJld3Jp dGVidWZmZXI7CS8qIHRhZyBzdHJpbmcgKGFmdGVyIHJlbW92aW5nIGVzY2Fw ZXMpICovDQorICAgIHVuc2lnbmVkIGludCByZXdyaXRlYnVmZmVyQWxsb2Nh dGVkOwkvKiBhdmFpbGFibGUgc3BhY2UgZm9yIHJld3JpdGVzICovDQorDQor ICAgIFRhZ1NlYXJjaEV4cHIgKmV4cHI7CS8qIGNvbXBpbGVkIHRhZyBleHBy ZXNzaW9uICovDQorfSBUYWdTZWFyY2g7DQorI2VuZGlmIC8qIFVTRV9PTERf VEFHX1NFQVJDSCAqLw0KKw0KKyNpZmRlZiBVU0VfT0xEX1RBR19TRUFSQ0gN CiBzdGF0aWMgVGtfSXRlbSAqICAgICAgICBOZXh0SXRlbSBfQU5TSV9BUkdT XygoVGFnU2VhcmNoICpzZWFyY2hQdHIpKTsNCiBzdGF0aWMgVGtfSXRlbSAq ICAgICAgICBTdGFydFRhZ1NlYXJjaCBfQU5TSV9BUkdTXygoVGtDYW52YXMg KmNhbnZhc1B0ciwNCiAJCQkgICAgY2hhciAqdGFnLCBUYWdTZWFyY2ggKnNl YXJjaFB0cikpOw0KKyNlbHNlIC8qIFVTRV9PTERfVEFHX1NFQVJDSCAqLw0K K3N0YXRpYyB2b2lkIAkJVGFnU2VhcmNoRXhwckluaXQgX0FOU0lfQVJHU18g KCgNCisJCQkgICAgVGFnU2VhcmNoRXhwciAqKmV4cHJQdHJQdHIpKTsNCitz dGF0aWMgdm9pZAkJVGFnU2VhcmNoRXhwckRlc3Ryb3kgX0FOU0lfQVJHU18o KFRhZ1NlYXJjaEV4cHIgKmV4cHIpKTsNCitzdGF0aWMgdm9pZAkJVGFnU2Vh cmNoRGVzdHJveSBfQU5TSV9BUkdTXygoVGFnU2VhcmNoICpzZWFyY2hQdHIp KTsNCitzdGF0aWMgaW50CQlUYWdTZWFyY2hTY2FuIF9BTlNJX0FSR1NfKChU a0NhbnZhcyAqY2FudmFzUHRyLA0KKwkJCSAgICBUY2xfT2JqICp0YWdPYmos IFRhZ1NlYXJjaCAqKnNlYXJjaFB0clB0cikpOw0KK3N0YXRpYyBpbnQJCVRh Z1NlYXJjaFNjYW5FeHByIF9BTlNJX0FSR1NfKChUY2xfSW50ZXJwICppbnRl cnAsDQorCQkJICAgIFRhZ1NlYXJjaCAqc2VhcmNoUHRyLCBUYWdTZWFyY2hF eHByICpleHByKSk7DQorc3RhdGljIGludAkJVGFnU2VhcmNoRXZhbEV4cHIg X0FOU0lfQVJHU18oKFRhZ1NlYXJjaEV4cHIgKmV4cHIsDQorCQkJICAgIFRr X0l0ZW0gKml0ZW1QdHIpKTsNCitzdGF0aWMgVGtfSXRlbSAqCVRhZ1NlYXJj aEZpcnN0IF9BTlNJX0FSR1NfKChUYWdTZWFyY2ggKnNlYXJjaFB0cikpOw0K K3N0YXRpYyBUa19JdGVtICoJVGFnU2VhcmNoTmV4dCBfQU5TSV9BUkdTXygo VGFnU2VhcmNoICpzZWFyY2hQdHIpKTsNCisjZW5kaWYgLyogVVNFX09MRF9U QUdfU0VBUkNIICovDQorDQorDQogc3RhdGljIFRjbF9IYXNoVGFibGUgKiAg Z3JhcGhfdGFibGUgX0FOU0lfQVJHU18oKFRjbF9JbnRlcnAgKmludGVycCkp Ow0KIA0KQEAgLTE4NCw0ICsyNzYsNSBAQA0KICAgICBjaGFyIHk0W1RDTF9E T1VCTEVfU1BBQ0VdOw0KICAgICBjaGFyKiBhcmd2WzhdOw0KKyAgICBUY2xf T2JqKiBhcmd2T2JqWzhdOyBpbnQgbG9vcGNvdW50Ow0KICAgICBMYXlvdXRf R3JhcGggKmdyYXBoPUdldEdyYXBoTGF5b3V0SUkoY2FudmFzUHRyLCBpbnRl cnApOw0KIA0KQEAgLTIzMiw4ICszMjUsMTIgQEANCiAJCSAgfQ0KIAl9DQor DQogICAgIFRrX0NhbnZhc0V2ZW50dWFsbHlSZWRyYXcoKFRrX0NhbnZhcykg Y2FudmFzUHRyLCBpUHRyLT54MSwgaVB0ci0+eTEsIGlQdHItPngyLCBpUHRy LT55Mik7DQorICAgIGZvciAobG9vcGNvdW50ID0gMCA7IGxvb3Bjb3VudCA8 IDggOyBsb29wY291bnQrKykgew0KKyAgICAgICBhcmd2T2JqW2xvb3Bjb3Vu dF0gPSBUY2xfTmV3U3RyaW5nT2JqKGFyZ3ZbbG9vcGNvdW50XSwgLTEpOw0K KyAgICB9DQogICAgICh2b2lkKSgqaVB0ci0+dHlwZVB0ci0+Y29vcmRQcm9j KShpbnRlcnAsIChUa19DYW52YXMpIGNhbnZhc1B0ciwgaVB0ciwNCiAJCQkJ ICAgICAgLyogYXJnYy0zLCBhcmd2KzMpOyAwOG5vdjk1IHdtdCAqLw0KLQkJ CQkgICAgICBhcmdjLCBhcmd2KTsNCisJCQkJICAgICAgYXJnYywgYXJndk9i aik7DQogICAgIFRrX0NhbnZhc0V2ZW50dWFsbHlSZWRyYXcoKFRrX0NhbnZh cykgY2FudmFzUHRyLCBpUHRyLT54MSwgaVB0ci0+eTEsIGlQdHItPngyLCBp UHRyLT55Mik7ICAgDQogICAgIHJldHVybiBUQ0xfT0s7DQpAQCAtMzM4LDUg KzQzNSw1IEBADQogICAgIFRjbF9IYXNoRW50cnkgKmVudHJ5Ow0KICAgICAN Ci0gICAgZW50cnkgPSBUY2xfRmluZEhhc2hFbnRyeShncmFwaF90YWJsZShp bnRlcnApLCAoY2hhciAqKWNhbnZDbWQtPmNsaWVudERhdGEpOw0KKyAgICBl bnRyeSA9IFRjbF9GaW5kSGFzaEVudHJ5KGdyYXBoX3RhYmxlKGludGVycCks IChjaGFyICopY2FudkNtZC0+b2JqQ2xpZW50RGF0YSk7DQogICAgIGlmIChl bnRyeSkNCiAJcmV0dXJuIChMYXlvdXRfR3JhcGggKilUY2xfR2V0SGFzaFZh bHVlKGVudHJ5KTsNCkBAIC0zNzIsNiArNDY5LDggQEANCiAJaWYgKGNyZWF0 ZWNhbnZhc2dyYXBoKGludGVycCwgY2FudkNtZCwgZ3JhcGgpICE9IFRDTF9P SykNCiAJICAgIHJldHVybiBUQ0xfRVJST1I7DQorCS8qCW5ld2l0ZW0gPSBU Y2xfQ3JlYXRlSGFzaEVudHJ5KGdyYXBoX3RhYmxlKGludGVycCksIA0KKwkJ KGNoYXIgKikoY2FudkNtZC0+b2JqQ2xpZW50RGF0YSksICZuZXcpOyovDQog CW5ld2l0ZW0gPSBUY2xfQ3JlYXRlSGFzaEVudHJ5KGdyYXBoX3RhYmxlKGlu dGVycCksIA0KLQkJCQkgICAgICAoY2hhciAqKShjYW52Q21kLT5jbGllbnRE YXRhKSwgJm5ldyk7DQorCQkJCSAgICAgIChjaGFyICopKGNhbnZDbWQtPm9i akNsaWVudERhdGEpLCAmbmV3KTsNCiAJVGNsX1NldEhhc2hWYWx1ZShuZXdp dGVtLCAoQ2xpZW50RGF0YSkgKmdyYXBoKTsNCiAgICAgfQ0KQEAgLTQwMiw1 ICs1MDEsNSBAQA0KICAgICBUY2xfQ21kSW5mbyBjYW52Q21kOw0KICAgICBz aXplX3QgbGVuZ3RoOw0KLSAgICBpbnQgYywgaTsNCisgICAgaW50IGMsIGks IHJlc3VsdDsNCiAgICAgTGF5b3V0X0dyYXBoICpncmFwaDsNCiAgICAgVGtD YW52YXMgKmNhbnZhc1B0cjsNCkBAIC00MTksNiArNTE4LDYgQEANCiAJcmV0 dXJuIFRDTF9FUlJPUjsNCiAgICAgfQ0KLSAgICBjYW52YXNQdHIgPSAoVGtD YW52YXMgKikoY2FudkNtZC5jbGllbnREYXRhKTsNCi0NCisgICAgY2FudmFz UHRyID0gKFRrQ2FudmFzICopIChjYW52Q21kLm9iakNsaWVudERhdGEpOw0K KyAgICBjYW52YXNQdHItPmhvdFB0ciA9IE5VTEw7DQogICAgIGMgPSBhcmd2 WzJdWzBdOw0KICAgICBsZW5ndGggPSBzdHJsZW4oYXJndlsyXSk7DQpAQCAt NDM3LDggKzUzNiwyNiBAQA0KIAlmb3IgKGkgPSAzOyBpIDwgYXJnYzsgaSsr KSB7DQogCSAgICBUa19JdGVtICppdGVtUHRyOw0KKyNpZmRlZiBVU0VfT0xE X1RBR19TRUFSQ0gNCiAJICAgIFRhZ1NlYXJjaCBzZWFyY2g7DQorI2Vsc2Ug LyogVVNFX09MRF9UQUdfU0VBUkNIICovDQorICAgICAgICAgICAgVGFnU2Vh cmNoICpzZWFyY2hQdHIgPSBOVUxMOw0KKyAgICAgICAgICAgIFRjbF9PYmog KnRhZ09iaiA9IE5VTEw7DQorICAgICAgICAgICAgVGFnU2VhcmNoICpzZWFy Y2hQdHJUbXAgPSBOVUxMOyANCisgICAgICAgICAgICAvKiBBbGxvY2F0ZWQg YnkgZmlyc3QgVGFnU2VhcmNoU2Nhbg0KKwkgICAgICogRnJlZWQgYnkgVGFn U2VhcmNoRGVzdHJveSAqLw0KKyNlbmRpZiAvKiBVU0VfT0xEX1RBR19TRUFS Q0ggKi8NCiAJICAgIC8qIExvb3AgdGhyb3VnaCBhbGwgdGhlIGl0ZW1zICov DQorI2lmZGVmIFVTRV9PTERfVEFHX1NFQVJDSA0KIAkgICAgZm9yIChpdGVt UHRyID0gU3RhcnRUYWdTZWFyY2goY2FudmFzUHRyLCBhcmd2W2ldLCAmc2Vh cmNoKTsNCiAJCSBpdGVtUHRyICE9IE5VTEw7IGl0ZW1QdHIgPSBOZXh0SXRl bSgmc2VhcmNoKSkgew0KKyNlbHNlIC8qIFVTRV9PTERfVEFHX1NFQVJDSCAq Lw0KKwkgICAgdGFnT2JqID0gVGNsX05ld1N0cmluZ09iaihhcmd2W2ldLC0x KTsNCisJICAgIGlmICgocmVzdWx0ID0gVGFnU2VhcmNoU2NhbihjYW52YXNQ dHIsIHRhZ09iaiwgJnNlYXJjaFB0cikpICE9IFRDTF9PSykgew0KKwkJZ290 byBkb25lOw0KKwkgICAgfQ0KKw0KKwkgICAgZm9yIChpdGVtUHRyID0gVGFn U2VhcmNoRmlyc3Qoc2VhcmNoUHRyKTsNCisJCSAgICBpdGVtUHRyICE9IE5V TEw7IGl0ZW1QdHIgPSBUYWdTZWFyY2hOZXh0KHNlYXJjaFB0cikpIHsNCisj ZW5kaWYgLyogVVNFX09MRF9UQUdfU0VBUkNIICovDQogCQljaGFyKiBubSA9 IGl0ZW1QdHItPnR5cGVQdHItPm5hbWU7DQogCQkvKiBjcmVhdGUgYSBuZXcg ZWRnZSBvciBub2RlICovDQpAQCAtNDQ2LDQgKzU2Myw2IEBADQogCQkgICAg Y2hhciogZm5hbWU7DQogCQkgICAgY2hhciogdG5hbWU7DQorICAgICAgICAg ICAgICAgICAgICBUY2xfT2JqKiBmbmFtZXRhZ09iajsNCisgICAgICAgICAg ICAgICAgICAgIFRjbF9PYmoqIHRuYW1ldGFnT2JqOw0KIAkJICAgIFRrX0l0 ZW0qIGY7DQogCQkgICAgVGtfSXRlbSogdDsNCkBAIC00NTIsNyArNTcxLDIx IEBADQogCQkJZ290byBlcnJvcjsNCiAJCSAgICAvKiBmaW5kIHRoZSBmcm9t IGFuZCB0byBub2RlIHBJdGVtcyAqLw0KKyNpZmRlZiBVU0VfT0xEX1RBR19T RUFSQ0gNCiAJCSAgICBmID0gU3RhcnRUYWdTZWFyY2goY2FudmFzUHRyLCBm bmFtZSwgJnNlYXJjaCk7DQogCQkgICAgdCA9IFN0YXJ0VGFnU2VhcmNoKGNh bnZhc1B0ciwgdG5hbWUsICZzZWFyY2gpOw0KLQkJICAgIGNrZnJlZShmbmFt ZSk7IGNrZnJlZSh0bmFtZSk7DQorI2Vsc2UgLyogVVNFX09MRF9UQUdfU0VB UkNIICovDQorICAgICAgICAgICAgICAgICAgICBmbmFtZXRhZ09iaiA9IFRj bF9OZXdTdHJpbmdPYmooZm5hbWUsLTEpOw0KKyAJICAgICAgICAgICAgaWYg KFRhZ1NlYXJjaFNjYW4oY2FudmFzUHRyLCBmbmFtZXRhZ09iaiwgJnNlYXJj aFB0clRtcCkgIT0gVENMX09LKSB7DQorCQkgICAgICAgICBnb3RvIGRvbmU7 DQorCSAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgIGYgPSBU YWdTZWFyY2hGaXJzdChzZWFyY2hQdHJUbXApOw0KKyAgICAgICAgICAgICAg ICAgICAgdG5hbWV0YWdPYmogPSBUY2xfTmV3U3RyaW5nT2JqKHRuYW1lLC0x KTsNCisgCSAgICAgICAgICAgIGlmIChUYWdTZWFyY2hTY2FuKGNhbnZhc1B0 ciwgdG5hbWV0YWdPYmosICZzZWFyY2hQdHJUbXApICE9IFRDTF9PSykgew0K KwkJICAgICAgICAgZ290byBkb25lOw0KKwkgICAgICAgICAgICB9DQorICAg ICAgICAgICAgICAgICAgICB0ID0gVGFnU2VhcmNoRmlyc3Qoc2VhcmNoUHRy VG1wKTsNCisNCisjZW5kaWYgLyogVVNFX09MRF9UQUdfU0VBUkNIICovDQor ICAgICAgICAgICAgICAgICAgICBja2ZyZWUoZm5hbWUpOyBja2ZyZWUodG5h bWUpOw0KIAkJICAgIGlmKExheW91dENyZWF0ZUVkZ2UoZ3JhcGgsDQogCQkJ CQkocEl0ZW0paXRlbVB0ciwNCkBAIC01MjYsNSArNjU5LDUgQEANCiAJCVRj bF9IYXNoRW50cnkgKmVudHJ5Ow0KIAkJZW50cnkgPSBUY2xfRmluZEhhc2hF bnRyeShncmFwaF90YWJsZShpbnRlcnApLA0KLQkJCQkJICAoY2hhciAqKShj YW52Q21kLmNsaWVudERhdGEpKTsNCisJCQkJCSAgKGNoYXIgKikoY2FudkNt ZC5vYmpDbGllbnREYXRhKSk7DQogCQkNCiAJCUxheW91dEZyZWVHcmFwaChn cmFwaCk7DQpAQCAtNjIzLDExICs3NTYsMjMgQEANCiAJICAgIGNoYXIqIG5t Ow0KIAkgICAgVGtfSXRlbSAqaXRlbVB0cjsNCisjaWZkZWYgVVNFX09MRF9U QUdfU0VBUkNIDQogCSAgICBUYWdTZWFyY2ggc2VhcmNoOw0KKyNlbHNlIC8q IFVTRV9PTERfVEFHX1NFQVJDSCAqLw0KKwkgICAgVGNsX09iaiogdGFnT2Jq Ow0KKyAgICAgICAgICAgIFRhZ1NlYXJjaCAqc2VhcmNoUHRyID0gTlVMTDsN CisjZW5kaWYgLyogVVNFX09MRF9UQUdfU0VBUkNIICovDQogCSAgICBMYXlv dXRfR3JhcGggKmdyYXBoID0gR2V0R3JhcGhMYXlvdXQoJmNhbnZDbWQsIGlu dGVycCk7DQogDQogCSAgICBpZighZ3JhcGgpIGdvdG8gZG9uZTsNCiAJICAg IGZvciAoaSA9IDM7IGkgPCBhcmdjOyBpKyspIHsNCisjaWZkZWYgVVNFX09M RF9UQUdfU0VBUkNIDQogCQlmb3IgKGl0ZW1QdHIgPSBTdGFydFRhZ1NlYXJj aChjYW52YXNQdHIsIGFyZ3ZbaV0sICZzZWFyY2gpOw0KIAkJICAgICBpdGVt UHRyICE9IE5VTEw7IGl0ZW1QdHIgPSBOZXh0SXRlbSgmc2VhcmNoKSkgew0K KyNlbHNlIC8qIFVTRV9PTERfVEFHX1NFQVJDSCAqLw0KKwkJdGFnT2JqID0g VGNsX05ld1N0cmluZ09iaihhcmd2W2ldLC0xKTsNCisJCVRhZ1NlYXJjaFNj YW4oY2FudmFzUHRyLCB0YWdPYmosICZzZWFyY2hQdHIpOw0KKwkJZm9yIChp dGVtUHRyID0gVGFnU2VhcmNoRmlyc3Qoc2VhcmNoUHRyKTsgaXRlbVB0ciAh PSBOVUxMOw0KKyAgICAgICAgICAgICAgICAgICAgIGl0ZW1QdHIgPSBUYWdT ZWFyY2hOZXh0KHNlYXJjaFB0cikpIHsNCisjZW5kaWYgLyogVVNFX09MRF9U QUdfU0VBUkNIICovIA0KIAkJICAgIG5tID0gaXRlbVB0ci0+dHlwZVB0ci0+ bmFtZTsNCiAJCSAgICAvKiBkZWxldGUgYSBuZXcgZWRnZSBvciBub2RlICov DQpAQCAtNjk0LDQgKzgzOSw3IEBADQogfQ0KIAwNCisNCisjaWZkZWYgVVNF X09MRF9UQUdfU0VBUkNIDQorDQogLyoNCiAgKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t DQpAQCAtNzM5LDUgKzg4Nyw1IEBADQogICAgIHNlYXJjaFB0ci0+Y2FudmFz UHRyID0gY2FudmFzUHRyOw0KICAgICBzZWFyY2hQdHItPnNlYXJjaE92ZXIg PSAwOw0KLSAgICANCisNCiAgICAgLyoNCiAgICAgICogRmluZCB0aGUgZmly c3QgbWF0Y2hpbmcgaXRlbSBpbiBvbmUgb2Ygc2V2ZXJhbCB3YXlzLiBJZiB0 aGUgdGFnDQpAQCAtODkyLDIgKzEwNDAsODU4IEBADQogICAgIHJldHVybiBO VUxMOw0KIH0NCisNCisjZWxzZSAvKiBVU0VfT0xEX1RBR19TRUFSQ0ggKi8N CisvKg0KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKg0KKyAqIFRhZ1NlYXJj aEV4cHJJbml0IC0tDQorICoNCisgKiAgICAgIFRoaXMgcHJvY2VkdXJlIGFs bG9jYXRlcyBhbmQgaW5pdGlhbGl6ZXMgb25lIFRhZ1NlYXJjaEV4cHIgc3Ry dWN0Lg0KKyAqDQorICogUmVzdWx0czoNCisgKg0KKyAqIFNpZGUgZWZmZWN0 czoNCisgKg0KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKi8NCisNCitzdGF0 aWMgdm9pZA0KK1RhZ1NlYXJjaEV4cHJJbml0KGV4cHJQdHJQdHIpDQorVGFn U2VhcmNoRXhwciAqKmV4cHJQdHJQdHI7DQorew0KKyAgICBUYWdTZWFyY2hF eHByKiBleHByID0gKmV4cHJQdHJQdHI7DQorDQorICAgIGlmICghIGV4cHIp IHsNCisJZXhwciA9IChUYWdTZWFyY2hFeHByICopIGNrYWxsb2Moc2l6ZW9m KFRhZ1NlYXJjaEV4cHIpKTsNCisJZXhwci0+YWxsb2NhdGVkID0gMDsNCisJ ZXhwci0+dWlkcyA9IE5VTEw7DQorCWV4cHItPm5leHQgPSBOVUxMOw0KKyAg ICB9DQorICAgIGV4cHItPnVpZCA9IE5VTEw7DQorICAgIGV4cHItPmluZGV4 ID0gMDsNCisgICAgZXhwci0+bGVuZ3RoID0gMDsNCisgICAgKmV4cHJQdHJQ dHIgPSBleHByOw0KK30NCisgDQorLyoNCisgKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t DQorICoNCisgKiBUYWdTZWFyY2hFeHByRGVzdHJveSAtLQ0KKyAqDQorICog ICAgICBUaGlzIHByb2NlZHVyZSBkZXN0cm95cyBvbmUgVGFnU2VhcmNoRXhw ciBzdHJ1Y3R1cmUuDQorICoNCisgKiBSZXN1bHRzOg0KKyAqDQorICogU2lk ZSBlZmZlY3RzOg0KKyAqDQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAgICAg Ki8NCisNCitzdGF0aWMgdm9pZA0KK1RhZ1NlYXJjaEV4cHJEZXN0cm95KGV4 cHIpDQorICAgIFRhZ1NlYXJjaEV4cHIgKmV4cHI7DQorew0KKyAgICBpZiAo ZXhwcikgew0KKyAgICAJaWYgKGV4cHItPnVpZHMpIHsNCisgICAgICAgIAlj a2ZyZWUoKGNoYXIgKilleHByLT51aWRzKTsNCisJfQ0KKyAgICAgICAgY2tm cmVlKChjaGFyICopZXhwcik7DQorICAgIH0NCit9DQorDQorLyoNCisgKi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tDQorICoNCisgKiBUYWdTZWFyY2hTY2FuIC0tDQor ICoNCisgKiAgICAgIFRoaXMgcHJvY2VkdXJlIGlzIGNhbGxlZCB0byBpbml0 aWF0ZSBhbiBlbnVtZXJhdGlvbiBvZg0KKyAqICAgICAgYWxsIGl0ZW1zIGlu IGEgZ2l2ZW4gY2FudmFzIHRoYXQgY29udGFpbiBhIHRhZyB0aGF0IG1hdGNo ZXMNCisgKiAgICAgIHRoZSB0YWdPcklkIGV4cHJlc3Npb24uDQorICoNCisg KiBSZXN1bHRzOg0KKyAqICAgICAgVGhlIHJldHVybiB2YWx1ZSBpbmRpY2F0 ZXMgaWYgdGhlIHRhZ09ySWQgZXhwcmVzc2lvbg0KKyAqICAgICAgd2FzIHN1 Y2Nlc3NmdWxseSBzY2FubmVkIChzeW50YXgpLg0KKyAqICAgICAgVGhlIGlu Zm9ybWF0aW9uIGF0ICpzZWFyY2hQdHIgaXMgaW5pdGlhbGl6ZWQNCisgKiAg ICAgIHN1Y2ggdGhhdCBhIGNhbGwgdG8gVGFnU2VhcmNoRmlyc3QsIGZvbGxv d2VkIGJ5DQorICogICAgICBzdWNjZXNzaXZlIGNhbGxzIHRvIFRhZ1NlYXJj aE5leHQgd2lsbCByZXR1cm4gaXRlbXMNCisgKiAgICAgIHRoYXQgbWF0Y2gg dGFnLg0KKyAqDQorICogU2lkZSBlZmZlY3RzOg0KKyAqICAgICAgU2VhcmNo UHRyIGlzIGxpbmtlZCBpbnRvIGEgbGlzdCBvZiBzZWFyY2hlcyBpbiBwcm9n cmVzcw0KKyAqICAgICAgb24gY2FudmFzUHRyLCBzbyB0aGF0IGVsZW1lbnRz IGNhbiBzYWZlbHkgYmUgZGVsZXRlZA0KKyAqICAgICAgd2hpbGUgdGhlIHNl YXJjaCBpcyBpbiBwcm9ncmVzcy4NCisgKg0KKyAqLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0NCisgKi8NCisNCitzdGF0aWMgaW50DQorVGFnU2VhcmNoU2NhbihjYW52 YXNQdHIsIHRhZ09iaiwgc2VhcmNoUHRyUHRyKQ0KKyAgICBUa0NhbnZhcyAq Y2FudmFzUHRyOyAgICAgICAgICAgICAgICAvKiBDYW52YXMgd2hvc2UgaXRl bXMgYXJlIHRvIGJlDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAqIHNlYXJjaGVkLiAqLw0KKyAgICBUY2xfT2JqICp0YWdP Ymo7ICAgICAgICAgICAgICAgICAgICAvKiAgc3RyaW5nIGdpdmluZyB0YWcg dmFsdWUuICovDQorICAgIFRhZ1NlYXJjaCAqKnNlYXJjaFB0clB0cjsgICAg ICAgICAgIC8qIFJlY29yZCBkZXNjcmliaW5nIHRhZyBzZWFyY2g7DQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHdpbGwg YmUgaW5pdGlhbGl6ZWQgaGVyZS4gKi8NCit7DQorICAgIGNoYXIgKnRhZyA9 IFRjbF9HZXRTdHJpbmdGcm9tT2JqKHRhZ09iaixOVUxMKTsNCisgICAgaW50 IGk7DQorICAgIFRhZ1NlYXJjaCAqc2VhcmNoUHRyOw0KKw0KKyAgICAvKg0K KyAgICAgKiBJbml0aWFsaXplIHRoZSBzZWFyY2guDQorICAgICAqLw0KKw0K KyAgICBpZiAoKnNlYXJjaFB0clB0cikgew0KKyAgICAgICAgc2VhcmNoUHRy ID0gKnNlYXJjaFB0clB0cjsNCisgICAgfSBlbHNlIHsNCisgICAgICAgIC8q IEFsbG9jYXRlIHByaW1hcnkgc2VhcmNoIHN0cnVjdCBvbiBmaXJzdCBjYWxs ICovDQorICAgICAgICAqc2VhcmNoUHRyUHRyID0gc2VhcmNoUHRyID0gKFRh Z1NlYXJjaCAqKSBja2FsbG9jKHNpemVvZihUYWdTZWFyY2gpKTsNCisJc2Vh cmNoUHRyLT5leHByID0gTlVMTDsNCisNCisgICAgICAgIC8qIEFsbG9jYXRl IGJ1ZmZlciBmb3IgcmV3cml0dGVuIHRhZ3MgKGFmdGVyIGRlLWVzY2FwaW5n KSAqLw0KKyAgICAgICAgc2VhcmNoUHRyLT5yZXdyaXRlYnVmZmVyQWxsb2Nh dGVkID0gMTAwOw0KKyAgICAgICAgc2VhcmNoUHRyLT5yZXdyaXRlYnVmZmVy ID0NCisgICAgICAgICAgICBja2FsbG9jKHNlYXJjaFB0ci0+cmV3cml0ZWJ1 ZmZlckFsbG9jYXRlZCk7DQorICAgIH0NCisgICAgVGFnU2VhcmNoRXhwcklu aXQoJihzZWFyY2hQdHItPmV4cHIpKTsNCisNCisgICAgLyogSG93IGxvbmcg aXMgdGhlIHRhZ09ySWQgPyAqLw0KKyAgICBzZWFyY2hQdHItPnN0cmluZ0xl bmd0aCA9IHN0cmxlbih0YWcpOw0KKw0KKyAgICAvKiBNYWtlIHN1cmUgdGhl cmUgaXMgZW5vdWdoIGJ1ZmZlciB0byBob2xkIHJld3JpdHRlbiB0YWdzICov DQorICAgIGlmICgodW5zaWduZWQgaW50KXNlYXJjaFB0ci0+c3RyaW5nTGVu Z3RoID49DQorCSAgICBzZWFyY2hQdHItPnJld3JpdGVidWZmZXJBbGxvY2F0 ZWQpIHsNCisgICAgICAgIHNlYXJjaFB0ci0+cmV3cml0ZWJ1ZmZlckFsbG9j YXRlZCA9IHNlYXJjaFB0ci0+c3RyaW5nTGVuZ3RoICsgMTAwOw0KKyAgICAg ICAgc2VhcmNoUHRyLT5yZXdyaXRlYnVmZmVyID0NCisgICAgICAgICAgICBj a3JlYWxsb2Moc2VhcmNoUHRyLT5yZXdyaXRlYnVmZmVyLA0KKwkJICAgIHNl YXJjaFB0ci0+cmV3cml0ZWJ1ZmZlckFsbG9jYXRlZCk7DQorICAgIH0NCisN CisgICAgLyogSW5pdGlhbGl6ZSBzZWFyY2ggKi8NCisgICAgc2VhcmNoUHRy LT5jYW52YXNQdHIgPSBjYW52YXNQdHI7DQorICAgIHNlYXJjaFB0ci0+c2Vh cmNoT3ZlciA9IDA7DQorICAgIHNlYXJjaFB0ci0+dHlwZSA9IDA7DQorDQor ICAgIC8qDQorICAgICAqIEZpbmQgdGhlIGZpcnN0IG1hdGNoaW5nIGl0ZW0g aW4gb25lIG9mIHNldmVyYWwgd2F5cy4gSWYgdGhlIHRhZw0KKyAgICAgKiBp cyBhIG51bWJlciB0aGVuIGl0IHNlbGVjdHMgdGhlIHNpbmdsZSBpdGVtIHdp dGggdGhlIG1hdGNoaW5nDQorICAgICAqIGlkZW50aWZpZXIuICBJbiB0aGlz IGNhc2Ugc2VlIGlmIHRoZSBpdGVtIGJlaW5nIHJlcXVlc3RlZCBpcyB0aGUN CisgICAgICogaG90IGl0ZW0sIGluIHdoaWNoIGNhc2UgdGhlIHNlYXJjaCBj YW4gYmUgc2tpcHBlZC4NCisgICAgICovDQorDQorICAgIGlmIChzZWFyY2hQ dHItPnN0cmluZ0xlbmd0aCAmJiBpc2RpZ2l0KFVDSEFSKCp0YWcpKSkgew0K KyAgICAgICAgY2hhciAqZW5kOw0KKw0KKyAgICAgICAgc2VhcmNoUHRyLT5p ZCA9IHN0cnRvdWwodGFnLCAmZW5kLCAwKTsNCisgICAgICAgIGlmICgqZW5k ID09IDApIHsNCisgICAgICAgICAgICBzZWFyY2hQdHItPnR5cGUgPSAxOw0K KyAgICAgICAgICAgIHJldHVybiBUQ0xfT0s7DQorCX0NCisgICAgfQ0KKw0K KyAgICAvKg0KKyAgICAgKiBGb3IgYWxsIG90aGVyIHRhZ3MgYW5kIHRhZyBl eHByZXNzaW9ucyBjb252ZXJ0IHRvIGEgVUlELg0KKyAgICAgKiBUaGlzIFVJ RCBpcyBrZXB0IGZvcmV2ZXIsIGJ1dCB0aGlzIHNob3VsZCBiZSB0aG91Z2h0 IG9mDQorICAgICAqIGFzIGEgY2FjaGUgcmF0aGVyIHRoYW4gYXMgYSBtZW1v cnkgbGVhay4NCisgICAgICovDQorICAgIHNlYXJjaFB0ci0+ZXhwci0+dWlk ID0gVGtfR2V0VWlkKHRhZyk7DQorDQorICAgIC8qIHNob3J0IGNpcmN1aXQg aW1wb3NzaWJsZSBzZWFyY2hlcyBmb3IgbnVsbCB0YWdzICovDQorICAgIGlm IChzZWFyY2hQdHItPnN0cmluZ0xlbmd0aCA9PSAwKSB7DQorCXJldHVybiBU Q0xfT0s7DQorICAgIH0NCisNCisgICAgLyoNCisgICAgICogUHJlLXNjYW4g dGFnIGZvciBhdCBsZWFzdCBvbmUgdW5xdW90ZWQgIiYmIiAifHwiICJeIiAi ISINCisgICAgICogICBpZiBub3QgZm91bmQgdGhlbiB1c2Ugc3RyaW5nIGFz IHNpbXBsZSB0YWcNCisgICAgICovDQorICAgIGZvciAoaSA9IDA7IGkgPCBz ZWFyY2hQdHItPnN0cmluZ0xlbmd0aCA7IGkrKykgew0KKyAgICAgICAgaWYg KHRhZ1tpXSA9PSAnIicpIHsNCisgICAgICAgICAgICBpKys7DQorICAgICAg ICAgICAgZm9yICggOyBpIDwgc2VhcmNoUHRyLT5zdHJpbmdMZW5ndGg7IGkr Kykgew0KKyAgICAgICAgICAgICAgICBpZiAodGFnW2ldID09ICdcXCcpIHsN CisgICAgICAgICAgICAgICAgICAgIGkrKzsNCisgICAgICAgICAgICAgICAg ICAgIGNvbnRpbnVlOw0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAg ICAgICAgIGlmICh0YWdbaV0gPT0gJyInKSB7DQorICAgICAgICAgICAgICAg ICAgICBicmVhazsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAg IH0NCisgICAgICAgIH0gZWxzZSB7DQorICAgICAgICAgICAgaWYgKCh0YWdb aV0gPT0gJyYnICYmIHRhZ1tpKzFdID09ICcmJykNCisgICAgICAgICAgICAg fHwgKHRhZ1tpXSA9PSAnfCcgJiYgdGFnW2krMV0gPT0gJ3wnKQ0KKyAgICAg ICAgICAgICB8fCAodGFnW2ldID09ICdeJykNCisgICAgICAgICAgICAgfHwg KHRhZ1tpXSA9PSAnIScpKSB7DQorICAgICAgICAgICAgICAgIHNlYXJjaFB0 ci0+dHlwZSA9IDQ7DQorICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAg ICAgICAgIH0NCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBzZWFyY2hQ dHItPnN0cmluZyA9IHRhZzsNCisgICAgc2VhcmNoUHRyLT5zdHJpbmdJbmRl eCA9IDA7DQorICAgIGlmIChzZWFyY2hQdHItPnR5cGUgPT0gNCkgew0KKyAg ICAgICAgLyoNCisgICAgICAgICAqIGFuIG9wZXJhdG9yIHdhcyBmb3VuZCBp biB0aGUgcHJlc2Nhbiwgc28NCisgICAgICAgICAqIG5vdyBjb21waWxlIHRo ZSB0YWcgZXhwcmVzc2lvbiBpbnRvIGFycmF5IG9mIFRrX1VpZA0KKyAgICAg ICAgICogZmxhZ2dpbmcgYW55IHN5bnRheCBlcnJvcnMgZm91bmQNCisgICAg ICAgICAqLw0KKwlpZiAoVGFnU2VhcmNoU2NhbkV4cHIoY2FudmFzUHRyLT5p bnRlcnAsIHNlYXJjaFB0ciwgc2VhcmNoUHRyLT5leHByKSAhPSBUQ0xfT0sp IHsNCisgICAgICAgICAgICAvKiBTeW50YXggZXJyb3IgaW4gdGFnIGV4cHJl c3Npb24gKi8NCisJICAgIC8qIFJlc3VsdCBtZXNzYWdlIHNldCBieSBUYWdT ZWFyY2hTY2FuRXhwciAqLw0KKwkgICAgcmV0dXJuIFRDTF9FUlJPUjsNCisJ fQ0KKwlzZWFyY2hQdHItPmV4cHItPmxlbmd0aCA9IHNlYXJjaFB0ci0+ZXhw ci0+aW5kZXg7DQorICAgIH0gZWxzZSB7DQorICAgICAgICBpZiAoc2VhcmNo UHRyLT5leHByLT51aWQgPT0gYWxsVWlkKSB7DQorICAgICAgICAgICAgLyoN CisgICAgICAgICAgICAgKiBBbGwgaXRlbXMgbWF0Y2guDQorICAgICAgICAg ICAgICovDQorICAgICAgICAgICAgc2VhcmNoUHRyLT50eXBlID0gMjsNCisg ICAgICAgIH0gZWxzZSB7DQorICAgICAgICAgICAgLyoNCisgICAgICAgICAg ICAgKiBPcHRpbWl6ZWQgc2luZ2xlLXRhZyBzZWFyY2gNCisgICAgICAgICAg ICAgKi8NCisgICAgICAgICAgICBzZWFyY2hQdHItPnR5cGUgPSAzOw0KKyAg ICAgICAgfQ0KKyAgICB9DQorICAgIHJldHVybiBUQ0xfT0s7DQorfQ0KKwwN CisvKg0KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKg0KKyAqIFRhZ1NlYXJj aERlc3Ryb3kgLS0NCisgKg0KKyAqICAgICAgVGhpcyBwcm9jZWR1cmUgZGVz dHJveXMgYW55IGR5bmFtaWMgc3RydWN0dXJlcyB0aGF0DQorICogICAgICBt YXkgaGF2ZSBiZWVuIGFsbG9jYXRlZCBieSBUYWdTZWFyY2hTY2FuLg0KKyAq DQorICogUmVzdWx0czoNCisgKg0KKyAqIFNpZGUgZWZmZWN0czoNCisgKg0K KyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgKi8NCisNCitzdGF0aWMgdm9pZA0K K1RhZ1NlYXJjaERlc3Ryb3koc2VhcmNoUHRyKQ0KKyAgICBUYWdTZWFyY2gg KnNlYXJjaFB0cjsgICAgICAgICAgICAgICAvKiBSZWNvcmQgZGVzY3JpYmlu ZyB0YWcgc2VhcmNoICovDQorew0KKyAgICBpZiAoc2VhcmNoUHRyKSB7DQor ICAgICAgICBUYWdTZWFyY2hFeHByRGVzdHJveShzZWFyY2hQdHItPmV4cHIp Ow0KKyAgICAgICAgY2tmcmVlKChjaGFyICopc2VhcmNoUHRyLT5yZXdyaXRl YnVmZmVyKTsNCisgICAgICAgIGNrZnJlZSgoY2hhciAqKXNlYXJjaFB0cik7 DQorICAgIH0NCit9DQorDA0KKy8qDQorICotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0K KyAqDQorICogVGFnU2VhcmNoU2NhbkV4cHIgLS0NCisgKg0KKyAqICAgICAg VGhpcyByZWN1cnNpdmUgcHJvY2VkdXJlIGlzIGNhbGxlZCB0byBzY2FuIGEg dGFnIGV4cHJlc3Npb24NCisgKiAgICAgIGFuZCBjb21waWxlIGl0IGludG8g YW4gYXJyYXkgb2YgVGtfVWlkcy4NCisgKg0KKyAqIFJlc3VsdHM6DQorICog ICAgICBUaGUgcmV0dXJuIHZhbHVlIGluZGljYXRlcyBpZiB0aGUgdGFnT3JJ ZCBleHByZXNzaW9uDQorICogICAgICB3YXMgc3VjY2Vzc2Z1bGx5IHNjYW5u ZWQgKHN5bnRheCkuDQorICogICAgICBUaGUgaW5mb3JtYXRpb24gYXQgKnNl YXJjaFB0ciBpcyBpbml0aWFsaXplZA0KKyAqICAgICAgc3VjaCB0aGF0IGEg Y2FsbCB0byBUYWdTZWFyY2hGaXJzdCwgZm9sbG93ZWQgYnkNCisgKiAgICAg IHN1Y2Nlc3NpdmUgY2FsbHMgdG8gVGFnU2VhcmNoTmV4dCB3aWxsIHJldHVy biBpdGVtcw0KKyAqICAgICAgdGhhdCBtYXRjaCB0YWcuDQorICoNCisgKiBT aWRlIGVmZmVjdHM6DQorICoNCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICov DQorDQorc3RhdGljIGludA0KK1RhZ1NlYXJjaFNjYW5FeHByKGludGVycCwg c2VhcmNoUHRyLCBleHByKQ0KKyAgICBUY2xfSW50ZXJwICppbnRlcnA7ICAg ICAgICAgLyogQ3VycmVudCBpbnRlcnByZXRlci4gKi8NCisgICAgVGFnU2Vh cmNoICpzZWFyY2hQdHI7ICAgICAgIC8qIFNlYXJjaCBkYXRhICovDQorICAg IFRhZ1NlYXJjaEV4cHIgKmV4cHI7CS8qIGNvbXBpbGVkIGV4cHJlc3Npb24g cmVzdWx0ICovDQorew0KKyAgICBpbnQgbG9va2luZ19mb3JfdGFnOyAgICAg ICAgLyogV2hlbiB0cnVlLCBzY2FubmVyIGV4cGVjdHMNCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAqIG5leHQgY2hhcihzKSB0byBiZSBh IHRhZywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGVs c2Ugb3BlcmFuZCBleHBlY3RlZCAqLw0KKyAgICBpbnQgZm91bmRfdGFnOyAg ICAgICAgICAgICAgLyogT25lIG9yIG1vcmUgdGFncyBmb3VuZCAqLw0KKyAg ICBpbnQgZm91bmRfZW5kcXVvdGU7ICAgICAgICAgLyogRm9yIHF1b3RlZCB0 YWcgc3RyaW5nIHBhcnNpbmcgKi8NCisgICAgaW50IG5lZ2F0ZV9yZXN1bHQ7 ICAgICAgICAgIC8qIFBlbmRpbmcgbmVnYXRpb24gb2YgbmV4dCB0YWcgdmFs dWUgKi8NCisgICAgY2hhciAqdGFnOyAgICAgICAgICAgICAgICAgIC8qIHRh ZyBmcm9tIHRhZyBleHByZXNzaW9uIHN0cmluZyAqLw0KKyAgICBjaGFyIGM7 DQorDQorICAgIG5lZ2F0ZV9yZXN1bHQgPSAwOw0KKyAgICBmb3VuZF90YWcg PSAwOw0KKyAgICBsb29raW5nX2Zvcl90YWcgPSAxOw0KKyAgICB3aGlsZSAo c2VhcmNoUHRyLT5zdHJpbmdJbmRleCA8IHNlYXJjaFB0ci0+c3RyaW5nTGVu Z3RoKSB7DQorICAgICAgICBjID0gc2VhcmNoUHRyLT5zdHJpbmdbc2VhcmNo UHRyLT5zdHJpbmdJbmRleCsrXTsNCisNCisgICAgICAgIGlmIChleHByLT5h bGxvY2F0ZWQgPT0gZXhwci0+aW5kZXgpIHsNCisgICAgICAgICAgICBleHBy LT5hbGxvY2F0ZWQgKz0gMTU7DQorCSAgICBpZiAoZXhwci0+dWlkcykgew0K KwkJZXhwci0+dWlkcyA9DQorICAgICAgICAgICAgICAgICAgICAoVGtfVWlk ICopIGNrcmVhbGxvYygoY2hhciAqKShleHByLT51aWRzKSwNCisgICAgICAg ICAgICAgICAgICAgIChleHByLT5hbGxvY2F0ZWQpKnNpemVvZihUa19VaWQp KTsNCisJICAgIH0gZWxzZSB7DQorCQlleHByLT51aWRzID0NCisJCShUa19V aWQgKikgY2thbGxvYygoZXhwci0+YWxsb2NhdGVkKSpzaXplb2YoVGtfVWlk KSk7DQorCSAgICB9DQorICAgICAgICB9DQorDQorICAgICAgICBpZiAobG9v a2luZ19mb3JfdGFnKSB7DQorDQorICAgICAgICAgICAgc3dpdGNoIChjKSB7 DQorICAgICAgICAgICAgICAgIGNhc2UgJyAnICA6CS8qIGlnbm9yZSB1bnF1 b3RlZCB3aGl0ZXNwYWNlICovDQorICAgICAgICAgICAgICAgIGNhc2UgJ1x0 JyA6DQorICAgICAgICAgICAgICAgIGNhc2UgJ1xuJyA6DQorICAgICAgICAg ICAgICAgIGNhc2UgJ1xyJyA6DQorICAgICAgICAgICAgICAgICAgICBicmVh azsNCisNCisgICAgICAgICAgICAgICAgY2FzZSAnIScgIDoJLyogbmVnYXRl IG5leHQgdGFnIG9yIHN1YmV4cHIgKi8NCisgICAgICAgICAgICAgICAgICAg IGlmIChsb29raW5nX2Zvcl90YWcgPiAxKSB7DQorICAgICAgICAgICAgICAg ICAgICAgICAgVGNsX0FwcGVuZFJlc3VsdChpbnRlcnAsDQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJUb28gbWFueSAnIScgaW4gdGFnIHNlYXJj aCBleHByZXNzaW9uIiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg KGNoYXIgKikgTlVMTCk7DQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0 dXJuIFRDTF9FUlJPUjsNCisgICAgICAgICAgICAgICAgICAgIH0NCisgICAg ICAgICAgICAgICAgICAgIGxvb2tpbmdfZm9yX3RhZysrOw0KKyAgICAgICAg ICAgICAgICAgICAgbmVnYXRlX3Jlc3VsdCA9IDE7DQorICAgICAgICAgICAg ICAgICAgICBicmVhazsNCisNCisgICAgICAgICAgICAgICAgY2FzZSAnKCcg IDoJLyogc2NhbiAobmVnYXRlZCkgc3ViZXhwciByZWN1cnNpdmVseSAqLw0K KyAgICAgICAgICAgICAgICAgICAgaWYgKG5lZ2F0ZV9yZXN1bHQpIHsNCisg ICAgICAgICAgICAgICAgICAgICAgICBleHByLT51aWRzW2V4cHItPmluZGV4 KytdID0gbmVncGFyZW5VaWQ7DQorICAgICAgICAgICAgICAgICAgICAgICAg bmVnYXRlX3Jlc3VsdCA9IDA7DQorCQkgICAgfSBlbHNlIHsNCisgICAgICAg ICAgICAgICAgICAgICAgICBleHByLT51aWRzW2V4cHItPmluZGV4KytdID0g cGFyZW5VaWQ7DQorCQkgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgaWYg KFRhZ1NlYXJjaFNjYW5FeHByKGludGVycCwgc2VhcmNoUHRyLCBleHByKSAh PSBUQ0xfT0spIHsNCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZXN1 bHQgc3RyaW5nIHNob3VsZCBiZSBhbHJlYWR5IHNldA0KKyAgICAgICAgICAg ICAgICAgICAgICAgICAqIGJ5IG5lc3RlZCBjYWxsIHRvIHRhZ19leHByX3Nj YW4oKSAqLw0KKwkJCXJldHVybiBUQ0xfRVJST1I7DQorCQkgICAgfQ0KKyAg ICAgICAgICAgICAgICAgICAgbG9va2luZ19mb3JfdGFnID0gMDsNCisgICAg ICAgICAgICAgICAgICAgIGZvdW5kX3RhZyA9IDE7DQorICAgICAgICAgICAg ICAgICAgICBicmVhazsNCisNCisgICAgICAgICAgICAgICAgY2FzZSAnIicg IDoJLyogcXVvdGVkIHRhZyBzdHJpbmcgKi8NCisgICAgICAgICAgICAgICAg ICAgIGlmIChuZWdhdGVfcmVzdWx0KSB7DQorICAgICAgICAgICAgICAgICAg ICAgICAgZXhwci0+dWlkc1tleHByLT5pbmRleCsrXSA9IG5lZ3RhZ3ZhbFVp ZDsNCisgICAgICAgICAgICAgICAgICAgICAgICBuZWdhdGVfcmVzdWx0ID0g MDsNCisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQorICAgICAgICAg ICAgICAgICAgICAgICAgZXhwci0+dWlkc1tleHByLT5pbmRleCsrXSA9IHRh Z3ZhbFVpZDsNCisJCSAgICB9DQorICAgICAgICAgICAgICAgICAgICB0YWcg PSBzZWFyY2hQdHItPnJld3JpdGVidWZmZXI7DQorICAgICAgICAgICAgICAg ICAgICBmb3VuZF9lbmRxdW90ZSA9IDA7DQorICAgICAgICAgICAgICAgICAg ICB3aGlsZSAoc2VhcmNoUHRyLT5zdHJpbmdJbmRleCA8IHNlYXJjaFB0ci0+ c3RyaW5nTGVuZ3RoKSB7DQorICAgICAgICAgICAgICAgICAgICAgICAgYyA9 IHNlYXJjaFB0ci0+c3RyaW5nW3NlYXJjaFB0ci0+c3RyaW5nSW5kZXgrK107 DQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT0gJ1xcJykgew0K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjID0gc2VhcmNoUHRyLT5z dHJpbmdbc2VhcmNoUHRyLT5zdHJpbmdJbmRleCsrXTsNCisJCQl9DQorICAg ICAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT0gJyInKSB7DQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2VuZHF1b3RlID0gMTsNCisJ CQkgICAgYnJlYWs7DQorCQkJfQ0KKyAgICAgICAgICAgICAgICAgICAgICAg ICp0YWcrKyA9IGM7DQorICAgICAgICAgICAgICAgICAgICB9DQorICAgICAg ICAgICAgICAgICAgICBpZiAoISBmb3VuZF9lbmRxdW90ZSkgew0KKyAgICAg ICAgICAgICAgICAgICAgICAgIFRjbF9BcHBlbmRSZXN1bHQoaW50ZXJwLA0K KwkJCQkiTWlzc2luZyBlbmRxdW90ZSBpbiB0YWcgc2VhcmNoIGV4cHJlc3Np b24iLA0KKwkJCQkoY2hhciAqKSBOVUxMKTsNCisgICAgICAgICAgICAgICAg ICAgICAgICByZXR1cm4gVENMX0VSUk9SOw0KKyAgICAgICAgICAgICAgICAg ICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgaWYgKCEgKHRhZyAtIHNlYXJj aFB0ci0+cmV3cml0ZWJ1ZmZlcikpIHsNCisgICAgICAgICAgICAgICAgICAg ICAgICBUY2xfQXBwZW5kUmVzdWx0KGludGVycCwNCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIk51bGwgcXVvdGVkIHRhZyBzdHJpbmcgaW4gdGFn IHNlYXJjaCBleHByZXNzaW9uIiwNCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKGNoYXIgKikgTlVMTCk7DQorICAgICAgICAgICAgICAgICAgICAg ICAgcmV0dXJuIFRDTF9FUlJPUjsNCisgICAgICAgICAgICAgICAgICAgIH0N CisgICAgICAgICAgICAgICAgICAgICp0YWcrKyA9ICdcMCc7DQorICAgICAg ICAgICAgICAgICAgICBleHByLT51aWRzW2V4cHItPmluZGV4KytdID0NCisg ICAgICAgICAgICAgICAgICAgICAgICBUa19HZXRVaWQoc2VhcmNoUHRyLT5y ZXdyaXRlYnVmZmVyKTsNCisgICAgICAgICAgICAgICAgICAgIGxvb2tpbmdf Zm9yX3RhZyA9IDA7DQorICAgICAgICAgICAgICAgICAgICBmb3VuZF90YWcg PSAxOw0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQorDQorICAgICAg ICAgICAgICAgIGNhc2UgJyYnICA6CS8qIGlsbGVnYWwgY2hhcnMgd2hlbiBs b29raW5nIGZvciB0YWcgKi8NCisgICAgICAgICAgICAgICAgY2FzZSAnfCcg IDoNCisgICAgICAgICAgICAgICAgY2FzZSAnXicgIDoNCisgICAgICAgICAg ICAgICAgY2FzZSAnKScgIDoNCisgICAgICAgICAgICAgICAgICAgIFRjbF9B cHBlbmRSZXN1bHQoaW50ZXJwLA0KKwkJCSAgICAiVW5leHBlY3RlZCBvcGVy YXRvciBpbiB0YWcgc2VhcmNoIGV4cHJlc3Npb24iLA0KKwkJCSAgICAoY2hh ciAqKSBOVUxMKTsNCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBUQ0xf RVJST1I7DQorDQorICAgICAgICAgICAgICAgIGRlZmF1bHQgOgkvKiB1bnF1 b3RlZCB0YWcgc3RyaW5nICovDQorICAgICAgICAgICAgICAgICAgICBpZiAo bmVnYXRlX3Jlc3VsdCkgew0KKyAgICAgICAgICAgICAgICAgICAgICAgIGV4 cHItPnVpZHNbZXhwci0+aW5kZXgrK10gPSBuZWd0YWd2YWxVaWQ7DQorICAg ICAgICAgICAgICAgICAgICAgICAgbmVnYXRlX3Jlc3VsdCA9IDA7DQorICAg ICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KKyAgICAgICAgICAgICAgICAg ICAgICAgIGV4cHItPnVpZHNbZXhwci0+aW5kZXgrK10gPSB0YWd2YWxVaWQ7 DQorICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAg ICB0YWcgPSBzZWFyY2hQdHItPnJld3JpdGVidWZmZXI7DQorICAgICAgICAg ICAgICAgICAgICAqdGFnKysgPSBjOw0KKyAgICAgICAgICAgICAgICAgICAg LyogY29weSByZXN0IG9mIHRhZywgaW5jbHVkaW5nIGFueSBlbWJlZGRlZCB3 aGl0ZXNwYWNlICovDQorICAgICAgICAgICAgICAgICAgICB3aGlsZSAoc2Vh cmNoUHRyLT5zdHJpbmdJbmRleCA8IHNlYXJjaFB0ci0+c3RyaW5nTGVuZ3Ro KSB7DQorICAgICAgICAgICAgICAgICAgICAgICAgYyA9IHNlYXJjaFB0ci0+ c3RyaW5nW3NlYXJjaFB0ci0+c3RyaW5nSW5kZXhdOw0KKyAgICAgICAgICAg ICAgICAgICAgICAgIGlmIChjID09ICchJyB8fCBjID09ICcmJyB8fCBjID09 ICd8JyB8fCBjID09ICdeJw0KKwkJCQl8fCBjID09ICcoJyB8fCBjID09ICcp JyB8fCBjID09ICciJykgew0KKwkJCSAgICBicmVhazsNCisgICAgICAgICAg ICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICAgICAgKnRh ZysrID0gYzsNCisgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hQdHIt PnN0cmluZ0luZGV4Kys7DQorICAgICAgICAgICAgICAgICAgICB9DQorICAg ICAgICAgICAgICAgICAgICAvKiByZW1vdmUgdHJhaWxpbmcgd2hpdGVzcGFj ZSAqLw0KKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKDEpIHsNCisgICAg ICAgICAgICAgICAgICAgICAgICBjID0gKi0tdGFnOw0KKyAgICAgICAgICAg ICAgICAgICAgICAgIC8qIHRoZXJlIG11c3QgaGF2ZSBiZWVuIG9uZSBub24t d2hpdGVzcGFjZSBjaGFyLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAq ICBzbyB0aGlzIHdpbGwgdGVybWluYXRlICovDQorICAgICAgICAgICAgICAg ICAgICAgICAgaWYgKGMgIT0gJyAnICYmIGMgIT0gJ1x0JyAmJiBjICE9ICdc bicgJiYgYyAhPSAnXHInKSB7DQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGJyZWFrOw0KKwkJCX0NCisgICAgICAgICAgICAgICAgICAgIH0NCisg ICAgICAgICAgICAgICAgICAgICorK3RhZyA9ICdcMCc7DQorICAgICAgICAg ICAgICAgICAgICBleHByLT51aWRzW2V4cHItPmluZGV4KytdID0NCisgICAg ICAgICAgICAgICAgICAgICAgICBUa19HZXRVaWQoc2VhcmNoUHRyLT5yZXdy aXRlYnVmZmVyKTsNCisgICAgICAgICAgICAgICAgICAgIGxvb2tpbmdfZm9y X3RhZyA9IDA7DQorICAgICAgICAgICAgICAgICAgICBmb3VuZF90YWcgPSAx Ow0KKyAgICAgICAgICAgIH0NCisNCisgICAgICAgIH0gZWxzZSB7ICAgIC8q ICEgbG9va2luZ19mb3JfdGFnICovDQorDQorICAgICAgICAgICAgc3dpdGNo IChjKSB7DQorICAgICAgICAgICAgICAgIGNhc2UgJyAnICA6CS8qIGlnbm9y ZSB3aGl0ZXNwYWNlICovDQorICAgICAgICAgICAgICAgIGNhc2UgJ1x0JyA6 DQorICAgICAgICAgICAgICAgIGNhc2UgJ1xuJyA6DQorICAgICAgICAgICAg ICAgIGNhc2UgJ1xyJyA6DQorICAgICAgICAgICAgICAgICAgICBicmVhazsN CisNCisgICAgICAgICAgICAgICAgY2FzZSAnJicgIDoJLyogQU5EIG9wZXJh dG9yICovDQorICAgICAgICAgICAgICAgICAgICBjID0gc2VhcmNoUHRyLT5z dHJpbmdbc2VhcmNoUHRyLT5zdHJpbmdJbmRleCsrXTsNCisgICAgICAgICAg ICAgICAgICAgIGlmIChjICE9ICcmJykgew0KKyAgICAgICAgICAgICAgICAg ICAgICAgIFRjbF9BcHBlbmRSZXN1bHQoaW50ZXJwLA0KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIlNpbmdsZXRvbiAnJicgaW4gdGFnIHNl YXJjaCBleHByZXNzaW9uIiwNCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChjaGFyICopIE5VTEwpOw0KKyAgICAgICAgICAgICAgICAgICAg ICAgIHJldHVybiBUQ0xfRVJST1I7DQorICAgICAgICAgICAgICAgICAgICB9 DQorICAgICAgICAgICAgICAgICAgICBleHByLT51aWRzW2V4cHItPmluZGV4 KytdID0gYW5kVWlkOw0KKyAgICAgICAgICAgICAgICAgICAgbG9va2luZ19m b3JfdGFnID0gMTsNCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKw0K KyAgICAgICAgICAgICAgICBjYXNlICd8JyAgOgkvKiBPUiBvcGVyYXRvciAq Lw0KKyAgICAgICAgICAgICAgICAgICAgYyA9IHNlYXJjaFB0ci0+c3RyaW5n W3NlYXJjaFB0ci0+c3RyaW5nSW5kZXgrK107DQorICAgICAgICAgICAgICAg ICAgICBpZiAoYyAhPSAnfCcpIHsNCisgICAgICAgICAgICAgICAgICAgICAg ICBUY2xfQXBwZW5kUmVzdWx0KGludGVycCwNCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICJTaW5nbGV0b24gJ3wnIGluIHRhZyBzZWFyY2gg ZXhwcmVzc2lvbiIsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoY2hhciAqKSBOVUxMKTsNCisgICAgICAgICAgICAgICAgICAgICAgICBy ZXR1cm4gVENMX0VSUk9SOw0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKyAg ICAgICAgICAgICAgICAgICAgZXhwci0+dWlkc1tleHByLT5pbmRleCsrXSA9 IG9yVWlkOw0KKyAgICAgICAgICAgICAgICAgICAgbG9va2luZ19mb3JfdGFn ID0gMTsNCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKw0KKyAgICAg ICAgICAgICAgICBjYXNlICdeJyAgOgkvKiBYT1Igb3BlcmF0b3IgKi8NCisg ICAgICAgICAgICAgICAgICAgIGV4cHItPnVpZHNbZXhwci0+aW5kZXgrK10g PSB4b3JVaWQ7DQorICAgICAgICAgICAgICAgICAgICBsb29raW5nX2Zvcl90 YWcgPSAxOw0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQorDQorICAg ICAgICAgICAgICAgIGNhc2UgJyknICA6CS8qIGVuZCBzdWJleHByZXNzaW9u ICovDQorICAgICAgICAgICAgICAgICAgICBleHByLT51aWRzW2V4cHItPmlu ZGV4KytdID0gZW5kcGFyZW5VaWQ7DQorICAgICAgICAgICAgICAgICAgICBn b3RvIGJyZWFrd2hpbGU7DQorDQorICAgICAgICAgICAgICAgIGRlZmF1bHQg ICA6CS8qIHN5bnRheCBlcnJvciAqLw0KKyAgICAgICAgICAgICAgICAgICAg VGNsX0FwcGVuZFJlc3VsdChpbnRlcnAsDQorCQkJICAgICJJbnZhbGlkIGJv b2xlYW4gb3BlcmF0b3IgaW4gdGFnIHNlYXJjaCBleHByZXNzaW9uIiwNCisJ CQkgICAgKGNoYXIgKikgTlVMTCk7DQorICAgICAgICAgICAgICAgICAgICBy ZXR1cm4gVENMX0VSUk9SOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0N CisgICAgfQ0KKyAgICBicmVha3doaWxlOg0KKyAgICBpZiAoZm91bmRfdGFn ICYmICEgbG9va2luZ19mb3JfdGFnKSB7DQorICAgICAgICByZXR1cm4gVENM X09LOw0KKyAgICB9DQorICAgIFRjbF9BcHBlbmRSZXN1bHQoaW50ZXJwLCAi TWlzc2luZyB0YWcgaW4gdGFnIHNlYXJjaCBleHByZXNzaW9uIiwNCisJICAg IChjaGFyICopIE5VTEwpOw0KKyAgICByZXR1cm4gVENMX0VSUk9SOw0KK30N CisMDQorLyoNCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICoNCisgKiBUYWdT ZWFyY2hFdmFsRXhwciAtLQ0KKyAqDQorICogICAgICBUaGlzIHJlY3Vyc2l2 ZSBwcm9jZWR1cmUgaXMgY2FsbGVkIHRvIGV2YWwgYSB0YWcgZXhwcmVzc2lv bi4NCisgKg0KKyAqIFJlc3VsdHM6DQorICogICAgICBUaGUgcmV0dXJuIHZh bHVlIGluZGljYXRlcyBpZiB0aGUgdGFnT3JJZCBleHByZXNzaW9uDQorICog ICAgICBzdWNjZXNzZnVsbHkgbWF0Y2hlZCB0aGUgdGFncyBvZiB0aGUgY3Vy cmVudCBpdGVtLg0KKyAqDQorICogU2lkZSBlZmZlY3RzOg0KKyAqDQorICot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQ0KKyAqLw0KKw0KK3N0YXRpYyBpbnQNCitUYWdT ZWFyY2hFdmFsRXhwcihleHByLCBpdGVtUHRyKQ0KKyAgICBUYWdTZWFyY2hF eHByICpleHByOyAgICAgICAgLyogU2VhcmNoIGV4cHJlc3Npb24gKi8NCisg ICAgVGtfSXRlbSAqaXRlbVB0cjsgICAgICAgICAgIC8qIEl0ZW0gYmVpbmcg dGVzdCBmb3IgbWF0Y2ggKi8NCit7DQorICAgIGludCBsb29raW5nX2Zvcl90 YWc7ICAgICAgICAvKiBXaGVuIHRydWUsIHNjYW5uZXIgZXhwZWN0cw0KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogbmV4dCBjaGFyKHMp IHRvIGJlIGEgdGFnLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICogZWxzZSBvcGVyYW5kIGV4cGVjdGVkICovDQorICAgIGludCBuZWdh dGVfcmVzdWx0OyAgICAgICAgICAvKiBQZW5kaW5nIG5lZ2F0aW9uIG9mIG5l eHQgdGFnIHZhbHVlICovDQorICAgIFRrX1VpZCB1aWQ7DQorICAgIFRrX1Vp ZCAqdGFnUHRyOw0KKyAgICBpbnQgY291bnQ7DQorICAgIGludCByZXN1bHQ7 ICAgICAgICAgICAgICAgICAvKiBWYWx1ZSBvZiBleHByIHNvIGZhciAqLw0K KyAgICBpbnQgcGFyZW5kZXB0aDsNCisNCisgICAgcmVzdWx0ID0gMDsgIC8q IGp1c3QgdG8ga2VlcCB0aGUgY29tcGlsZXIgcXVpZXQgKi8NCisNCisgICAg bmVnYXRlX3Jlc3VsdCA9IDA7DQorICAgIGxvb2tpbmdfZm9yX3RhZyA9IDE7 DQorICAgIHdoaWxlIChleHByLT5pbmRleCA8IGV4cHItPmxlbmd0aCkgew0K KyAgICAgICAgdWlkID0gZXhwci0+dWlkc1tleHByLT5pbmRleCsrXTsNCisg ICAgICAgIGlmIChsb29raW5nX2Zvcl90YWcpIHsNCisgICAgICAgICAgICBp ZiAodWlkID09IHRhZ3ZhbFVpZCkgew0KKy8qDQorICogICAgICAgICAgICAg IGFzc2VydChleHByLT5pbmRleCA8IGV4cHItPmxlbmd0aCk7DQorICovDQor ICAgICAgICAgICAgICAgIHVpZCA9IGV4cHItPnVpZHNbZXhwci0+aW5kZXgr K107DQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IDA7DQorICAgICAgICAg ICAgICAgIC8qDQorICAgICAgICAgICAgICAgICAqIHNldCByZXN1bHQgMSBp ZiB0YWcgaXMgZm91bmQgaW4gaXRlbSdzIHRhZ3MNCisgICAgICAgICAgICAg ICAgICovDQorICAgICAgICAgICAgICAgIGZvciAodGFnUHRyID0gaXRlbVB0 ci0+dGFnUHRyLCBjb3VudCA9IGl0ZW1QdHItPm51bVRhZ3M7DQorICAgICAg ICAgICAgICAgICAgICBjb3VudCA+IDA7IHRhZ1B0cisrLCBjb3VudC0tKSB7 DQorICAgICAgICAgICAgICAgICAgICBpZiAoKnRhZ1B0ciA9PSB1aWQpIHsN CisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSAxOw0KKyAgICAg ICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgICAgICAg ICAgfQ0KKyAgICAgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgfSBl bHNlIGlmICh1aWQgPT0gbmVndGFndmFsVWlkKSB7DQorICAgICAgICAgICAg ICAgIG5lZ2F0ZV9yZXN1bHQgPSAhIG5lZ2F0ZV9yZXN1bHQ7DQorLyoNCisg KiAgICAgICAgICAgICAgYXNzZXJ0KGV4cHItPmluZGV4IDwgZXhwci0+bGVu Z3RoKTsNCisgKi8NCisgICAgICAgICAgICAgICAgdWlkID0gZXhwci0+dWlk c1tleHByLT5pbmRleCsrXTsNCisgICAgICAgICAgICAgICAgcmVzdWx0ID0g MDsNCisgICAgICAgICAgICAgICAgLyoNCisgICAgICAgICAgICAgICAgICog c2V0IHJlc3VsdCAxIGlmIHRhZyBpcyBmb3VuZCBpbiBpdGVtJ3MgdGFncw0K KyAgICAgICAgICAgICAgICAgKi8NCisgICAgICAgICAgICAgICAgZm9yICh0 YWdQdHIgPSBpdGVtUHRyLT50YWdQdHIsIGNvdW50ID0gaXRlbVB0ci0+bnVt VGFnczsNCisgICAgICAgICAgICAgICAgICAgIGNvdW50ID4gMDsgdGFnUHRy KyssIGNvdW50LS0pIHsNCisgICAgICAgICAgICAgICAgICAgIGlmICgqdGFn UHRyID09IHVpZCkgew0KKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3Vs dCA9IDE7DQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQorICAg ICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgIH0NCisNCisg ICAgICAgICAgICB9IGVsc2UgaWYgKHVpZCA9PSBwYXJlblVpZCkgew0KKyAg ICAgICAgICAgICAgICAvKg0KKyAgICAgICAgICAgICAgICAgKiBldmFsdWF0 ZSBzdWJleHByZXNzaW9ucyB3aXRoIHJlY3Vyc2lvbg0KKyAgICAgICAgICAg ICAgICAgKi8NCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gVGFnU2VhcmNo RXZhbEV4cHIoZXhwciwgaXRlbVB0cik7DQorDQorICAgICAgICAgICAgfSBl bHNlIGlmICh1aWQgPT0gbmVncGFyZW5VaWQpIHsNCisgICAgICAgICAgICAg ICAgbmVnYXRlX3Jlc3VsdCA9ICEgbmVnYXRlX3Jlc3VsdDsNCisgICAgICAg ICAgICAgICAgLyoNCisgICAgICAgICAgICAgICAgICogZXZhbHVhdGUgc3Vi ZXhwcmVzc2lvbnMgd2l0aCByZWN1cnNpb24NCisgICAgICAgICAgICAgICAg ICovDQorICAgICAgICAgICAgICAgIHJlc3VsdCA9IFRhZ1NlYXJjaEV2YWxF eHByKGV4cHIsIGl0ZW1QdHIpOw0KKy8qDQorICogICAgICAgICAgfSBlbHNl IHsNCisgKiAgICAgICAgICAgICAgYXNzZXJ0KDApOw0KKyAqLw0KKyAgICAg ICAgICAgIH0NCisgICAgICAgICAgICBpZiAobmVnYXRlX3Jlc3VsdCkgew0K KyAgICAgICAgICAgICAgICByZXN1bHQgPSAhIHJlc3VsdDsNCisgICAgICAg ICAgICAgICAgbmVnYXRlX3Jlc3VsdCA9IDA7DQorICAgICAgICAgICAgfQ0K KyAgICAgICAgICAgIGxvb2tpbmdfZm9yX3RhZyA9IDA7DQorICAgICAgICB9 IGVsc2UgeyAgICAvKiAhIGxvb2tpbmdfZm9yX3RhZyAqLw0KKyAgICAgICAg ICAgIGlmICgoKHVpZCA9PSBhbmRVaWQpICYmICghcmVzdWx0KSkgfHwgKCh1 aWQgPT0gb3JVaWQpICYmIHJlc3VsdCkpIHsNCisgICAgICAgICAgICAgICAg LyoNCisgICAgICAgICAgICAgICAgICogc2hvcnQgY2lyY3VpdCBleHByZXNz aW9uIGV2YWx1YXRpb24NCisgICAgICAgICAgICAgICAgICoNCisgICAgICAg ICAgICAgICAgICogaWYgcmVzdWx0IGJlZm9yZSAmJiBpcyAwLCBvciByZXN1 bHQgYmVmb3JlIHx8IGlzIDEsDQorICAgICAgICAgICAgICAgICAqICAgdGhl biB0aGUgZXhwcmVzc2lvbiBpcyBkZWNpZGVkIGFuZCBubyBmdXJ0aGVyDQor ICAgICAgICAgICAgICAgICAqICAgZXZhbHVhdGlvbiBpcyBuZWVkZWQuDQor ICAgICAgICAgICAgICAgICAqLw0KKw0KKyAgICAgICAgICAgICAgICAgICAg cGFyZW5kZXB0aCA9IDA7DQorCQl3aGlsZSAoZXhwci0+aW5kZXggPCBleHBy LT5sZW5ndGgpIHsNCisJCSAgICB1aWQgPSBleHByLT51aWRzW2V4cHItPmlu ZGV4KytdOw0KKwkJICAgIGlmICh1aWQgPT0gdGFndmFsVWlkIHx8IHVpZCA9 PSBuZWd0YWd2YWxVaWQpIHsNCisJCQlleHByLT5pbmRleCsrOw0KKwkJCWNv bnRpbnVlOw0KKwkJICAgIH0NCisgICAgICAgICAgICAgICAgICAgICAgICBp ZiAodWlkID09IHBhcmVuVWlkIHx8IHVpZCA9PSBuZWdwYXJlblVpZCkgew0K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbmRlcHRoKys7DQor CQkJY29udGludWU7DQorCQkgICAgfSANCisJCSAgICBpZiAodWlkID09IGVu ZHBhcmVuVWlkKSB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBh cmVuZGVwdGgtLTsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg KHBhcmVuZGVwdGggPCAwKSB7DQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBicmVhazsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg fQ0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAg ICAgICAgIH0NCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsNCisN CisgICAgICAgICAgICB9IGVsc2UgaWYgKHVpZCA9PSB4b3JVaWQpIHsNCisg ICAgICAgICAgICAgICAgLyoNCisgICAgICAgICAgICAgICAgICogaWYgdGhl IHByZXZpb3VzIHJlc3VsdCB3YXMgMQ0KKyAgICAgICAgICAgICAgICAgKiAg IHRoZW4gbmVnYXRlIHRoZSBuZXh0IHJlc3VsdA0KKyAgICAgICAgICAgICAg ICAgKi8NCisgICAgICAgICAgICAgICAgbmVnYXRlX3Jlc3VsdCA9IHJlc3Vs dDsNCisNCisgICAgICAgICAgICB9IGVsc2UgaWYgKHVpZCA9PSBlbmRwYXJl blVpZCkgew0KKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0Ow0KKy8q DQorICogICAgICAgICAgfSBlbHNlIHsNCisgKiAgICAgICAgICAgICAgIGFz c2VydCgwKTsNCisgKi8NCisgICAgICAgICAgICB9DQorICAgICAgICAgICAg bG9va2luZ19mb3JfdGFnID0gMTsNCisgICAgICAgIH0NCisgICAgfQ0KKy8q DQorICogIGFzc2VydCghIGxvb2tpbmdfZm9yX3RhZyk7DQorICovDQorICAg IHJldHVybiByZXN1bHQ7DQorfQ0KKwwNCisvKg0KKyAqLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0NCisgKg0KKyAqIFRhZ1NlYXJjaEZpcnN0IC0tDQorICoNCisgKiAg ICAgIFRoaXMgcHJvY2VkdXJlIGlzIGNhbGxlZCB0byBnZXQgdGhlIGZpcnN0 IGl0ZW0NCisgKiAgICAgIGl0ZW0gdGhhdCBtYXRjaGVzIGEgcHJlZXN0YWJs aXNoZWQgc2VhcmNoIHByZWRpY2F0ZQ0KKyAqICAgICAgdGhhdCB3YXMgc2V0 IGJ5IFRhZ1NlYXJjaFNjYW4uDQorICoNCisgKiBSZXN1bHRzOg0KKyAqICAg ICAgVGhlIHJldHVybiB2YWx1ZSBpcyBhIHBvaW50ZXIgdG8gdGhlIGZpcnN0 IGl0ZW0sIG9yIE5VTEwNCisgKiAgICAgIGlmIHRoZXJlIGlzIG5vIHN1Y2gg aXRlbS4gIFRoZSBpbmZvcm1hdGlvbiBhdCAqc2VhcmNoUHRyDQorICogICAg ICBpcyB1cGRhdGVkIHN1Y2ggdGhhdCBzdWNjZXNzaXZlIGNhbGxzIHRvIFRh Z1NlYXJjaE5leHQNCisgKiAgICAgIHdpbGwgcmV0dXJuIHN1Y2Nlc3NpdmUg aXRlbXMuDQorICoNCisgKiBTaWRlIGVmZmVjdHM6DQorICogICAgICBTZWFy Y2hQdHIgaXMgbGlua2VkIGludG8gYSBsaXN0IG9mIHNlYXJjaGVzIGluIHBy b2dyZXNzDQorICogICAgICBvbiBjYW52YXNQdHIsIHNvIHRoYXQgZWxlbWVu dHMgY2FuIHNhZmVseSBiZSBkZWxldGVkDQorICogICAgICB3aGlsZSB0aGUg c2VhcmNoIGlzIGluIHByb2dyZXNzLg0KKyAqDQorICotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQ0KKyAqLw0KKw0KK3N0YXRpYyBUa19JdGVtICoNCitUYWdTZWFyY2hG aXJzdChzZWFyY2hQdHIpDQorICAgIFRhZ1NlYXJjaCAqc2VhcmNoUHRyOyAg ICAgICAgICAgICAgIC8qIFJlY29yZCBkZXNjcmliaW5nIHRhZyBzZWFyY2gg Ki8NCit7DQorICAgIFRrX0l0ZW0gKml0ZW1QdHIsICpsYXN0UHRyOw0KKyAg ICBUa19VaWQgdWlkLCAqdGFnUHRyOw0KKyAgICBpbnQgY291bnQ7DQorDQor ICAgIC8qIHNob3J0IGNpcmN1aXQgaW1wb3NzaWJsZSBzZWFyY2hlcyBmb3Ig bnVsbCB0YWdzICovDQorICAgIGlmIChzZWFyY2hQdHItPnN0cmluZ0xlbmd0 aCA9PSAwKSB7DQorICAgICAgICByZXR1cm4gTlVMTDsNCisgICAgfQ0KKw0K KyAgICAvKg0KKyAgICAgKiBGaW5kIHRoZSBmaXJzdCBtYXRjaGluZyBpdGVt IGluIG9uZSBvZiBzZXZlcmFsIHdheXMuIElmIHRoZSB0YWcNCisgICAgICog aXMgYSBudW1iZXIgdGhlbiBpdCBzZWxlY3RzIHRoZSBzaW5nbGUgaXRlbSB3 aXRoIHRoZSBtYXRjaGluZw0KKyAgICAgKiBpZGVudGlmaWVyLiAgSW4gdGhp cyBjYXNlIHNlZSBpZiB0aGUgaXRlbSBiZWluZyByZXF1ZXN0ZWQgaXMgdGhl DQorICAgICAqIGhvdCBpdGVtLCBpbiB3aGljaCBjYXNlIHRoZSBzZWFyY2gg Y2FuIGJlIHNraXBwZWQuDQorICAgICAqLw0KKw0KKyAgICBpZiAoc2VhcmNo UHRyLT50eXBlID09IDEpIHsNCisgICAgICAgIFRjbF9IYXNoRW50cnkgKmVu dHJ5UHRyOw0KKw0KKyAgICAgICAgaXRlbVB0ciA9IHNlYXJjaFB0ci0+Y2Fu dmFzUHRyLT5ob3RQdHI7DQorICAgICAgICBsYXN0UHRyID0gc2VhcmNoUHRy LT5jYW52YXNQdHItPmhvdFByZXZQdHI7DQorICAgICAgICBpZiAoKGl0ZW1Q dHIgPT0gTlVMTCkgfHwgKGl0ZW1QdHItPmlkICE9IHNlYXJjaFB0ci0+aWQp IHx8IChsYXN0UHRyID09IE5VTEwpDQorCSAgICAgfHwgKGxhc3RQdHItPm5l eHRQdHIgIT0gaXRlbVB0cikpIHsNCisJICAgICAgIGVudHJ5UHRyID0gTlVM TDsNCisJICAgICAgZW50cnlQdHIgPSBUY2xfRmluZEhhc2hFbnRyeSgmc2Vh cmNoUHRyLT5jYW52YXNQdHItPmlkVGFibGUsDQorICAgICAgICAgICAgICAg ICAgKGNoYXIgKikgc2VhcmNoUHRyLT5pZCk7DQorICAgICAgICAgICAgDQor ICAgICAgICAgICAgaWYgKGVudHJ5UHRyICE9IE5VTEwpIHsNCisgICAgICAg ICAgICAgICAgaXRlbVB0ciA9IChUa19JdGVtICopVGNsX0dldEhhc2hWYWx1 ZShlbnRyeVB0cik7DQorICAgICAgICAgICAgICAgIGxhc3RQdHIgPSBpdGVt UHRyLT5wcmV2UHRyOw0KKyAgICAgICAgICAgIH0gZWxzZSB7DQorICAgICAg ICAgICAgICAgIGxhc3RQdHIgPSBpdGVtUHRyID0gTlVMTDsNCisgICAgICAg ICAgICB9DQorICAgICAgICB9DQorICAgICAgICBzZWFyY2hQdHItPmxhc3RQ dHIgPSBsYXN0UHRyOw0KKyAgICAgICAgc2VhcmNoUHRyLT5zZWFyY2hPdmVy ID0gMTsNCisgICAgICAgIHNlYXJjaFB0ci0+Y2FudmFzUHRyLT5ob3RQdHIg PSBpdGVtUHRyOw0KKyAgICAgICAgc2VhcmNoUHRyLT5jYW52YXNQdHItPmhv dFByZXZQdHIgPSBsYXN0UHRyOw0KKyAgICAgICAgcmV0dXJuIGl0ZW1QdHI7 DQorICAgIH0NCisNCisgICAgaWYgKHNlYXJjaFB0ci0+dHlwZSA9PSAyKSB7 DQorDQorICAgICAgICAvKg0KKyAgICAgICAgICogQWxsIGl0ZW1zIG1hdGNo Lg0KKyAgICAgICAgICovDQorDQorICAgICAgICBzZWFyY2hQdHItPmxhc3RQ dHIgPSBOVUxMOw0KKyAgICAgICAgc2VhcmNoUHRyLT5jdXJyZW50UHRyID0g c2VhcmNoUHRyLT5jYW52YXNQdHItPmZpcnN0SXRlbVB0cjsNCisgICAgICAg IHJldHVybiBzZWFyY2hQdHItPmNhbnZhc1B0ci0+Zmlyc3RJdGVtUHRyOw0K KyAgICB9DQorDQorICAgIGlmIChzZWFyY2hQdHItPnR5cGUgPT0gMykgew0K Kw0KKyAgICAgICAgLyoNCisgICAgICAgICAqIE9wdGltaXplZCBzaW5nbGUt dGFnIHNlYXJjaA0KKyAgICAgICAgICovDQorDQorICAgICAgICB1aWQgPSBz ZWFyY2hQdHItPmV4cHItPnVpZDsNCisgICAgICAgIGZvciAobGFzdFB0ciA9 IE5VTEwsIGl0ZW1QdHIgPSBzZWFyY2hQdHItPmNhbnZhc1B0ci0+Zmlyc3RJ dGVtUHRyOw0KKyAgICAgICAgICAgICAgICBpdGVtUHRyICE9IE5VTEw7IGxh c3RQdHIgPSBpdGVtUHRyLCBpdGVtUHRyID0gaXRlbVB0ci0+bmV4dFB0cikg ew0KKyAgICAgICAgICAgIGZvciAodGFnUHRyID0gaXRlbVB0ci0+dGFnUHRy LCBjb3VudCA9IGl0ZW1QdHItPm51bVRhZ3M7DQorICAgICAgICAgICAgICAg ICAgICBjb3VudCA+IDA7IHRhZ1B0cisrLCBjb3VudC0tKSB7DQorICAgICAg ICAgICAgICAgIGlmICgqdGFnUHRyID09IHVpZCkgew0KKyAgICAgICAgICAg ICAgICAgICAgc2VhcmNoUHRyLT5sYXN0UHRyID0gbGFzdFB0cjsNCisgICAg ICAgICAgICAgICAgICAgIHNlYXJjaFB0ci0+Y3VycmVudFB0ciA9IGl0ZW1Q dHI7DQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbVB0cjsNCisg ICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0N CisgICAgfSBlbHNlIHsNCisNCisgICAgLyoNCisgICAgICAgICAqIE5vbmUg b2YgdGhlIGFib3ZlLiAgU2VhcmNoIGZvciBhbiBpdGVtIG1hdGNoaW5nIHRo ZSB0YWcgZXhwcmVzc2lvbi4NCisgICAgICovDQorDQorICAgIGZvciAobGFz dFB0ciA9IE5VTEwsIGl0ZW1QdHIgPSBzZWFyY2hQdHItPmNhbnZhc1B0ci0+ Zmlyc3RJdGVtUHRyOw0KKyAgICAgICAgICAgICAgICBpdGVtUHRyICE9IE5V TEw7IGxhc3RQdHIgPSBpdGVtUHRyLCBpdGVtUHRyID0gaXRlbVB0ci0+bmV4 dFB0cikgew0KKwkgICAgc2VhcmNoUHRyLT5leHByLT5pbmRleCA9IDA7DQor CSAgICBpZiAoVGFnU2VhcmNoRXZhbEV4cHIoc2VhcmNoUHRyLT5leHByLCBp dGVtUHRyKSkgew0KKyAgICAgICAgICAgIHNlYXJjaFB0ci0+bGFzdFB0ciA9 IGxhc3RQdHI7DQorICAgICAgICAgICAgc2VhcmNoUHRyLT5jdXJyZW50UHRy ID0gaXRlbVB0cjsNCisgICAgICAgICAgICByZXR1cm4gaXRlbVB0cjsNCisg ICAgICAgIH0NCisgICAgICAgIH0NCisgICAgfQ0KKyAgICBzZWFyY2hQdHIt Pmxhc3RQdHIgPSBsYXN0UHRyOw0KKyAgICBzZWFyY2hQdHItPnNlYXJjaE92 ZXIgPSAxOw0KKyAgICByZXR1cm4gTlVMTDsNCit9DQorDA0KKy8qDQorICot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQ0KKyAqDQorICogVGFnU2VhcmNoTmV4dCAtLQ0K KyAqDQorICogICAgICBUaGlzIHByb2NlZHVyZSByZXR1cm5zIHN1Y2Nlc3Np dmUgaXRlbXMgdGhhdCBtYXRjaCBhIGdpdmVuDQorICogICAgICB0YWc7ICBp dCBzaG91bGQgYmUgY2FsbGVkIG9ubHkgYWZ0ZXIgVGFnU2VhcmNoRmlyc3Qg aGFzIGJlZW4NCisgKiAgICAgIHVzZWQgdG8gYmVnaW4gYSBzZWFyY2guDQor ICoNCisgKiBSZXN1bHRzOg0KKyAqICAgICAgVGhlIHJldHVybiB2YWx1ZSBp cyBhIHBvaW50ZXIgdG8gdGhlIG5leHQgaXRlbSB0aGF0IG1hdGNoZXMNCisg KiAgICAgIHRoZSB0YWcgZXhwciBzcGVjaWZpZWQgdG8gVGFnU2VhcmNoU2Nh biwgb3IgTlVMTCBpZiBubyBzdWNoDQorICogICAgICBpdGVtIGV4aXN0cy4g ICpTZWFyY2hQdHIgaXMgdXBkYXRlZCBzbyB0aGF0IHRoZSBuZXh0IGNhbGwN CisgKiAgICAgIHRvIHRoaXMgcHJvY2VkdXJlIHdpbGwgcmV0dXJuIHRoZSBu ZXh0IGl0ZW0uDQorICoNCisgKiBTaWRlIGVmZmVjdHM6DQorICogICAgICBO b25lLg0KKyAqDQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAqLw0KKw0KK3N0 YXRpYyBUa19JdGVtICoNCitUYWdTZWFyY2hOZXh0KHNlYXJjaFB0cikNCisg ICAgVGFnU2VhcmNoICpzZWFyY2hQdHI7ICAgICAgICAgICAgICAgLyogUmVj b3JkIGRlc2NyaWJpbmcgc2VhcmNoIGluDQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAqIHByb2dyZXNzLiAqLw0KK3sNCisg ICAgVGtfSXRlbSAqaXRlbVB0ciwgKmxhc3RQdHI7DQorICAgIFRrX1VpZCB1 aWQsICp0YWdQdHI7DQorICAgIGludCBjb3VudDsNCisNCisgICAgLyoNCisg ICAgICogRmluZCBuZXh0IGl0ZW0gaW4gbGlzdCAodGhpcyBtYXkgbm90IGFj dHVhbGx5IGJlIGEgc3VpdGFibGUNCisgICAgICogb25lIHRvIHJldHVybiks IGFuZCByZXR1cm4gaWYgdGhlcmUgYXJlIG5vIGl0ZW1zIGxlZnQuDQorICAg ICAqLw0KKw0KKyAgICBsYXN0UHRyID0gc2VhcmNoUHRyLT5sYXN0UHRyOw0K KyAgICBpZiAobGFzdFB0ciA9PSBOVUxMKSB7DQorICAgICAgICBpdGVtUHRy ID0gc2VhcmNoUHRyLT5jYW52YXNQdHItPmZpcnN0SXRlbVB0cjsNCisgICAg fSBlbHNlIHsNCisgICAgICAgIGl0ZW1QdHIgPSBsYXN0UHRyLT5uZXh0UHRy Ow0KKyAgICB9DQorICAgIGlmICgoaXRlbVB0ciA9PSBOVUxMKSB8fCAoc2Vh cmNoUHRyLT5zZWFyY2hPdmVyKSkgew0KKyAgICAgICAgc2VhcmNoUHRyLT5z ZWFyY2hPdmVyID0gMTsNCisgICAgICAgIHJldHVybiBOVUxMOw0KKyAgICB9 DQorICAgIGlmIChpdGVtUHRyICE9IHNlYXJjaFB0ci0+Y3VycmVudFB0cikg ew0KKyAgICAgICAgLyoNCisgICAgICAgICAqIFRoZSBzdHJ1Y3R1cmUgb2Yg dGhlIGxpc3QgaGFzIGNoYW5nZWQuICBQcm9iYWJseSB0aGUNCisgICAgICAg ICAqIHByZXZpb3VzbHktcmV0dXJuZWQgaXRlbSB3YXMgcmVtb3ZlZCBmcm9t IHRoZSBsaXN0Lg0KKyAgICAgICAgICogSW4gdGhpcyBjYXNlLCBkb24ndCBh ZHZhbmNlIGxhc3RQdHI7ICBqdXN0IHJldHVybg0KKyAgICAgICAgICogaXRz IG5ldyBzdWNjZXNzb3IgKGkuZS4gZG8gbm90aGluZyBoZXJlKS4NCisgICAg ICAgICAqLw0KKyAgICB9IGVsc2Ugew0KKyAgICAgICAgbGFzdFB0ciA9IGl0 ZW1QdHI7DQorICAgICAgICBpdGVtUHRyID0gbGFzdFB0ci0+bmV4dFB0cjsN CisgICAgfQ0KKw0KKyAgICBpZiAoc2VhcmNoUHRyLT50eXBlID09IDIpIHsN CisNCisgICAgICAgIC8qDQorICAgICAgICAgKiBBbGwgaXRlbXMgbWF0Y2gu DQorICAgICAgICAgKi8NCisNCisgICAgICAgIHNlYXJjaFB0ci0+bGFzdFB0 ciA9IGxhc3RQdHI7DQorICAgICAgICBzZWFyY2hQdHItPmN1cnJlbnRQdHIg PSBpdGVtUHRyOw0KKyAgICAgICAgcmV0dXJuIGl0ZW1QdHI7DQorICAgIH0N CisNCisgICAgaWYgKHNlYXJjaFB0ci0+dHlwZSA9PSAzKSB7DQorDQorICAg ICAgICAvKg0KKyAgICAgICAgICogT3B0aW1pemVkIHNpbmdsZS10YWcgc2Vh cmNoDQorICAgICAgICAgKi8NCisNCisgICAgICAgIHVpZCA9IHNlYXJjaFB0 ci0+ZXhwci0+dWlkOw0KKyAgICAgICAgZm9yICggOyBpdGVtUHRyICE9IE5V TEw7IGxhc3RQdHIgPSBpdGVtUHRyLCBpdGVtUHRyID0gaXRlbVB0ci0+bmV4 dFB0cikgew0KKyAgICAgICAgICAgIGZvciAodGFnUHRyID0gaXRlbVB0ci0+ dGFnUHRyLCBjb3VudCA9IGl0ZW1QdHItPm51bVRhZ3M7DQorICAgICAgICAg ICAgICAgICAgICBjb3VudCA+IDA7IHRhZ1B0cisrLCBjb3VudC0tKSB7DQor ICAgICAgICAgICAgICAgIGlmICgqdGFnUHRyID09IHVpZCkgew0KKyAgICAg ICAgICAgICAgICAgICAgc2VhcmNoUHRyLT5sYXN0UHRyID0gbGFzdFB0cjsN CisgICAgICAgICAgICAgICAgICAgIHNlYXJjaFB0ci0+Y3VycmVudFB0ciA9 IGl0ZW1QdHI7DQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbVB0 cjsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIH0NCisgICAg ICAgIH0NCisgICAgICAgIHNlYXJjaFB0ci0+bGFzdFB0ciA9IGxhc3RQdHI7 DQorICAgICAgICBzZWFyY2hQdHItPnNlYXJjaE92ZXIgPSAxOw0KKyAgICAg ICAgcmV0dXJuIE5VTEw7DQorICAgIH0NCisNCisgICAgLyoNCisgICAgICog RWxzZS4uLi4gZXZhbHVhdGUgdGFnIGV4cHJlc3Npb24NCisgICAgICovDQor DQorICAgIGZvciAoIDsgaXRlbVB0ciAhPSBOVUxMOyBsYXN0UHRyID0gaXRl bVB0ciwgaXRlbVB0ciA9IGl0ZW1QdHItPm5leHRQdHIpIHsNCisgICAgICAg IHNlYXJjaFB0ci0+ZXhwci0+aW5kZXggPSAwOw0KKyAgICAgICAgaWYgKFRh Z1NlYXJjaEV2YWxFeHByKHNlYXJjaFB0ci0+ZXhwciwgaXRlbVB0cikpIHsN CisgICAgICAgICAgICBzZWFyY2hQdHItPmxhc3RQdHIgPSBsYXN0UHRyOw0K KyAgICAgICAgICAgIHNlYXJjaFB0ci0+Y3VycmVudFB0ciA9IGl0ZW1QdHI7 DQorICAgICAgICAgICAgcmV0dXJuIGl0ZW1QdHI7DQorICAgICAgICB9DQor ICAgIH0NCisgICAgc2VhcmNoUHRyLT5sYXN0UHRyID0gbGFzdFB0cjsNCisg ICAgc2VhcmNoUHRyLT5zZWFyY2hPdmVyID0gMTsNCisgICAgcmV0dXJuIE5V TEw7DQorfQ0KKyNlbmRpZiAvKiBVU0VfT0xEX1RBR19TRUFSQ0ggKi8NCisN CisNCisNCisNCisNCisNCisNCg== --Multipart_Fri__1_Feb_2002_16:20:55_-0800_0823e280--