Received: from localhost (unknown [200.46.204.183]) by postgresql.org (Postfix) with ESMTP id 59A8B64FCBA for ; Fri, 5 Sep 2008 17:06:23 -0300 (ADT) Received: from postgresql.org ([200.46.204.86]) by localhost (mx1.hub.org [200.46.204.183]) (amavisd-maia, port 10024) with ESMTP id 40436-02 for ; Fri, 5 Sep 2008 17:06:17 -0300 (ADT) X-Greylist: from auto-whitelisted by SQLgrey-1.7.6 Received: from mail.esilo.com (downloads.esilo.com [63.150.152.211]) by postgresql.org (Postfix) with ESMTP id 6CDD764FF8A for ; Fri, 5 Sep 2008 17:06:16 -0300 (ADT) Received: from [10.0.0.2] (fwext-esilo-jupiter.esilo.com [64.135.45.146]) (authenticated bits=0) by mail.esilo.com (8.13.1/8.13.1) with ESMTP id m85K6Abr032494; Fri, 5 Sep 2008 16:06:11 -0400 Message-ID: <48C191A7.3000205@esilo.com> Date: Fri, 05 Sep 2008 16:08:07 -0400 From: Andrew Chernow User-Agent: Thunderbird 2.0.0.16 (Windows/20080708) MIME-Version: 1.0 To: Alvaro Herrera CC: PostgreSQL-development , Merlin Moncure Subject: Re: [PATCHES] libpq events patch (with sgml docs) References: <48C18533.2000204@esilo.com> <20080905192215.GK4353@alvh.no-ip.org> <48C18B48.509@esilo.com> <20080905194853.GL4353@alvh.no-ip.org> In-Reply-To: <20080905194853.GL4353@alvh.no-ip.org> Content-Type: multipart/mixed; boundary="------------040306020308000503090001" X-Virus-Scanned: Maia Mailguard 1.0.1 X-Spam-Status: No, hits=0 tagged_above=0 required=5 tests=none X-Spam-Level: X-Archive-Number: 200809/374 X-Sequence-Number: 123503 This is a multi-part message in MIME format. --------------040306020308000503090001 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Alvaro Herrera wrote: > Andrew Chernow escribió: > >> * and the Perl5 interface, so maybe it's not so unreasonable. >> + * >> + * Updated April 2008 - If conn is not NULL, event states will be copied >> + * from the PGconn to the created PGresult. >> */ > > Don't do this either. We don't really need to know when the thing was > Changed that and made it one paragraph. >> + /* resultalloc the attribute names. The above memcpy has the attr >> + * names pointing at the callers provided attDescs memory. >> + */ > > "resultalloc"? Why not just "allocate"? > Because resultalloc is what a PGresult uses to allocate its attribute names (See line 513 of fe-protocol3.c). Also, PQclear frees its memory blocks, not individual items like attname. >> * PQclear - >> * free's the memory associated with a PGresult >> */ > > I'd add a comment here stating why the event name is not deallocated; > otherwise it just looks like it's being leaked. > > The event name is being deallocated. -- Andrew Chernow eSilo, LLC every bit counts http://www.esilo.com/ --------------040306020308000503090001 Content-Type: text/plain; name="libpq-events.patch" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="libpq-events.patch" SW5kZXg6IGRvYy9zcmMvc2dtbC9saWJwcS5zZ21sCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6 IC9wcm9qZWN0cy9jdnNyb290L3Bnc3FsL2RvYy9zcmMvc2dtbC9saWJwcS5zZ21sLHYKcmV0 cmlldmluZyByZXZpc2lvbiAxLjI2MApkaWZmIC1DNiAtcjEuMjYwIGxpYnBxLnNnbWwKKioq IGRvYy9zcmMvc2dtbC9saWJwcS5zZ21sCTI3IEp1biAyMDA4IDAyOjQ0OjMxIC0wMDAwCTEu MjYwCi0tLSBkb2Mvc3JjL3NnbWwvbGlicHEuc2dtbAk1IFNlcCAyMDA4IDIwOjAzOjAzIC0w MDAwCioqKioqKioqKioqKioqKgoqKiogMjA5MiwyMTAzICoqKioKLS0tIDIwOTIsMjIyMiAt LS0tCiAgICAgICAgICBOb3RlIHRoYXQgPGZ1bmN0aW9uPlBRY2xlYXI8L2Z1bmN0aW9uPiBz aG91bGQgZXZlbnR1YWxseSBiZSBjYWxsZWQKICAgICAgICAgIG9uIHRoZSBvYmplY3QsIGp1 c3QgYXMgd2l0aCBhIDxzdHJ1Y3RuYW1lPlBHcmVzdWx0PC9zdHJ1Y3RuYW1lPgogICAgICAg ICAgcmV0dXJuZWQgYnkgPGFwcGxpY2F0aW9uPmxpYnBxPC9hcHBsaWNhdGlvbj4gaXRzZWxm LgogICAgICAgICA8L3BhcmE+CiAgICAgICAgPC9saXN0aXRlbT4KICAgICAgIDwvdmFybGlz dGVudHJ5PgorIAorICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICA8dGVybT4KKyAgICAg ICAgPGZ1bmN0aW9uPlBRY29weVJlc3VsdDwvZnVuY3Rpb24+CisgICAgICAgIDxpbmRleHRl cm0+CisgICAgICAgICA8cHJpbWFyeT5QUWNvcHlSZXN1bHQ8L3ByaW1hcnk+CisgICAgICAg IDwvaW5kZXh0ZXJtPgorICAgICAgIDwvdGVybT4KKyAKKyAgICAgICA8bGlzdGl0ZW0+Cisg ICAgICAgIDxwYXJhPgorICAgICAgICAgTWFrZXMgYSBjb3B5IG9mIGEgPHN0cnVjdG5hbWU+ UEdyZXN1bHQ8L3N0cnVjdG5hbWU+IG9iamVjdC4KKyAgICAgICAgIDxzeW5vcHNpcz4KKyAg ICAgICAgICBQR3Jlc3VsdCAqUFFjb3B5UmVzdWx0KGNvbnN0IFBHcmVzdWx0ICpzcmMsIGlu dCBmbGFncyk7CisgICAgICAgICA8L3N5bm9wc2lzPgorICAgICAgICA8L3BhcmE+CisgCisg ICAgICAgIDxwYXJhPgorICAgICAgICAgVGhlIHJldHVybmVkIHJlc3VsdCBpcyBhbHdheXMg cHV0IGludG8gPGxpdGVyYWw+UEdSRVNfVFVQTEVTX09LPC9saXRlcmFsPiBzdGF0dXMuCisg ICAgICAgICBJdCBpcyBub3QgbGlua2VkIHRvIHRoZSBzb3VyY2UgcmVzdWx0IGluIGFueSB3 YXkgYW5kCisgICAgICAgICA8ZnVuY3Rpb24+UFFjbGVhcjwvZnVuY3Rpb24+IG11c3QgYmUg Y2FsbGVkIHdoZW4gdGhlIHJlc3VsdCBpcyBubyBsb25nZXIgbmVlZGVkLgorICAgICAgICAg SWYgdGhlIGZ1bmN0aW9uIGZhaWxzLCBOVUxMIGlzIHJldHVybmVkLgorICAgICAgICA8L3Bh cmE+CisgCisgICAgICAgIDxwYXJhPgorICAgICAgICAgT3B0aW9uYWxseSwgdGhlIDxwYXJh bWV0ZXI+ZmxhZ3M8L3BhcmFtZXRlcj4gYXJndW1lbnQgY2FuIGJlIHVzZWQgdG8gY29weQor ICAgICAgICAgbW9yZSBwYXJ0cyBvZiB0aGUgcmVzdWx0LiAgPGxpdGVyYWw+UEdfQ09QWVJF U19BVFRSUzwvbGl0ZXJhbD4gd2lsbCBjb3B5IHRoZQorICAgICAgICAgc291cmNlIHJlc3Vs dCdzIGF0dHJpYnV0ZXMuICA8bGl0ZXJhbD5QR19DT1BZUkVTX1RVUExFUzwvbGl0ZXJhbD4g d2lsbCBjb3B5CisgICAgICAgICB0aGUgc291cmNlIHJlc3VsdCdzIHR1cGxlcy4gIFRoaXMg aW1wbGllcyBjb3B5aW5nIHRoZSBhdHRycywgYmVpbmcgaG93IHRoZQorICAgICAgICAgYXR0 cnMgYXJlIG5lZWRlZCBieSB0aGUgdHVwbGVzLiAgPGxpdGVyYWw+UEdfQ09QWVJFU19FVkVO VFM8L2xpdGVyYWw+IHdpbGwKKyAgICAgICAgIGNvcHkgdGhlIHNvdXJjZSByZXN1bHQncyBl dmVudHMuICA8bGl0ZXJhbD5QR19DT1BZUkVTX05PVElDRUhPT0tTPC9saXRlcmFsPgorICAg ICAgICAgd2lsbCBjb3B5IHRoZSBzb3VyY2UgcmVzdWx0J3Mgbm90aWZ5IGhvb2tzLgorICAg ICAgICA8L3BhcmE+CisgICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5 PgorIAorICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICA8dGVybT4KKyAgICAgICAgPGZ1 bmN0aW9uPlBRc2V0UmVzdWx0QXR0cnM8L2Z1bmN0aW9uPgorICAgICAgICA8aW5kZXh0ZXJt PgorICAgICAgICAgPHByaW1hcnk+UFFzZXRSZXN1bHRBdHRyczwvcHJpbWFyeT4KKyAgICAg ICAgPC9pbmRleHRlcm0+CisgICAgICAgPC90ZXJtPgorIAorICAgICAgIDxsaXN0aXRlbT4K KyAgICAgICAgPHBhcmE+CisgICAgICAgICBTZXRzIHRoZSBhdHRyaWJ1dGVzIG9mIGEgPHN0 cnVjdG5hbWU+UEdyZXN1bHQ8L3N0cnVjdG5hbWU+IG9iamVjdC4KKyAgICAgICAgIDxzeW5v cHNpcz4KKyAgICAgICAgICBpbnQgUFFzZXRSZXN1bHRBdHRycyhQR3Jlc3VsdCAqcmVzLCBp bnQgbnVtQXR0cmlidXRlcywgUEdyZXNBdHREZXNjICphdHREZXNjcyk7CisgICAgICAgICA8 L3N5bm9wc2lzPgorICAgICAgICA8L3BhcmE+CisgCisgICAgICAgIDxwYXJhPgorICAgICAg ICAgVGhlIHByb3ZpZGVkIDxwYXJhbWV0ZXI+YXR0RGVzY3M8L3BhcmFtZXRlcj4gYXJlIGNv cGllZCBpbnRvIHRoZSByZXN1bHQsIHRodXMgdGhlCisgICAgICAgICA8cGFyYW1ldGVyPmF0 dERlc2NzPC9wYXJhbWV0ZXI+IGFyZSBubyBsb25nZXIgbmVlZGVkIGJ5IDxwYXJhbWV0ZXI+ cmVzPC9wYXJhbWV0ZXI+IGFmdGVyCisgICAgICAgICB0aGUgZnVuY3Rpb24gcmV0dXJucy4g IElmIHRoZSA8cGFyYW1ldGVyPmF0dERlc2NzPC9wYXJhbWV0ZXI+IGFyZSBOVUxMIG9yCisg ICAgICAgICA8cGFyYW1ldGVyPm51bUF0dHJpYnV0ZXM8L3BhcmFtZXRlcj4gaXMgbGVzcyB0 aGFuIG9uZSwgdGhlIHJlcXVlc3QgaXMgaWdub3JlZCBhbmQKKyAgICAgICAgIHRoZSBmdW5j dGlvbiBzdWNjZWVkcy4gIElmIDxwYXJhbWV0ZXI+cmVzPC9wYXJhbWV0ZXI+IGFscmVhZHkg Y29udGFpbnMgYXR0cmlidXRlcywKKyAgICAgICAgIHRoZSBmdW5jdGlvbiB3aWxsIGZhaWwu ICBJZiB0aGUgZnVuY3Rpb24gZmFpbHMsIHRoZSByZXR1cm4gdmFsdWUgaXMgemVyby4gIElm IHRoZQorICAgICAgICAgZnVuY3Rpb24gc3VjY2VlZHMsIHRoZSByZXR1cm4gdmFsdWUgaXMg bm9uLXplcm8uCisgICAgICAgIDwvcGFyYT4KKyAgICAgICA8L2xpc3RpdGVtPgorICAgICAg PC92YXJsaXN0ZW50cnk+CisgCisgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgIDx0ZXJt PgorICAgICAgICA8ZnVuY3Rpb24+UFFzZXR2YWx1ZTwvZnVuY3Rpb24+CisgICAgICAgIDxp bmRleHRlcm0+CisgICAgICAgICA8cHJpbWFyeT5QUXNldHZhbHVlPC9wcmltYXJ5PgorICAg ICAgICA8L2luZGV4dGVybT4KKyAgICAgICA8L3Rlcm0+CisgCisgICAgICAgPGxpc3RpdGVt PgorICAgICAgICA8cGFyYT4KKyAgICAgICAgIFNldHMgYSB0dXBsZSBmaWVsZCB2YWx1ZSBv ZiBhIDxzdHJ1Y3RuYW1lPlBHcmVzdWx0PC9zdHJ1Y3RuYW1lPiBvYmplY3QuCisgICAgICAg ICA8c3lub3BzaXM+CisgICAgICAgICAgaW50IFBRc2V0dmFsdWUoUEdyZXN1bHQgKnJlcywg aW50IHR1cF9udW0sIGludCBmaWVsZF9udW0sIGNoYXIgKnZhbHVlLCBpbnQgbGVuKTsKKyAg ICAgICAgIDwvc3lub3BzaXM+CisgICAgICAgIDwvcGFyYT4KKyAKKyAgICAgICAgPHBhcmE+ CisgICAgICAgICBUaGUgZnVuY3Rpb24gd2lsbCBhdXRvbWF0aWNhbGx5IGdyb3cgdGhlIHJl c3VsdCdzIGludGVybmFsIHR1cGxlcyBhcnJheSBhcyBuZWVkZWQuCisgICAgICAgICBUaGUg PHBhcmFtZXRlcj50dXBfbnVtPC9wYXJhbWV0ZXI+IGFyZ3VtZW50IG11c3QgYmUgbGVzcyB0 aGFuIG9yIGVxdWFsIHRvCisgICAgICAgICA8ZnVuY3Rpb24+UFFudHVwbGVzPC9mdW5jdGlv bj4sIG1lYW5pbmcgdGhpcyBmdW5jdGlvbiBjYW4gb25seSBncm93IHRoZQorICAgICAgICAg dHVwbGVzIGFycmF5IGluIG9yZGVyIG9uZSB0dXBsZSBhdCBhIHRpbWUuICBBbHRob3VnaCwg YW55IGZpZWxkIGZyb20gYW55CisgICAgICAgICBleGlzdGluZyB0dXBsZSBjYW4gYmUgbW9k aWZpZWQgaW4gYW55IG9yZGVyLiAgSWYgYSB2YWx1ZSBhdCA8cGFyYW1ldGVyPmZpZWxkX251 bTwvcGFyYW1ldGVyPgorICAgICAgICAgYWxyZWFkeSBlaXhzdHMsIGl0IHdpbGwgYmUgb3Zl cndyaXR0ZW4uICBJZiA8cGFyYW1ldGVyPmxlbjwvcGFyYW1ldGVyPiBpcyA8bGl0ZXJhbD4t MTwvbGl0ZXJhbD4gb3IKKyAgICAgICAgIDxwYXJhbWV0ZXI+dmFsdWU8L3BhcmFtZXRlcj4g aXMgPGxpdGVyYWw+TlVMTDwvbGl0ZXJhbD4sIHRoZSBmaWVsZCB2YWx1ZSB3aWxsCisgICAg ICAgICBiZSBzZXQgdG8gYW4gU1FMIDxsaXRlcmFsPk5VTEw8L2xpdGVyYWw+LiAgVGhlIDxw YXJhbWV0ZXI+dmFsdWU8L3BhcmFtZXRlcj4gaXMgY29waWVkCisgICAgICAgICBpbnRvIHJl c3VsdCdzIHByaXZhdGUgc3RvcmFnZSwgdGh1cyBubyBsb25nZXIgbmVlZGVkIGJ5IDxwYXJh bWV0ZXI+cmVzPC9wYXJhbWV0ZXI+IGFmdGVyCisgICAgICAgICB0aGUgZnVuY3Rpb24gcmV0 dXJucy4gIElmIHRoZSBmdW5jdGlvbiBmYWlscywgdGhlIHJldHVybiB2YWx1ZQorICAgICAg ICAgaXMgemVyby4gIElmIHRoZSBmdW5jdGlvbiBzdWNjZWVkcywgdGhlIHJldHVybiB2YWx1 ZSBpcyBub24temVyby4KKyAgICAgICAgPC9wYXJhPgorICAgICAgIDwvbGlzdGl0ZW0+Cisg ICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAKKyAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAg PHRlcm0+CisgICAgICAgIDxmdW5jdGlvbj5QUXJlc3VsdEFsbG9jPC9mdW5jdGlvbj4KKyAg ICAgICAgPGluZGV4dGVybT4KKyAgICAgICAgIDxwcmltYXJ5PlBRcmVzdWx0QWxsb2M8L3By aW1hcnk+CisgICAgICAgIDwvaW5kZXh0ZXJtPgorICAgICAgIDwvdGVybT4KKyAKKyAgICAg ICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgQWxsb2NhdGUgc3Vic2lk aWFyeSBzdG9yYWdlIGZvciBhIDxzdHJ1Y3RuYW1lPlBHcmVzdWx0PC9zdHJ1Y3RuYW1lPiBv YmplY3QuCisgICAgICAgICA8c3lub3BzaXM+CisgICAgICAgICAgdm9pZCAqUFFyZXN1bHRB bGxvYyhQR3Jlc3VsdCAqcmVzLCBzaXplX3QgbkJ5dGVzKTsKKyAgICAgICAgIDwvc3lub3Bz aXM+CisgICAgICAgIDwvcGFyYT4KKyAKKyAgICAgICAgPHBhcmE+CisgICAgICAgICBBbnkg bWVtb3J5IGFsbG9jYXRlZCB3aXRoIHRoaXMgZnVuY3Rpb24sIHdpbGwgYmUgZnJlZWQgd2hl bgorICAgICAgICAgPHBhcmFtZXRlcj5yZXM8L3BhcmFtZXRlcj4gaXMgY2xlYXJlZC4gIElm IHRoZSBmdW5jdGlvbiBmYWlscywKKyAgICAgICAgIHRoZSByZXR1cm4gdmFsdWUgaXMgPGxp dGVyYWw+TlVMTDwvbGl0ZXJhbD4uCisgICAgICAgIDwvcGFyYT4KKyAgICAgICA8L2xpc3Rp dGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgIDwvdmFyaWFibGVsaXN0PgogICAg IDwvcGFyYT4KICAgIDwvc2VjdDI+CiAgCiAgICA8c2VjdDIgaWQ9ImxpYnBxLWV4ZWMtc2Vs ZWN0LWluZm8iPgogICAgIDx0aXRsZT5SZXRyaWV2aW5nIFF1ZXJ5IFJlc3VsdCBJbmZvcm1h dGlvbjwvdGl0bGU+CioqKioqKioqKioqKioqKgoqKiogNDU1OCw0NTY5ICoqKioKLS0tIDQ2 NzcsNTE1NyAtLS0tCiAgICAgIDwvbGlzdGl0ZW0+CiAgICAgPC92YXJsaXN0ZW50cnk+CiAg ICA8L3ZhcmlhYmxlbGlzdD4KICAKICAgPC9zZWN0MT4KICAKKyAgPHNlY3QxIGlkPSJsaWJw cS1ldmVudHMiPgorICAgPHRpdGxlPkV2ZW50IFN5c3RlbTwvdGl0bGU+CisgCisgICA8cGFy YT4KKyAgICBUaGUgZXZlbnQgc3lzdGVtIGlzIGRlc2lnbmVkIHRvIG5vdGlmeSByZWdpc3Rl cmVkIGV2ZW50IGhhbmRsZXJzCisgICAgYWJvdXQgcGFydGljdWxhciBsaWJwcSBldmVudHM7 IHN1Y2ggYXMgdGhlIGNyZWF0aW9uIG9yIGRlc3RydWN0aW9uCisgICAgb2YgPHN0cnVjdG5h bWU+UEdjb25uPC9zdHJ1Y3RuYW1lPiBhbmQgPHN0cnVjdG5hbWU+UEdyZXN1bHQ8L3N0cnVj dG5hbWU+CisgICAgb2JqZWN0cy4gIE9uZSB1c2UgY2FzZSBpcyB0aGF0IHRoaXMgYWxsb3dz IGFwcGxpY2F0aW9ucyB0byBhc3NvY2lhdGUKKyAgICB0aGVpciBvd24gZGF0YSB3aXRoIGEg PHN0cnVjdG5hbWU+UEdjb25uPC9zdHJ1Y3RuYW1lPiBhbmQKKyAgICA8c3RydWN0bmFtZT5Q R3Jlc3VsdDwvc3RydWN0bmFtZT4sIHRoYXQgY2FuIHJldHJpZXZlZCB2aWEKKyAgICA8ZnVu Y3Rpb24+UFFpbnN0YW5jZURhdGE8L2Z1bmN0aW9uPiBhbmQgPGZ1bmN0aW9uPlBRcmVzdWx0 SW5zdGFuY2VEYXRhPC9mdW5jdGlvbj4uCisgICAgQmFzaWNhbGx5LCBpdHMgbGlrZSBhZGRp bmcgbWVtYmVycyB0byB0aGUgb3BhcXVlIGNvbm4gb3IgcmVzdWx0CisgICAgc3RydWN0dXJl cyBhdCBydW50aW1lLgorICAgPC9wYXJhPgorIAorICAgPHBhcmE+CisgICAgQmVsb3cgaXMg YSBsaXN0IG9mIGV2ZW50IHN5c3RlbSBjb25jZXB0czoKKyAgICA8aXRlbWl6ZWRsaXN0IG1h cms9J2J1bGxldCc+CisgICAgIDxsaXN0aXRlbT4KKyAgICAgIDxwYXJhPgorICAgICAgIDxs aXRlcmFsPmV2ZW50SWQ8L2xpdGVyYWw+IC0gSWRlbnRpZmllcyB3aGljaCBldmVudCB3YXMg ZmlyZWQgYnkgbGlicHEuICBBbGwKKyAgICAgICBldmVudHMgYmVnaW4gd2l0aCA8bGl0ZXJh bD5QR0VWVF88L2xpdGVyYWw+LgorICAgICAgPC9wYXJhPgorICAgICA8L2xpc3RpdGVtPgor ICAgICA8bGlzdGl0ZW0+CisgICAgICA8cGFyYT4KKyAgICAgICA8bGl0ZXJhbD5ldmVudElu Zm88L2xpdGVyYWw+IC0gRXZlcnkgPGxpdGVyYWw+ZXZlbnRJZDwvbGl0ZXJhbD4gaGFzIGEg Y29ycmVzcG9uZGluZworICAgICAgIGV2ZW50IGluZm8gc3RydWN0dXJlLCB0aGF0IGNvbnRh aW5zIGRhdGEgdG8gYWlkIGluIHByb2Nlc3NpbmcgdGhlIGV2ZW50LgorICAgICAgPC9wYXJh PgorICAgICA8L2xpc3RpdGVtPgorICAgICA8bGlzdGl0ZW0+CisgICAgICA8cGFyYT4KKyAg ICAgICA8bGl0ZXJhbD5pbnN0YW5jZURhdGE8L2xpdGVyYWw+IC0gVGhlIGluc3RhbmNlIGRh dGEgaXMgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCBhCisgICAgICAgPHN0cnVjdG5hbWU+UEdj b25uPC9zdHJ1Y3RuYW1lPiBvciA8c3RydWN0bmFtZT5QR3Jlc3VsdDwvc3RydWN0bmFtZT4u ICBUaGUgZGF0YSBpcworICAgICAgIGNyZWF0ZWQgYW5kIGRlc3Ryb3llZCBhbG9uZyB3aXRo IHdpdGggdGhlIGNvbm5lY3Rpb24gb3IgcmVzdWx0LgorICAgICAgIFR5cGljYWxseSwgaW5z dGFuY2UgZGF0YSBpcyBjcmVhdGVkIGluIHJlc3BvbnNlIHRvCisgICAgICAgYSA8bGl0ZXJh bD5QR0VWVF9SRUdJU1RFUjwvbGl0ZXJhbD4gZXZlbnQsIGJ1dCBjYW4gYmUgY3JlYXRlZCBh dCBhbnkgdGltZSBvcgorICAgICAgIG5vdCBhdCBhbGwuICBNYW5hZ2VtZW50IG9mIGluc3Rh bmNlIGRhdGEgaXMgZG9uZSB1c2luZyB0aGUgPGZ1bmN0aW9uPlBRaW5zdGFuY2VEYXRhPC9m dW5jdGlvbj4sCisgICAgICAgPGZ1bmN0aW9uPlBRc2V0SW5zdGFuY2VEYXRhPC9mdW5jdGlv bj4sIDxmdW5jdGlvbj5QUXJlc3VsdEluc3RhbmNlRGF0YTwvZnVuY3Rpb24+IGFuZAorICAg ICAgIDxmdW5jdGlvbj5QUXNldFJlc3VsdEluc3RhbmNlRGF0YTwvZnVuY3Rpb24+IGZ1bmN0 aW9ucy4KKyAgICAgIDwvcGFyYT4KKyAgICAgPC9saXN0aXRlbT4KKyAgICA8L2l0ZW1pemVk bGlzdD4KKyAgIDwvcGFyYT4KKyAKKyAKKyAgIDxzZWN0MiBpZD0ibGlicHEtZXZlbnRzLXR5 cGVzIj4KKyAgICA8dGl0bGU+RXZlbnQgVHlwZXM8L3RpdGxlPgorICAgICA8cGFyYT4KKyAg ICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgPHRl cm0+PGxpdGVyYWw+UEdFVlRfUkVHSVNURVI8L2xpdGVyYWw+PC90ZXJtPgorICAgICAgICA8 bGlzdGl0ZW0+CisgICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGUgcmVnaXN0ZXIgZXZl bnQgb2NjdXJzIHdoZW4gPGZ1bmN0aW9uPlBRcmVnaXN0ZXJFdmVudFByb2M8L2Z1bmN0aW9u PiBpcworICAgICAgICAgIGNhbGxlZC4gIEl0IGlzIHRoZSBpZGVhbCB0aW1lIHRvIGluaXRp YWxpemUgYW55IDxsaXRlcmFsPmluc3RhbmNlRGF0YTwvbGl0ZXJhbD4KKyAgICAgICAgICBh biBldmVudCBwcm9jZWR1cmUgbWF5IG5lZWQuICBPbmx5IG9uZSByZWdpc3RlciBldmVudCB3 aWxsIGJlIGZpcmVkIHBlciBjb25uZWN0aW9uLgorICAgICAgICAgIElmIHRoZSBldmVudCBw cm9jZWR1cmUgZmFpbHMsIHRoZSByZWdpc3RyYXRpb24gaXMgYWJvcnRlZC4KKyAKKyAgICAg ICAgIDxzeW5vcHNpcz4KKyB0eXBlZGVmIHN0cnVjdAorIHsKKyAgICAgY29uc3QgUEdjb25u ICpjb25uOworIH0gUEdFdmVudFJlZ2lzdGVyOzwvc3lub3BzaXM+CisgCisgICAgICAgICAg V2hlbiBhIDxsaXRlcmFsPlBHRVZUX1JFR0lTVEVSPC9saXRlcmFsPiBldmVudCBpcyByZWNl aXZlZCwgdGhlIDxwYXJhbWV0ZXI+ZXZ0SW5mbzwvcGFyYW1ldGVyPgorICAgICAgICAgIHBv aW50ZXIgc2hvdWxkIGJlIGNhc3RlZCB0byBhIDxzdHJ1Y3RuYW1lPlBHRXZlbnRSZWdpc3Rl cio8L3N0cnVjdG5hbWU+LiAgVGhpcyBzdHJ1Y3R1cmUKKyAgICAgICAgICBjb250YWlucyBh IDxzdHJ1Y3RuYW1lPlBHY29ubjwvc3RydWN0bmFtZT4gdGhhdCBzaG91bGQgYmUgaW4gdGhl IDxsaXRlcmFsPkNPTk5FQ1RJT05fT0s8L2xpdGVyYWw+CisgICAgICAgICAgc3RhdHVzOyBn dWFyYW50ZWVkIGlmIG9uZSBjYWxscyA8ZnVuY3Rpb24+UFFyZWdpc3RlckV2ZW50UHJvYzwv ZnVuY3Rpb24+IHJpZ2h0IGFmdGVyIG9idGFpbmluZworICAgICAgICAgIGEgZ29vZCA8c3Ry dWN0bmFtZT5QR2Nvbm48L3N0cnVjdG5hbWU+LiAgVGhlIGNvbm5lY3Rpb24gY2FuIGJlIHVz ZWQgdG8gaW5pdGlhbGl6ZSBhbnkKKyAgICAgICAgICBhcHBsaWNhdGlvbiBzcGVjaWZpYyBu ZWVkczogbGlrZSBhbGxvY2F0aW5nIHN0cnVjdHVyZXMgYXMgdGhlIGV2ZW50IDxsaXRlcmFs Pmluc3RhbmNlRGF0YTwvbGl0ZXJhbD4KKyAgICAgICAgICBvciBleGVjdXRpbmcgU1FMIHN0 YXRlbWVudHMuCisgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+CisgICAg ICAgPC92YXJsaXN0ZW50cnk+CisgCisgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAg PHRlcm0+PGxpdGVyYWw+UEdFVlRfQ09OTlJFU0VUPC9saXRlcmFsPjwvdGVybT4KKyAgICAg ICAgPGxpc3RpdGVtPgorICAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhlIGNvbm5lY3Rp b24gcmVzZXQgZXZlbnQgaXMgZmlyZWQgaW4gcmVzcG9uc2UgdG8gYSA8ZnVuY3Rpb24+UFFy ZXNldDwvZnVuY3Rpb24+IG9yIDxmdW5jdGlvbj5QUXJlc2V0UG9sbDwvZnVuY3Rpb24+Lgor ICAgICAgICAgIEluIGJvdGggY2FzZXMsIHRoZSBldmVudCBpcyBvbmx5IGZpcmVkIGlmIHRo ZSByZXNldCB3YXMgc3VjY2Vzc2Z1bC4gIElmIHRoZSBldmVudCBwcm9jZWR1cmUgZmFpbHMs CisgICAgICAgICAgdGhlIGVudGlyZSBjb25uZWN0aW9uIHJlc2V0IHdpbGwgZmFpbDsgdGhl IDxzdHJ1Y3RuYW1lPlBHY29ubjwvc3RydWN0bmFtZT4gaXMgcHV0IGludG8KKyAgICAgICAg ICA8bGl0ZXJhbD5DT05ORUNUSU9OX0JBRDwvbGl0ZXJhbD4gc3RhdHVzIGFuZCA8ZnVuY3Rp b24+UFFyZXNldFBvbGw8L2Z1bmN0aW9uPiB3aWxsIHJldHVybgorICAgICAgICAgIDxsaXRl cmFsPlBHUkVTX1BPTExJTkdfRkFJTEVEPC9saXRlcmFsPi4KKyAgICAgICAgIDxzeW5vcHNp cz4KKyB0eXBlZGVmIHN0cnVjdAorIHsKKyAgICAgY29uc3QgUEdjb25uICpjb25uOworIH0g UEdFdmVudFJlc2V0Ozwvc3lub3BzaXM+CisgCisgICAgICAgICAgV2hlbiBhIDxsaXRlcmFs PlBHRVZUX0NPTk5SRVNFVDwvbGl0ZXJhbD4gZXZlbnQgaXMgcmVjZWl2ZWQsIHRoZSA8cGFy YW1ldGVyPmV2dEluZm88L3BhcmFtZXRlcj4KKyAgICAgICAgICBwb2ludGVyIHNob3VsZCBi ZSBjYXN0ZWQgdG8gYSA8c3RydWN0bmFtZT5QR0V2ZW50UmVzZXQqPC9zdHJ1Y3RuYW1lPi4g IEFsdGhvdWdoIHRoZSBjb250YWluZWQKKyAgICAgICAgICA8c3RydWN0bmFtZT5QR2Nvbm48 L3N0cnVjdG5hbWU+IHdhcyBqdXN0IHJlc2V0LCBhbGwgZXZlbnQgZGF0YSByZW1haW5zIHVu Y2hhbmdlZC4gIFRoaXMgZXZlbnQKKyAgICAgICAgICBzaG91bGQgYmUgdXNlZCB0byByZXNl dC9yZWxvYWQvcmVxdWVyeSBhbnkgYXNzb2NhaXRlZCA8bGl0ZXJhbD5pbnN0YW5jZURhdGE8 L2xpdGVyYWw+LgorICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L2xpc3RpdGVtPgorICAg ICAgIDwvdmFybGlzdGVudHJ5PgorIAorICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAg IDx0ZXJtPjxsaXRlcmFsPlBHRVZUX0NPTk5ERVNUUk9ZPC9saXRlcmFsPjwvdGVybT4KKyAg ICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhlIGNvbm5l Y3Rpb24gZGVzdHJveSBldmVudCBpcyBmaXJlZCBpbiByZXNwb25zZSB0byBhIDxmdW5jdGlv bj5QUWZpbmlzaDwvZnVuY3Rpb24+LgorICAgICAgICAgIEl0IGlzIHRoZSBldmVudCBwcm9j ZWR1cmUncyByZXNwb25zaWJpbGl0eSB0byBwcm9wZXJseSBjbGVhbnVwIGl0cyBldmVudCBk YXRhIGFzIGxpYnBxCisgICAgICAgICAgaGFzIG5vIGFiaWxpdHkgdG8gbWFuYWdlIHRoaXMg bWVtb3J5LiAgRmFpbHVyZSB0byBwcm9wZXJseSBjbGVhbnVwIHdpbGwgbGVhZCB0byBtZW1v cnkKKyAgICAgICAgICBsZWFrcy4KKyAgICAgICAgIDxzeW5vcHNpcz4KKyB0eXBlZGVmIHN0 cnVjdAorIHsKKyAgICAgY29uc3QgUEdjb25uICpjb25uOworIH0gUEdFdmVudENvbm5EZXN0 cm95Ozwvc3lub3BzaXM+CisgCisgICAgICAgICAgV2hlbiBhIDxsaXRlcmFsPlBHRVZUX0NP Tk5ERVNUUk9ZPC9saXRlcmFsPiBldmVudCBpcyByZWNlaXZlZCwgdGhlIDxwYXJhbWV0ZXI+ ZXZ0SW5mbzwvcGFyYW1ldGVyPgorICAgICAgICAgIHBvaW50ZXIgc2hvdWxkIGJlIGNhc3Rl ZCB0byBhIDxzdHJ1Y3RuYW1lPlBHRXZlbnRDb25uRGVzdHJveSo8L3N0cnVjdG5hbWU+LiAg VGhpcyBldmVudCBpcyBmaXJlZAorICAgICAgICAgIHByaW9yIHRvIDxmdW5jdGlvbj5QUWZp bmlzaDwvZnVuY3Rpb24+IHBlcmZvcm1pbmcgYW55IGNsZWFudXAuICBUaGUgcmV0dXJuIHZh bHVlIG9mIHRoZSBldmVudAorICAgICAgICAgIHByb2NlZHVyZSBpcyBpZ25vcmVkIHNpbmNl IHRoZXJlIGlzIG5vIHdheSBvZiBpbmRpY2F0aW5nIGEgZmFpbHVyZSBmcm9tIDxmdW5jdGlv bj5QUWZpbmlzaDwvZnVuY3Rpb24+LgorICAgICAgICAgIEFsc28sIGFuIGV2ZW50IHByb2Nl ZHVyZSBmYWlsdXJlIHNob3VsZCBub3QgYWJvcnQgdGhlIHByb2Nlc3Mgb2YgY2xlYW5pbmcg dXAgdW53YW50ZWQgbWVtb3J5LgorICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L2xpc3Rp dGVtPgorICAgICAgIDwvdmFybGlzdGVudHJ5PgorIAorICAgICAgIDx2YXJsaXN0ZW50cnk+ CisgICAgICAgIDx0ZXJtPjxsaXRlcmFsPlBHRVZUX1JFU1VMVENSRUFURTwvbGl0ZXJhbD48 L3Rlcm0+CisgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgIDxwYXJhPgorICAgICAgICAg IFRoZSByZXN1bHQgY3JlYXRlIGV2ZW50IGlzIGZpcmVkIGluIHJlc3BvbnNlIHRvIGFueSBl eGVjIGZ1bmN0aW9uIHRoYXQgZ2VuZXJhdGVzIGEgcmVzdWx0LAorICAgICAgICAgIGluY2x1 ZGluZyA8ZnVuY3Rpb24+UFFnZXRSZXN1bHQ8L2Z1bmN0aW9uPi4gIFRoaXMgZXZlbnQgd2ls bCBvbmx5IGJlIGZpcmVkIGFmdGVyIHRoZSByZXN1bHQKKyAgICAgICAgICBoYXMgYmVlbiBj cmVhdGVkIHN1Y2Nlc3NmdWxseSwgd2l0aCBhIHJlc3VsdCBzdGF0dXMgb2YgZWl0aGVyIDxs aXRlcmFsPlBHUkVTX0NPTU1BTkRfT0s8L2xpdGVyYWw+LAorICAgICAgICAgIDxsaXRlcmFs PlBHUkVTX1RVUExFU19PSzwvbGl0ZXJhbD4gb3IgPGxpdGVyYWw+UEdSRVNfRU1QVFlfUVVF Ulk8L2xpdGVyYWw+LgorICAgICAgICAgPHN5bm9wc2lzPgorIHR5cGVkZWYgc3RydWN0Cisg eworICAgICBjb25zdCBQR2Nvbm4gKmNvbm47CisgICAgIGNvbnN0IFBHcmVzdWx0ICpyZXN1 bHQ7CisgfSBQR0V2ZW50UmVzdWx0Q3JlYXRlOzwvc3lub3BzaXM+CisgCisgICAgICAgICAg V2hlbiBhIDxsaXRlcmFsPlBHRVZUX1JFU1VMVENSRUFURTwvbGl0ZXJhbD4gZXZlbnQgaXMg cmVjZWl2ZWQsIHRoZSA8cGFyYW1ldGVyPmV2dEluZm88L3BhcmFtZXRlcj4KKyAgICAgICAg ICBwb2ludGVyIHNob3VsZCBiZSBjYXN0ZWQgdG8gYSA8c3RydWN0bmFtZT5QR0V2ZW50UmVz dWx0Q3JlYXRlKjwvc3RydWN0bmFtZT4uICBUaGUgPHBhcmFtZXRlcj5jb25uPC9wYXJhbWV0 ZXI+CisgICAgICAgICAgd2FzIHRoZSBjb25uZWN0aW9uIHVzZWQgdG8gZ2VuZXJhdGUgdGhl IHJlc3VsdC4gIFRoaXMgaXMgdGhlIGlkZWFsIHBsYWNlIHRvIGluaXRpYWxpemUKKyAgICAg ICAgICBhbnkgPGxpdGVyYWw+aW5zdGFuY2VEYXRhPC9saXRlcmFsPiB0aGF0IG5lZWRzIHRv IGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVzdWx0LiAgSWYgdGhlIGV2ZW50IHByb2NlZHVy ZSBmYWlscywKKyAgICAgICAgICB0aGUgcmVzdWx0IHdpbGwgYmUgY2xlYXJlZCBhbmQgdGhl IGZhaWx1cmUgd2lsbCBiZSBwcm9wYWdhdGVkLiAgRG8gbm90IGF0dGVtcHQgdG8KKyAgICAg ICAgICBjbGVhciB0aGUgcmVzdWx0IG9iamVjdCBjb250YWluZWQgaW4gdGhlIDxzdHJ1Y3Ru YW1lPlBHRXZlbnRSZXN1bHRDcmVhdGU8L3N0cnVjdG5hbWU+IHN0cnVjdHVyZS4KKyAgICAg ICAgIDwvcGFyYT4KKyAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICA8L3Zhcmxpc3RlbnRy eT4KKyAKKyAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICA8dGVybT48bGl0ZXJhbD5Q R0VWVF9SRVNVTFRDT1BZPC9saXRlcmFsPjwvdGVybT4KKyAgICAgICAgPGxpc3RpdGVtPgor ICAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhlIHJlc3VsdCBjb3B5IGV2ZW50IGlzIGZp cmVkIGluIHJlc3BvbnNlIHRvIDxmdW5jdGlvbj5QUWNvcHlSZXN1bHQ8L2Z1bmN0aW9uPi4K KyAgICAgICAgICBUaGlzIGV2ZW50IHdpbGwgb25seSBiZSBmaXJlZCBhZnRlciB0aGUgY29w eSBpcyBjb21wbGV0ZS4KKyAgICAgICAgIDxzeW5vcHNpcz4KKyB0eXBlZGVmIHN0cnVjdAor IHsKKyAgICAgY29uc3QgUEdyZXN1bHQgKnNyYzsKKyAgICAgUEdyZXN1bHQgKmRlc3Q7Cisg fSBQR0V2ZW50UmVzdWx0Q29weTs8L3N5bm9wc2lzPgorIAorICAgICAgICAgIFdoZW4gYSA8 bGl0ZXJhbD5QR0VWVF9SRVNVTFRDT1BZPC9saXRlcmFsPiBldmVudCBpcyByZWNlaXZlZCwg dGhlIDxwYXJhbWV0ZXI+ZXZ0SW5mbzwvcGFyYW1ldGVyPgorICAgICAgICAgIHBvaW50ZXIg c2hvdWxkIGJlIGNhc3RlZCB0byBhIDxzdHJ1Y3RuYW1lPlBHRXZlbnRSZXN1bHRDb3B5Kjwv c3RydWN0bmFtZT4uICBUaGUgPHBhcmFtZXRlcj5zcmM8L3BhcmFtZXRlcj4KKyAgICAgICAg ICByZXN1bHQgaXMgd2hhdCBpcyBiZWluZyBjb3BpZWQgd2hpbGUgdGhlIDxwYXJhbWV0ZXI+ ZGVzdDwvcGFyYW1ldGVyPiByZXN1bHQgaXMgdGhlIGNvcHkgZGVzdGluYXRpb24uCisgICAg ICAgICAgVGhpcyBldmVudCBjYW4gYmUgdXNlZCB0byBwcm92aWRlIGEgZGVlcCBjb3B5IG9m IDxsaXRlcmFsPmluc3RhbmNlRGF0YTwvbGl0ZXJhbD4sIHNpbmNlCisgICAgICAgICAgPGxp dGVyYWw+UFFjb3B5UmVzdWx0PC9saXRlcmFsPiBjYW5ub3QgZG8gdGhhdC4gIElmIHRoZSBl dmVudCBwcm9jZWR1cmUgZmFpbHMsIHRoZSBlbnRpcmUgY29weSBvcGVyYXRpb24KKyAgICAg ICAgICB3aWxsIGZhaWwgYW5kIHRoZSA8cGFyYW1ldGVyPmRlc3Q8L3BhcmFtZXRlcj4gcmVz dWx0IHdpbGwgYmUgY2xlYXJlZC4KKyAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9saXN0 aXRlbT4KKyAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAKKyAgICAgICA8dmFybGlzdGVudHJ5 PgorICAgICAgICA8dGVybT48bGl0ZXJhbD5QR0VWVF9SRVNVTFRERVNUUk9ZPC9saXRlcmFs PjwvdGVybT4KKyAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgPHBhcmE+CisgICAgICAg ICAgVGhlIHJlc3VsdCBkZXN0cm95IGV2ZW50IGlzIGZpcmVkIGluIHJlc3BvbnNlIHRvIGEg PGZ1bmN0aW9uPlBRY2xlYXI8L2Z1bmN0aW9uPi4KKyAgICAgICAgICBJdCBpcyB0aGUgZXZl bnQgcHJvY2VkdXJlJ3MgcmVzcG9uc2liaWxpdHkgdG8gcHJvcGVybHkgY2xlYW51cCBpdHMg ZXZlbnQgZGF0YSBhcyBsaWJwcQorICAgICAgICAgIGhhcyBubyBhYmlsaXR5IHRvIG1hbmFn ZSB0aGlzIG1lbW9yeS4gIEZhaWx1cmUgdG8gcHJvcGVybHkgY2xlYW51cCB3aWxsIGxlYWQg dG8gbWVtb3J5CisgICAgICAgICAgbGVha3MuCisgICAgICAgICA8c3lub3BzaXM+CisgdHlw ZWRlZiBzdHJ1Y3QKKyB7CisgICAgIGNvbnN0IFBHcmVzdWx0ICpyZXN1bHQ7CisgfSBQR0V2 ZW50UmVzdWx0RGVzdHJveTs8L3N5bm9wc2lzPgorIAorICAgICAgICAgIFdoZW4gYSA8bGl0 ZXJhbD5QR0VWVF9SRVNVTFRERVNUUk9ZPC9saXRlcmFsPiBldmVudCBpcyByZWNlaXZlZCwg dGhlIDxwYXJhbWV0ZXI+ZXZ0SW5mbzwvcGFyYW1ldGVyPgorICAgICAgICAgIHBvaW50ZXIg c2hvdWxkIGJlIGNhc3RlZCB0byBhIDxzdHJ1Y3RuYW1lPlBHRXZlbnRSZXN1bHREZXN0cm95 Kjwvc3RydWN0bmFtZT4uICBUaGlzIGV2ZW50IGlzIGZpcmVkCisgICAgICAgICAgcHJpb3Ig dG8gPGZ1bmN0aW9uPlBRY2xlYXI8L2Z1bmN0aW9uPiBwZXJmb3JtaW5nIGFueSBjbGVhbnVw LiAgVGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZXZlbnQKKyAgICAgICAgICBwcm9jZWR1cmUg aXMgaWdub3JlZCBzaW5jZSB0aGVyZSBpcyBubyB3YXkgb2YgaW5kaWNhdGluZyBhIGZhaWx1 cmUgZnJvbSA8ZnVuY3Rpb24+UFFjbGVhcjwvZnVuY3Rpb24+LgorICAgICAgICAgIEFsc28s IGFuIGV2ZW50IHByb2NlZHVyZSBmYWlsdXJlIHNob3VsZCBub3QgYWJvcnQgdGhlIHByb2Nl c3Mgb2YgY2xlYW5pbmcgdXAgdW53YW50ZWQgbWVtb3J5LgorICAgICAgICAgPC9wYXJhPgor ICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPC92 YXJpYWJsZWxpc3Q+CisgICAgPC9wYXJhPgorICAgPC9zZWN0Mj4KKyAKKyAgIDxzZWN0MiBp ZD0ibGlicHEtZXZlbnRzLXByb2MiPgorICAgIDx0aXRsZT5FdmVudCBDYWxsYmFjayBQcm9j ZWR1cmU8L3RpdGxlPgorICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgIDx2YXJsaXN0ZW50cnk+ CisgICAgICA8dGVybT4KKyAgICAgICA8ZnVuY3Rpb24+UEdFdmVudFByb2M8L2Z1bmN0aW9u PgorICAgICAgIDxpbmRleHRlcm0+CisgICAgICAgIDxwcmltYXJ5PlBHRXZlbnRQcm9jPC9w cmltYXJ5PgorICAgICAgIDwvaW5kZXh0ZXJtPgorICAgICAgPC90ZXJtPgorIAorICAgICAg PGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBVc2VyIGNhbGxiYWNrIGZ1bmN0 aW9uIHRoYXQgcmVjZWl2ZXMgZXZlbnRzIGZyb20gbGlicHEuIFRoZSBhZGRyZXNzIG9mIHRo ZSBldmVudAorICAgICAgICBwcm9jIGlzIGFsc28gdXNlZCB0byBsb29rdXAgdGhlIDxsaXRl cmFsPmluc3RhbmNlRGF0YTwvbGl0ZXJhbD4KKyAgICAgICAgYXNzb2NpYXRlZCB3aXRoIGEg PHN0cnVjdG5hbWU+UEdjb25uPC9zdHJ1Y3RuYW1lPiBvciA8c3RydWN0bmFtZT5QR3Jlc3Vs dDwvc3RydWN0bmFtZT4uCisgICAgICAgIDxzeW5vcHNpcz50eXBlZGVmIGludCAoKlBHRXZl bnRQcm9jKShQR0V2ZW50SWQgZXZ0SWQsIHZvaWQgKmV2dEluZm8sIHZvaWQgKnBhc3NUaHJv dWdoKTs8L3N5bm9wc2lzPgorICAgICAgIDwvcGFyYT4KKyAKKyAgICAgICA8cGFyYT4KKyAg ICAgICAgVGhlIDxwYXJhbWV0ZXI+ZXZ0SWQ8L3BhcmFtZXRlcj4gaW5pZGNhdGVzIHdoaWNo IDxsaXRlcmFsPlBHRVZUXzwvbGl0ZXJhbD4gZXZlbnQgb2NjdXJyZWQuCisgICAgICAgIFRo ZSA8cGFyYW1ldGVyPmV2dEluZm88L3BhcmFtZXRlcj4gbXVzdCBiZSBjYXN0ZWQgdG8gdGhl IGFwcHJvcHJpYXRlIHN0cnVjdHVyZTogZXguIFBHRVZUX1JFR0lTVEVSCisgICAgICAgIG1l YW5zIGNhc3QgZXZ0SW5mbyB0byBhIFBHRXZlbnRSZWdpc3RlciBwb2ludGVyLiAgVGhlIDxw YXJhbWV0ZXI+cGFzc1Rocm91Z2g8L3BhcmFtZXRlcj4gaXMgdGhlCisgICAgICAgIHBvaW50 ZXIgcHJvdmlkZWQgdG8gdGhlIDxmdW5jdGlvbj5QUXJlZ2lzdGVyRXZlbnRQcm9jPC9mdW5j dGlvbj4sIHdoaWNoIGNhbiBiZSBOVUxMLiAgVGhlIGZ1bmN0aW9uCisgICAgICAgIHNob3Vs ZCByZXR1cm4gYSBub24temVybyB2YWx1ZSBpZiBpdCBzdWNjZWVkcyBhbmQgemVybyBpZiBp dCBmYWlscy4KKyAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zh cmxpc3RlbnRyeT4KKyAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgIDwvc2VjdDI+CisgCisgICA8 c2VjdDIgaWQ9ImxpYnBxLWV2ZW50cy1mdW5jcyI+CisgICAgPHRpdGxlPkV2ZW50IEZ1bmN0 aW9uczwvdGl0bGU+CisgICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgIDx2YXJsaXN0ZW50cnk+ CisgICAgICA8dGVybT4KKyAgICAgICA8ZnVuY3Rpb24+UFFyZWdpc3RlckV2ZW50UHJvYzwv ZnVuY3Rpb24+CisgICAgICAgPGluZGV4dGVybT4KKyAgICAgICAgPHByaW1hcnk+UFFyZWdp c3RlckV2ZW50UHJvYzwvcHJpbWFyeT4KKyAgICAgICA8L2luZGV4dGVybT4KKyAgICAgIDwv dGVybT4KKyAKKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgUmVn aXN0ZXJzIGFuIGV2ZW50IGNhbGxiYWNrIHByb2NlZHVyZSB3aXRoIGxpYnBxLgorICAgICAg ICA8c3lub3BzaXM+aW50IFBRcmVnaXN0ZXJFdmVudFByb2MoUEdjb25uICpjb25uLCBQR0V2 ZW50UHJvYyBwcm9jLCBjb25zdCBjaGFyICpuYW1lLCB2b2lkICpwYXNzVGhyb3VnaCk7PC9z eW5vcHNpcz4KKyAgICAgICA8L3BhcmE+CisgCisgICAgICAgPHBhcmE+CisgICAgICAgIFJl Z2lzdHJhdGlvbiBtdXN0IGJlIGNhbGxlZCBvbmNlIG9uIGV2ZXJ5IFBHY29ubiB5b3Ugd2Fu dCB0byByZWNlaXZlIGV2ZW50cyBhYm91dC4KKyAgICAgICAgVGhlcmUgaXMgbm8gbGltaXQg b24gdGhlIG51bWJlciBvZiBldmVudCBwcm9jZWR1cmVzIHRoYXQgY2FuIGJlIHJlZ2lzdGVy ZWQgd2l0aCBhIGNvbm5lY3Rpb24uCisgICAgICAgIFRoZSBmdW5jdGlvbiByZXR1cm5zIGEg bm9uLXplcm8gdmFsdWUgaWYgaXQgc3VjY2VlZHMgYW5kIHplcm8gaWYgaXQgZmFpbHMuCisg ICAgICAgPC9wYXJhPgorIAorICAgICAgIDxwYXJhPgorICAgICAgICBUaGUgPHBhcmFtZXRl cj5wcm9jPC9wYXJhbWV0ZXI+IGFyZ3VtZW50IHdpbGwgYmUgY2FsbGVkIHdoZW4gYSBsaWJw cSBldmVudCBpcyBmaXJlZC4gIEl0cworICAgICAgICBtZW1vcnkgYWRkcmVzcyBpcyBhbHNv IHVzZWQgdG8gbG9va3VwIDxsaXRlcmFsPmluc3RhbmNlRGF0YTwvbGl0ZXJhbD4uCisgICAg ICAgIFRoZSA8cGFyYW1ldGVyPm5hbWU8L3BhcmFtZXRlcj4gYXJndW1lbnQgaXMgdXNlZCB0 byBjb250cnVjdCBlcnJvciBtZXNzYWdlcyB0byBhaWQKKyAgICAgICAgaW4gZGVidWdnaW5n LiAgVGhpcyB2YWx1ZSBjYW5ub3QgYmUgTlVMTCBvciBhIHplcm8tbGVuZ3RoIHN0cmluZy4K KyAgICAgICAgVGhlIDxwYXJhbWV0ZXI+cGFzc1Rocm91Z2g8L3BhcmFtZXRlcj4gcG9pbnRl ciBpcyBwYXNzZWQgdG8gdGhlIDxwYXJhbWV0ZXI+cHJvYzwvcGFyYW1ldGVyPiB3aGVuZXZl cgorICAgICAgICBhbiBldmVudCBvY2N1cnMuIFRoaXMgYXJndW1lbnQgY2FuIGJlIE5VTEwu CisgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50 cnk+CisgCisgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICA8dGVybT4KKyAgICAgICA8ZnVu Y3Rpb24+UFFpbnN0YW5jZURhdGE8L2Z1bmN0aW9uPgorICAgICAgIDxpbmRleHRlcm0+Cisg ICAgICAgIDxwcmltYXJ5PlBRaW5zdGFuY2VEYXRhPC9wcmltYXJ5PgorICAgICAgIDwvaW5k ZXh0ZXJtPgorICAgICAgPC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJh PgorICAgICAgICBSZXR1cm5zIHRoZSBjb25uJ3MgaW5zdGFuY2VEYXRhIGFzc29jaWF0ZWQg d2l0aCBwcm9jLgorICAgICAgICA8c3lub3BzaXM+dm9pZCAqUFFpbnN0YW5jZURhdGEoY29u c3QgUEdjb25uICpjb25uLCBQR0V2ZW50UHJvYyBwcm9jKTs8L3N5bm9wc2lzPgorICAgICAg IDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5PgorIAor ICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgPHRlcm0+CisgICAgICAgPGZ1bmN0aW9uPlBR c2V0SW5zdGFuY2VEYXRhPC9mdW5jdGlvbj4KKyAgICAgICA8aW5kZXh0ZXJtPgorICAgICAg ICA8cHJpbWFyeT5QUXNldEluc3RhbmNlRGF0YTwvcHJpbWFyeT4KKyAgICAgICA8L2luZGV4 dGVybT4KKyAgICAgIDwvdGVybT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4K KyAgICAgICAgU2V0cyB0aGUgY29ubidzIGluc3RhbmNlRGF0YSBmb3IgcHJvYyB0byBkYXRh LiAgVGhpcyByZXV0cm5zIG5vbi16ZXJvIGZvcgorICAgICAgICBzdWNjZWVzIGFuZCB6ZXJv IGZvciBmYWlsdXJlLgorICAgICAgICA8c3lub3BzaXM+aW50IFBRc2V0SW5zdGFuY2VEYXRh KFBHY29ubiAqY29ubiwgUEdFdmVudFByb2MgcHJvYywgdm9pZCAqZGF0YSk7PC9zeW5vcHNp cz4KKyAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxpc3Rl bnRyeT4KKyAKKyAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgIDx0ZXJtPgorICAgICAgIDxm dW5jdGlvbj5QUXJlc3VsdEluc3RhbmNlRGF0YTwvZnVuY3Rpb24+CisgICAgICAgPGluZGV4 dGVybT4KKyAgICAgICAgPHByaW1hcnk+UFFyZXN1bHRJbnN0YW5jZURhdGE8L3ByaW1hcnk+ CisgICAgICAgPC9pbmRleHRlcm0+CisgICAgICA8L3Rlcm0+CisgICAgICA8bGlzdGl0ZW0+ CisgICAgICAgPHBhcmE+CisgICAgICAgIFJldHVybnMgdGhlIHJlc3VsdCdzIGluc3RhbmNl RGF0YSBhc3NvY2lhdGVkIGJ5IHByb2MuCisgICAgICAgIDxzeW5vcHNpcz52b2lkICpQUXJl c3VsdEluc3RhbmNlRGF0YShjb25zdCBQR3Jlc3VsdCAqcmVzLCBQR0V2ZW50UHJvYyBwcm9j KTs8L3N5bm9wc2lzPgorICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAg IDwvdmFybGlzdGVudHJ5PgorIAorICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgPHRlcm0+ CisgICAgICAgPGZ1bmN0aW9uPlBRcmVzdWx0U2V0SW5zdGFuY2VEYXRhPC9mdW5jdGlvbj4K KyAgICAgICA8aW5kZXh0ZXJtPgorICAgICAgICA8cHJpbWFyeT5QUXJlc3VsdFNldEluc3Rh bmNlRGF0YTwvcHJpbWFyeT4KKyAgICAgICA8L2luZGV4dGVybT4KKyAgICAgIDwvdGVybT4K KyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgU2V0cyB0aGUgcmVz dWx0J3MgaW5zdGFuY2VEYXRhIGZvciBwcm9jIHRvIGRhdGEuICBUaGlzIHJldXRybnMgbm9u LXplcm8gZm9yCisgICAgICAgIHN1Y2NlZXMgYW5kIHplcm8gZm9yIGZhaWx1cmUuCisgICAg ICAgIDxzeW5vcHNpcz5pbnQgUFFyZXN1bHRTZXRJbnN0YW5jZURhdGEoUEdyZXN1bHQgKnJl cywgUEdFdmVudFByb2MgcHJvYywgdm9pZCAqZGF0YSk7PC9zeW5vcHNpcz4KKyAgICAgICA8 L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICA8 L3ZhcmlhYmxlbGlzdD4KKyAgIDwvc2VjdDI+CisgCisgICA8c2VjdDIgaWQ9ImxpYnBxLWV2 ZW50cy1leGFtcGxlIj4KKyAgICA8dGl0bGU+RXZlbnQgRXhhbXBsZTwvdGl0bGU+CisgICAg PHByb2dyYW1saXN0aW5nPgorIC8qIHJlcXVpcmVkIGhlYWRlciBmb3IgbGlicHEgZXZlbnRz IChub3RlOiBpbmNsdWRlcyBsaWJwcS1mZS5oKSovCisgI2luY2x1ZGUgJmx0O2xpYnBxLWV2 ZW50cy5oJmd0OworIAorIC8qIFRoZSBpbnN0YW5jZURhdGEgKi8KKyB0eXBlZGVmIHN0cnVj dAorIHsKKyAgICAgaW50IG47CisgICAgIGNoYXIgKnN0cjsKKyB9IG15ZGF0YTsKKyAKKyAv KiBQR0V2ZW50UHJvYyAqLworIGludCBteUV2ZW50UHJvYyhQR0V2ZW50SWQgZXZ0SWQsIHZv aWQgKmV2dEluZm8sIHZvaWQgKnBhc3NUaHJvdWdoKTsKKyAKKyBpbnQgbWFpbih2b2lkKQor IHsKKyAgICAgbXlkYXRhICpkYXRhOworICAgICBQR3Jlc3VsdCAqcmVzOworICAgICBQR2Nv bm4gKmNvbm4gPSBQUWNvbm5lY3RkYigiZGJuYW1lID0gcG9zdGdyZXMiKTsKKyAKKyAgICAg aWYgKFBRc3RhdHVzKGNvbm4pICE9IENPTk5FQ1RJT05fT0spCisgICAgIHsKKyAgICAgICAg IGZwcmludGYoc3RkZXJyLCAiQ29ubmVjdGlvbiB0byBkYXRhYmFzZSBmYWlsZWQ6ICVzIiwK KyAgICAgICAgICAgICBQUWVycm9yTWVzc2FnZShjb25uKSk7CisgICAgICAgICBQUWZpbmlz aChjb25uKTsKKyAgICAgICAgIHJldHVybiAxOworICAgICB9CisgCisgICAgIC8qIGNhbGxl ZCBvbmNlIG9uIGFueSBjb25uZWN0aW9uIHRoYXQgc2hvdWxkIHJlY2VpdmUgZXZlbnRzLgor ICAgICAgKiBTZW5kcyBhIFBHRVZUX1JFR0lTVEVSIHRvIG15RXZlbnRQcm9jLgorICAgICAg Ki8KKyAgICAgaWYgKCFQUXJlZ2lzdGVyRXZlbnRQcm9jKGNvbm4sIG15RXZlbnRQcm9jLCAi bXlkYXRhX3Byb2MiLCBOVUxMKSkKKyAgICAgeworICAgICAgICAgZnByaW50ZihzdGRlcnIs ICJDYW5ub3QgcmVnaXN0ZXIgUEdFdmVudFByb2NcbiIpOworICAgICAgICAgUFFmaW5pc2go Y29ubik7CisgICAgICAgICByZXR1cm4gMTsKKyAgICAgfQorIAorICAgICAvKiBjb25uIGlu c3RhbmNlRGF0YSBpcyBhdmFpbGFibGUgKi8KKyAgICAgZGF0YSA9IFBRaW5zdGFuY2VEYXRh KGNvbm4sIG15RXZlbnRQcm9jKTsKKyAKKyAgICAgLyogU2VuZHMgYSBQR0VWVF9SRVNVTFRD UkVBVEUgdG8gbXlFdmVudFByb2MgKi8KKyAgICAgcmVzID0gUFFleGVjKGNvbm4sICJTRUxF Q1QgMSArIDEiKTsKKyAKKyAgICAgLyogcmVzdWx0IGluc3RhbmNlRGF0YSBpcyBhdmFpbGFi bGUgKi8KKyAgICAgZGF0YSA9IFBRcmVzdWx0SW5zdGFuY2VEYXRhKHJlcywgbXlFdmVudFBy b2MpOworIAorICAgICAvKiBJZiBQR19DT1BZUkVTX0VWRU5UUyBpcyB1c2VkLCBzZW5kcyBh IFBHRVZUX1JFU1VMVENPUFkgdG8gbXlFdmVudFByb2MgKi8KKyAgICAgcmVzX2NvcHkgPSBQ UWNvcHlSZXN1bHQocmVzLCBQR19DT1BZUkVTX1RVUExFUyB8IFBHX0NPUFlSRVNfRVZFTlRT KTsKKyAKKyAgICAgLyogcmVzdWx0IGluc3RhbmNlRGF0YSBpcyBhdmFpbGFibGUgaWYgUEdf Q09QWVJFU19FVkVOVFMgd2FzCisgICAgICAqIHVzZWQgZHVyaW5nIHRoZSBQUWNvcHlSZXN1 bHQgY2FsbC4KKyAgICAgICovCisgICAgIGRhdGEgPSBQUXJlc3VsdEluc3RhbmNlRGF0YShy ZXNfY29weSwgbXlFdmVudFByb2MpOworIAorICAgICAvKiBCb3RoIGNsZWFycyBzZW5kIGEg UEdFVlRfUkVTVUxUREVTVE9SWSB0byBteUV2ZW50UHJvYyAqLworICAgICBQUWNsZWFyKHJl cyk7CisgICAgIFBRY2xlYXIocmVzX2NvcHkpOworIAorICAgICAvKiBTZW5kcyBhIFBHRVZU X0NPTk5ERVNUUk9ZIHRvIG15RXZlbnRQcm9jICovCisgICAgIFBRZmluaXNoKGNvbm4pOwor IAorICAgICByZXR1cm4gMDsKKyB9CisgCisgaW50IG15RXZlbnRQcm9jKFBHRXZlbnRJZCBl dnRJZCwgdm9pZCAqZXZ0SW5mbywgdm9pZCAqcGFzc1Rocm91Z2gpCisgeworICAgICBzd2l0 Y2ggKGV2dElkKQorICAgICB7CisgICAgICAgICBjYXNlIFBHRVZUX1JFR0lTVEVSOgorICAg ICAgICAgeworICAgICAgICAgICAgIFBHRXZlbnRSZWdpc3RlciAqZSA9IChQR0V2ZW50UmVn aXN0ZXIgKilldnRJbmZvOworICAgICAgICAgICAgIG15ZGF0YSAqZGF0YSA9IGdldF9teWRh dGEoZS0+Y29ubik7CisgCisgICAgICAgICAgICAgLyogYXNzb2NpYXRlIGFwcCBzcGVjaWZp YyBkYXRhIHdpdGggY29ubmVjdGlvbiAqLworICAgICAgICAgICAgIFBRc2V0SW5zdGFuY2VE YXRhKGUtPmNvbm4sIG15RXZlbnRQcm9jLCBkYXRhKTsKKyAgICAgICAgICAgICBicmVhazsK KyAgICAgICAgIH0KKyAKKyAgICAgICAgIGNhc2UgUEdFVlRfQ09OTlJFU0VUOgorICAgICAg ICAgeworICAgICAgICAgICAgIFBHRXZlbnRDb25uUmVzZXQgKmUgPSAoUEdFdmVudENvbm5S ZXNldCAqKWV2dEluZm87CisgICAgICAgICAgICAgbXlkYXRhICpkYXRhID0gUFFpbnN0YW5j ZURhdGEoZS0+Y29ubiwgbXlFdmVudFByb2MpOworICAgICAgICAgICAgIGlmIChkYXRhKQor ICAgICAgICAgICAgICAgbWVtc2V0KGRhdGEsIDAsIHNpemVvZihteWRhdGEpKTsKKyAgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgIH0KKyAKKyAgICAgICAgIGNhc2UgUEdFVlRfQ09O TkRFU1RST1k6CisgICAgICAgICB7CisgICAgICAgICAgICAgUEdFdmVudENvbm5EZXN0cm95 ICplID0gKFBHRXZlbnRDb25uRGVzdHJveSAqKWV2dEluZm87CisgICAgICAgICAgICAgbXlk YXRhICpkYXRhID0gUFFpbnN0YW5jZURhdGEoZS0+Y29ubiwgbXlFdmVudFByb2MpOworIAor ICAgICAgICAgICAgIC8qIGZyZWUgaW5zdGFuY2UgZGF0YSBiZWNhdXNlIHRoZSBjb25uIGlz IGJlaW5nIGRlc3Ryb3llZCAqLworICAgICAgICAgICAgIGlmIChkYXRhKQorICAgICAgICAg ICAgICAgZnJlZV9teWRhdGEoZGF0YSk7CisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg ICB9CisgCisgICAgICAgICBjYXNlIFBHRVZUX1JFU1VMVENSRUFURToKKyAgICAgICAgIHsK KyAgICAgICAgICAgICBQR0V2ZW50UmVzdWx0Q3JlYXRlICplID0gKFBHRXZlbnRSZXN1bHRD cmVhdGUgKilldnRJbmZvOworICAgICAgICAgICAgIG15ZGF0YSAqY29ubl9kYXRhID0gUFFp bnN0YW5jZURhdGEoZS0+Y29ubiwgbXlFdmVudFByb2MpOworICAgICAgICAgICAgIG15ZGF0 YSAqcmVzX2RhdGEgPSBkdXBfbXlkYXRhKGNvbm5fZGF0YSk7CisgCisgICAgICAgICAgICAg LyogYXNzb2NpYXRlIGFwcCBzcGVjaWZpYyBkYXRhIHdpdGggcmVzdWx0IChjb3B5IGl0IGZy b20gY29ubikgKi8KKyAgICAgICAgICAgICBQUXNldFJlc3VsdEluc3RhbmNlRGF0YShlLT5y ZXN1bHQsIG15RXZlbnRQcm9jLCByZXNfZGF0YSk7CisgICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgICB9CisgCisgICAgICAgICBjYXNlIFBHRVZUX1JFU1VMVENPUFk6CisgICAgICAg ICB7CisgICAgICAgICAgICAgUEdFdmVudFJlc3VsdENvcHkgKmUgPSAoUEdFdmVudFJlc3Vs dENvcHkgKilldnRJbmZvOworICAgICAgICAgICAgIG15ZGF0YSAqc3JjX2RhdGEgPSBQUXJl c3VsdEluc3RhbmNlRGF0YShlLT5zcmMsIG15RXZlbnRQcm9jKTsKKyAgICAgICAgICAgICBt eWRhdGEgKmRlc3RfZGF0YSA9IGR1cF9teWRhdGEoc3JjX2RhdGEpOworIAorICAgICAgICAg ICAgIC8qIGFzc29jaWF0ZSBhcHAgc3BlY2lmaWMgZGF0YSB3aXRoIHJlc3VsdCAoY29weSBp dCBmcm9tIGEgcmVzdWx0KSAqLworICAgICAgICAgICAgIFBRc2V0UmVzdWx0SW5zdGFuY2VE YXRhKGUtPmRlc3QsIG15RXZlbnRQcm9jLCBkZXN0X2RhdGEpOworICAgICAgICAgICAgIGJy ZWFrOworICAgICAgICAgfQorIAorICAgICAgICAgY2FzZSBQR0VWVF9SRVNVTFRERVNUUk9Z OgorICAgICAgICAgeworICAgICAgICAgICAgIFBHRXZlbnRSZXN1bHREZXN0cm95ICplID0g KFBHRXZlbnRSZXN1bHREZXN0cm95ICopZXZ0SW5mbzsKKyAgICAgICAgICAgICBteWRhdGEg KmRhdGEgPSBQUXJlc3VsdEluc3RhbmNlRGF0YShlLT5yZXN1bHQsIG15RXZlbnRQcm9jKTsK KyAKKyAgICAgICAgICAgICAvKiBmcmVlIGluc3RhbmNlIGRhdGEgYmVjYXVzZSB0aGUgcmVz dWx0IGlzIGJlaW5nIGRlc3Ryb3llZCAqLworICAgICAgICAgICAgIGlmKCBkYXRhKQorICAg ICAgICAgICAgICAgZnJlZV9teWRhdGEoZGF0YSk7CisgICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgICB9CisgCisgICAgICAgICAvKiB1bmtub3duIGV2ZW50IGlkLCBqdXN0IHJldHVy biBUUlVFLiAqLworICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICBicmVhazsKKyAg ICAgfQorIAorICAgICByZXR1cm4gVFJVRTsgLyogZXZlbnQgcHJvY2Vzc2luZyBzdWNjZWVk ZWQgKi8KKyB9ICA8L3Byb2dyYW1saXN0aW5nPgorICAgPC9zZWN0Mj4KKyAgPC9zZWN0MT4K KyAKICAgPHNlY3QxIGlkPSJsaWJwcS1taXNjIj4KICAgIDx0aXRsZT5NaXNjZWxsYW5lb3Vz IEZ1bmN0aW9uczwvdGl0bGU+CiAgCiAgICA8cGFyYT4KICAgICBBcyBhbHdheXMsIHRoZXJl IGFyZSBzb21lIGZ1bmN0aW9ucyB0aGF0IGp1c3QgZG9uJ3QgZml0IGFueXdoZXJlLgogICAg PC9wYXJhPgpJbmRleDogc3JjL2ludGVyZmFjZXMvbGlicHEvTWFrZWZpbGUKPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQpSQ1MgZmlsZTogL3Byb2plY3RzL2N2c3Jvb3QvcGdzcWwvc3JjL2ludGVyZmFjZXMv bGlicHEvTWFrZWZpbGUsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTY2CmRpZmYgLUM2IC1y MS4xNjYgTWFrZWZpbGUKKioqIHNyYy9pbnRlcmZhY2VzL2xpYnBxL01ha2VmaWxlCTE2IEFw ciAyMDA4IDE0OjE5OjU2IC0wMDAwCTEuMTY2Ci0tLSBzcmMvaW50ZXJmYWNlcy9saWJwcS9N YWtlZmlsZQk1IFNlcCAyMDA4IDIwOjAzOjAzIC0wMDAwCioqKioqKioqKioqKioqKgoqKiog MjksNDEgKioqKgogICMgdGhlIG9iamVjdCBmaWxlcyBmcm9tIGxpYnBncG9ydCwgdGhpcyB3 b3VsZCBub3QgYmUgdHJ1ZSBvbiBhbGwKICAjIHBsYXRmb3Jtcy4KICBMSUJTIDo9ICQoTElC UzotbHBncG9ydD0pCiAgCiAgT0JKUz0JZmUtYXV0aC5vIGZlLWNvbm5lY3QubyBmZS1leGVj Lm8gZmUtbWlzYy5vIGZlLXByaW50Lm8gZmUtbG9iai5vIFwKICAJZmUtcHJvdG9jb2wyLm8g ZmUtcHJvdG9jb2wzLm8gcHFleHBidWZmZXIubyBwcXNpZ25hbC5vIGZlLXNlY3VyZS5vIFwK ISAJbWQ1Lm8gaXAubyB3Y2hhci5vIGVuY25hbWVzLm8gbm9ibG9jay5vIHBnc3RyY2FzZWNt cC5vIHRocmVhZC5vIFwKICAJJChmaWx0ZXIgY3J5cHQubyBnZXRhZGRyaW5mby5vIGluZXRf YXRvbi5vIG9wZW4ubyBzbnByaW50Zi5vIHN0cmVycm9yLm8gc3RybGNweS5vIHdpbjMyZXJy b3IubywgJChMSUJPQkpTKSkKICAKICBpZmVxICgkKFBPUlROQU1FKSwgY3lnd2luKQogIG92 ZXJyaWRlIHNobGliID0gY3lnJChOQU1FKSQoRExTVUZGSVgpCiAgZW5kaWYKICAKLS0tIDI5 LDQxIC0tLS0KICAjIHRoZSBvYmplY3QgZmlsZXMgZnJvbSBsaWJwZ3BvcnQsIHRoaXMgd291 bGQgbm90IGJlIHRydWUgb24gYWxsCiAgIyBwbGF0Zm9ybXMuCiAgTElCUyA6PSAkKExJQlM6 LWxwZ3BvcnQ9KQogIAogIE9CSlM9CWZlLWF1dGgubyBmZS1jb25uZWN0Lm8gZmUtZXhlYy5v IGZlLW1pc2MubyBmZS1wcmludC5vIGZlLWxvYmoubyBcCiAgCWZlLXByb3RvY29sMi5vIGZl LXByb3RvY29sMy5vIHBxZXhwYnVmZmVyLm8gcHFzaWduYWwubyBmZS1zZWN1cmUubyBcCiEg CW1kNS5vIGlwLm8gd2NoYXIubyBlbmNuYW1lcy5vIG5vYmxvY2subyBwZ3N0cmNhc2VjbXAu byB0aHJlYWQubyBsaWJwcS1ldmVudHMubyBcCiAgCSQoZmlsdGVyIGNyeXB0Lm8gZ2V0YWRk cmluZm8ubyBpbmV0X2F0b24ubyBvcGVuLm8gc25wcmludGYubyBzdHJlcnJvci5vIHN0cmxj cHkubyB3aW4zMmVycm9yLm8sICQoTElCT0JKUykpCiAgCiAgaWZlcSAoJChQT1JUTkFNRSks IGN5Z3dpbikKICBvdmVycmlkZSBzaGxpYiA9IGN5ZyQoTkFNRSkkKERMU1VGRklYKQogIGVu ZGlmCiAgCioqKioqKioqKioqKioqKgoqKiogMTAzLDEyMyAqKioqCiAgCiAgJCh0b3BfYnVp bGRkaXIpL3NyYy9wb3J0L3BnX2NvbmZpZ19wYXRocy5oOgogIAkkKE1BS0UpIC1DICQodG9w X2J1aWxkZGlyKS9zcmMvcG9ydCBwZ19jb25maWdfcGF0aHMuaAogIAogIGluc3RhbGw6IGFs bCBpbnN0YWxsZGlycyBpbnN0YWxsLWxpYgogIAkkKElOU1RBTExfREFUQSkgJChzcmNkaXIp L2xpYnBxLWZlLmggJyQoREVTVERJUikkKGluY2x1ZGVkaXIpJwogIAkkKElOU1RBTExfREFU QSkgJChzcmNkaXIpL2xpYnBxLWludC5oICckKERFU1RESVIpJChpbmNsdWRlZGlyX2ludGVy bmFsKScKICAJJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS9wcWV4cGJ1ZmZlci5oICckKERF U1RESVIpJChpbmNsdWRlZGlyX2ludGVybmFsKScKICAJJChJTlNUQUxMX0RBVEEpICQoc3Jj ZGlyKS9wZ19zZXJ2aWNlLmNvbmYuc2FtcGxlICckKERFU1RESVIpJChkYXRhZGlyKS9wZ19z ZXJ2aWNlLmNvbmYuc2FtcGxlJwogIAogIGluc3RhbGxkaXJzOiBpbnN0YWxsZGlycy1saWIK ICAJJChta2luc3RhbGxkaXJzKSAnJChERVNURElSKSQoaW5jbHVkZWRpciknICckKERFU1RE SVIpJChpbmNsdWRlZGlyX2ludGVybmFsKScKICAKICB1bmluc3RhbGw6IHVuaW5zdGFsbC1s aWIKISAJcm0gLWYgJyQoREVTVERJUikkKGluY2x1ZGVkaXIpL2xpYnBxLWZlLmgnICckKERF U1RESVIpJChpbmNsdWRlZGlyX2ludGVybmFsKS9saWJwcS1pbnQuaCcgJyQoREVTVERJUikk KGluY2x1ZGVkaXJfaW50ZXJuYWwpL3BxZXhwYnVmZmVyLmgnICckKERFU1RESVIpJChkYXRh ZGlyKS9wZ19zZXJ2aWNlLmNvbmYuc2FtcGxlJwogIAogIGNsZWFuIGRpc3RjbGVhbjogY2xl YW4tbGliCiAgCXJtIC1mICQoT0JKUykgcGdfY29uZmlnX3BhdGhzLmggY3J5cHQuYyBnZXRh ZGRyaW5mby5jIGluZXRfYXRvbi5jIG5vYmxvY2suYyBvcGVuLmMgcGdzdHJjYXNlY21wLmMg c25wcmludGYuYyBzdHJlcnJvci5jIHN0cmxjcHkuYyB0aHJlYWQuYyBtZDUuYyBpcC5jIGVu Y25hbWVzLmMgd2NoYXIuYyB3aW4zMmVycm9yLmMgcGdzbGVlcC5jIHB0aHJlYWQuaCBsaWJw cS5yYwogICMgTWlnaHQgYmUgbGVmdCBvdmVyIGZyb20gYSBXaW4zMiBjbGllbnQtb25seSBi dWlsZAogIAlybSAtZiBwZ19jb25maWdfcGF0aHMuaAogIAotLS0gMTAzLDEyNCAtLS0tCiAg CiAgJCh0b3BfYnVpbGRkaXIpL3NyYy9wb3J0L3BnX2NvbmZpZ19wYXRocy5oOgogIAkkKE1B S0UpIC1DICQodG9wX2J1aWxkZGlyKS9zcmMvcG9ydCBwZ19jb25maWdfcGF0aHMuaAogIAog IGluc3RhbGw6IGFsbCBpbnN0YWxsZGlycyBpbnN0YWxsLWxpYgogIAkkKElOU1RBTExfREFU QSkgJChzcmNkaXIpL2xpYnBxLWZlLmggJyQoREVTVERJUikkKGluY2x1ZGVkaXIpJworIAkk KElOU1RBTExfREFUQSkgJChzcmNkaXIpL2xpYnBxLWV2ZW50cy5oICckKERFU1RESVIpJChp bmNsdWRlZGlyKScKICAJJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS9saWJwcS1pbnQuaCAn JChERVNURElSKSQoaW5jbHVkZWRpcl9pbnRlcm5hbCknCiAgCSQoSU5TVEFMTF9EQVRBKSAk KHNyY2RpcikvcHFleHBidWZmZXIuaCAnJChERVNURElSKSQoaW5jbHVkZWRpcl9pbnRlcm5h bCknCiAgCSQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvcGdfc2VydmljZS5jb25mLnNhbXBs ZSAnJChERVNURElSKSQoZGF0YWRpcikvcGdfc2VydmljZS5jb25mLnNhbXBsZScKICAKICBp bnN0YWxsZGlyczogaW5zdGFsbGRpcnMtbGliCiAgCSQobWtpbnN0YWxsZGlycykgJyQoREVT VERJUikkKGluY2x1ZGVkaXIpJyAnJChERVNURElSKSQoaW5jbHVkZWRpcl9pbnRlcm5hbCkn CiAgCiAgdW5pbnN0YWxsOiB1bmluc3RhbGwtbGliCiEgCXJtIC1mICckKERFU1RESVIpJChp bmNsdWRlZGlyKS9saWJwcS1mZS5oJyAnJChERVNURElSKSQoaW5jbHVkZWRpcikvbGlicHEt ZXZlbnRzLmgnICckKERFU1RESVIpJChpbmNsdWRlZGlyX2ludGVybmFsKS9saWJwcS1pbnQu aCcgJyQoREVTVERJUikkKGluY2x1ZGVkaXJfaW50ZXJuYWwpL3BxZXhwYnVmZmVyLmgnICck KERFU1RESVIpJChkYXRhZGlyKS9wZ19zZXJ2aWNlLmNvbmYuc2FtcGxlJwogIAogIGNsZWFu IGRpc3RjbGVhbjogY2xlYW4tbGliCiAgCXJtIC1mICQoT0JKUykgcGdfY29uZmlnX3BhdGhz LmggY3J5cHQuYyBnZXRhZGRyaW5mby5jIGluZXRfYXRvbi5jIG5vYmxvY2suYyBvcGVuLmMg cGdzdHJjYXNlY21wLmMgc25wcmludGYuYyBzdHJlcnJvci5jIHN0cmxjcHkuYyB0aHJlYWQu YyBtZDUuYyBpcC5jIGVuY25hbWVzLmMgd2NoYXIuYyB3aW4zMmVycm9yLmMgcGdzbGVlcC5j IHB0aHJlYWQuaCBsaWJwcS5yYwogICMgTWlnaHQgYmUgbGVmdCBvdmVyIGZyb20gYSBXaW4z MiBjbGllbnQtb25seSBidWlsZAogIAlybSAtZiBwZ19jb25maWdfcGF0aHMuaAogIApJbmRl eDogc3JjL2ludGVyZmFjZXMvbGlicHEvZXhwb3J0cy50eHQKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg ZmlsZTogL3Byb2plY3RzL2N2c3Jvb3QvcGdzcWwvc3JjL2ludGVyZmFjZXMvbGlicHEvZXhw b3J0cy50eHQsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTkKZGlmZiAtQzYgLXIxLjE5IGV4 cG9ydHMudHh0CioqKiBzcmMvaW50ZXJmYWNlcy9saWJwcS9leHBvcnRzLnR4dAkxOSBNYXIg MjAwOCAwMDozOTozMyAtMDAwMAkxLjE5Ci0tLSBzcmMvaW50ZXJmYWNlcy9saWJwcS9leHBv cnRzLnR4dAk1IFNlcCAyMDA4IDIwOjAzOjAzIC0wMDAwCioqKioqKioqKioqKioqKgoqKiog MTM4LDE0MyAqKioqCi0tLSAxMzgsMTUyIC0tLS0KICBQUXNlbmREZXNjcmliZVBvcnRhbCAg ICAgIDEzNgogIGxvX3RydW5jYXRlICAgICAgICAgICAgICAgMTM3CiAgUFFjb25uZWN0aW9u VXNlZFBhc3N3b3JkICAxMzgKICBwZ192YWxpZF9zZXJ2ZXJfZW5jb2RpbmdfaWQgMTM5CiAg UFFjb25uZWN0aW9uTmVlZHNQYXNzd29yZCAxNDAKICBsb19pbXBvcnRfd2l0aF9vaWQJCSAg MTQxCisgUFFjb3B5UmVzdWx0ICAgICAgICAgICAgICAxNDIKKyBQUXNldFJlc3VsdEF0dHJz ICAgICAgICAgIDE0MworIFBRc2V0dmFsdWUgICAgICAgICAgICAgICAgMTQ0CisgUFFyZXN1 bHRBbGxvYyAgICAgICAgICAgICAxNDUKKyBQUXJlZ2lzdGVyRXZlbnRQcm9jICAgICAgIDE0 NgorIFBRaW5zdGFuY2VEYXRhICAgICAgICAgICAgMTQ3CisgUFFzZXRJbnN0YW5jZURhdGEg ICAgICAgICAxNDgKKyBQUXJlc3VsdEluc3RhbmNlRGF0YSAgICAgIDE0OQorIFBRcmVzdWx0 U2V0SW5zdGFuY2VEYXRhICAgMTUwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRl eDogc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtY29ubmVjdC5jCj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT IGZpbGU6IC9wcm9qZWN0cy9jdnNyb290L3Bnc3FsL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2Zl LWNvbm5lY3QuYyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zNTkKZGlmZiAtQzYgLXIxLjM1 OSBmZS1jb25uZWN0LmMKKioqIHNyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWNvbm5lY3QuYwky OSBNYXkgMjAwOCAyMjowMjo0NCAtMDAwMAkxLjM1OQotLS0gc3JjL2ludGVyZmFjZXMvbGli cHEvZmUtY29ubmVjdC5jCTUgU2VwIDIwMDggMjA6MDM6MDMgLTAwMDAKKioqKioqKioqKioq KioqCioqKiAxOTcxLDE5ODIgKioqKgotLS0gMTk3MSwyMDAxIC0tLS0KICAgKiByZWxlYXNl IGRhdGEgdGhhdCBpcyB0byBiZSBoZWxkIGZvciB0aGUgbGlmZSBvZiB0aGUgUEdjb25uIHN0 cnVjdHVyZS4KICAgKiBJZiBhIHZhbHVlIG91Z2h0IHRvIGJlIGNsZWFyZWQvZnJlZWQgZHVy aW5nIFBRcmVzZXQoKSwgZG8gaXQgdGhlcmUgbm90IGhlcmUuCiAgICovCiAgc3RhdGljIHZv aWQKICBmcmVlUEdjb25uKFBHY29ubiAqY29ubikKICB7CisgCWludCBpOworIAlQR0V2ZW50 Q29ubkRlc3Ryb3kgZXZ0OworIAorIAkvKiBMZXQgdGhlIGV2ZW50IHByb2NzIGNsZWFudXAg dGhlaXIgc3RhdGUgZGF0YSAqLworIAlmb3IgKGkgPSAwOyBpIDwgY29ubi0+bkV2ZW50czsg aSsrKQorIAl7CisgCQlldnQuY29ubiA9IGNvbm47CisgCQkodm9pZCljb25uLT5ldmVudHNb aV0ucHJvYyhQR0VWVF9DT05OREVTVFJPWSwgJmV2dCwgY29ubi0+ZXZlbnRzW2ldLnBhc3NU aHJvdWdoKTsKKyAJCWZyZWUoY29ubi0+ZXZlbnRzW2ldLm5hbWUpOworIAl9CisgCisgCS8q IGZyZWUgdGhlIFBHRXZlbnQgYXJyYXkgKi8KKyAJaWYgKGNvbm4tPmV2ZW50cykKKyAJewor IAkJZnJlZShjb25uLT5ldmVudHMpOworIAkJY29ubi0+ZXZlbnRzID0gTlVMTDsKKyAJCWNv bm4tPm5FdmVudHMgPSBjb25uLT5ldmVudEFyclNpemUgPSAwOworIAl9CisgCiAgCWlmIChj b25uLT5wZ2hvc3QpCiAgCQlmcmVlKGNvbm4tPnBnaG9zdCk7CiAgCWlmIChjb25uLT5wZ2hv c3RhZGRyKQogIAkJZnJlZShjb25uLT5wZ2hvc3RhZGRyKTsKICAJaWYgKGNvbm4tPnBncG9y dCkKICAJCWZyZWUoY29ubi0+cGdwb3J0KTsKKioqKioqKioqKioqKioqCioqKiAyMTUyLDIx NjUgKioqKgogIFBRcmVzZXQoUEdjb25uICpjb25uKQogIHsKICAJaWYgKGNvbm4pCiAgCXsK ICAJCWNsb3NlUEdjb25uKGNvbm4pOwogIAohIAkJaWYgKGNvbm5lY3REQlN0YXJ0KGNvbm4p KQohIAkJCSh2b2lkKSBjb25uZWN0REJDb21wbGV0ZShjb25uKTsKICAJfQogIH0KICAKICAK ICAvKgogICAqIFBRcmVzZXRTdGFydDoKLS0tIDIxNzEsMjIwMSAtLS0tCiAgUFFyZXNldChQ R2Nvbm4gKmNvbm4pCiAgewogIAlpZiAoY29ubikKICAJewogIAkJY2xvc2VQR2Nvbm4oY29u bik7CiAgCiEgCQlpZiAoY29ubmVjdERCU3RhcnQoY29ubikgJiYgY29ubmVjdERCQ29tcGxl dGUoY29ubikpCiEgCQl7CiEgCQkJaW50IGk7CiEgCQkJUEdFdmVudENvbm5SZXNldCBldnQ7 CiEgCiEgCQkJZm9yIChpID0gMDsgaSA8IGNvbm4tPm5FdmVudHM7IGkrKykKISAJCQl7CiEg CQkJCWV2dC5jb25uID0gY29ubjsKISAKISAJCQkJaWYgKCFjb25uLT5ldmVudHNbaV0ucHJv YyhQR0VWVF9DT05OUkVTRVQsICZldnQsIGNvbm4tPmV2ZW50c1tpXS5wYXNzVGhyb3VnaCkp CiEgCQkJCXsKISAJCQkJCWNvbm4tPnN0YXR1cyA9IENPTk5FQ1RJT05fQkFEOwohIAkJCQkJ cHJpbnRmUFFFeHBCdWZmZXIoJmNvbm4tPmVycm9yTWVzc2FnZSwKISAJCQkJCQlsaWJwcV9n ZXR0ZXh0KCJQR0V2ZW50UHJvYyBcIiVzXCIgZmFpbGVkIGR1cmluZyBQR0VWVF9DT05OUkVT RVQgZXZlbnRcbiIpLAohIAkJCQkJCWNvbm4tPmV2ZW50c1tpXS5uYW1lKTsKISAJCQkJCWJy ZWFrOwohIAkJCQl9CiEgCQkJfQohIAkJfQogIAl9CiAgfQogIAogIAogIC8qCiAgICogUFFy ZXNldFN0YXJ0OgoqKioqKioqKioqKioqKioKKioqIDIxODcsMjE5OSAqKioqCiAgICogY2xv c2VzIHRoZSBleGlzdGluZyBjb25uZWN0aW9uIGFuZCBtYWtlcyBhIG5ldyBvbmUKICAgKi8K ICBQb3N0Z3Jlc1BvbGxpbmdTdGF0dXNUeXBlCiAgUFFyZXNldFBvbGwoUEdjb25uICpjb25u KQogIHsKICAJaWYgKGNvbm4pCiEgCQlyZXR1cm4gUFFjb25uZWN0UG9sbChjb25uKTsKICAK ICAJcmV0dXJuIFBHUkVTX1BPTExJTkdfRkFJTEVEOwogIH0KICAKICAvKgogICAqIFBRY2Fu Y2VsR2V0OiBnZXQgYSBQR2NhbmNlbCBzdHJ1Y3R1cmUgY29ycmVzcG9uZGluZyB0byBhIGNv bm5lY3Rpb24uCi0tLSAyMjIzLDIyNTkgLS0tLQogICAqIGNsb3NlcyB0aGUgZXhpc3Rpbmcg Y29ubmVjdGlvbiBhbmQgbWFrZXMgYSBuZXcgb25lCiAgICovCiAgUG9zdGdyZXNQb2xsaW5n U3RhdHVzVHlwZQogIFBRcmVzZXRQb2xsKFBHY29ubiAqY29ubikKICB7CiAgCWlmIChjb25u KQohIAl7CiEgCQlQb3N0Z3Jlc1BvbGxpbmdTdGF0dXNUeXBlIHN0YXR1cyA9IFBRY29ubmVj dFBvbGwoY29ubik7CiEgCiEgCQlpZiAoc3RhdHVzID09IFBHUkVTX1BPTExJTkdfT0spCiEg CQl7CiEgCQkJaW50IGk7CiEgCQkJUEdFdmVudENvbm5SZXNldCBldnQ7CiEgCiEgCQkJZm9y IChpID0gMDsgaSA8IGNvbm4tPm5FdmVudHM7IGkrKykKISAJCQl7CiEgCQkJCWV2dC5jb25u ID0gY29ubjsKISAKISAJCQkJaWYgKCFjb25uLT5ldmVudHNbaV0ucHJvYyhQR0VWVF9DT05O UkVTRVQsICZldnQsIGNvbm4tPmV2ZW50c1tpXS5wYXNzVGhyb3VnaCkpCiEgCQkJCXsKISAJ CQkJCWNvbm4tPnN0YXR1cyA9IENPTk5FQ1RJT05fQkFEOwohIAkJCQkJcHJpbnRmUFFFeHBC dWZmZXIoJmNvbm4tPmVycm9yTWVzc2FnZSwKISAJCQkJCQlsaWJwcV9nZXR0ZXh0KCJQR0V2 ZW50UHJvYyBcIiVzXCIgZmFpbGVkIGR1cmluZyBQR0VWVF9DT05OUkVTRVQgZXZlbnRcbiIp LAohIAkJCQkJCWNvbm4tPmV2ZW50c1tpXS5uYW1lKTsKISAJCQkJCXJldHVybiBQR1JFU19Q T0xMSU5HX0ZBSUxFRDsKISAJCQkJfQohIAkJCX0KISAJCX0KISAKISAJCXJldHVybiBzdGF0 dXM7CiEgCX0KICAKICAJcmV0dXJuIFBHUkVTX1BPTExJTkdfRkFJTEVEOwogIH0KICAKICAv KgogICAqIFBRY2FuY2VsR2V0OiBnZXQgYSBQR2NhbmNlbCBzdHJ1Y3R1cmUgY29ycmVzcG9u ZGluZyB0byBhIGNvbm5lY3Rpb24uCkluZGV4OiBzcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1l eGVjLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL3Byb2plY3RzL2N2c3Jvb3QvcGdzcWwv c3JjL2ludGVyZmFjZXMvbGlicHEvZmUtZXhlYy5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAx LjE5NgpkaWZmIC1DNiAtcjEuMTk2IGZlLWV4ZWMuYwoqKiogc3JjL2ludGVyZmFjZXMvbGli cHEvZmUtZXhlYy5jCTIzIEp1biAyMDA4IDIxOjEwOjQ5IC0wMDAwCTEuMTk2Ci0tLSBzcmMv aW50ZXJmYWNlcy9saWJwcS9mZS1leGVjLmMJNSBTZXAgMjAwOCAyMDowMzowNCAtMDAwMAoq KioqKioqKioqKioqKioKKioqIDYwLDcyICoqKioKICAJCQkJaW50IHJlc3VsdEZvcm1hdCk7 CiAgc3RhdGljIHZvaWQgcGFyc2VJbnB1dChQR2Nvbm4gKmNvbm4pOwogIHN0YXRpYyBib29s IFBRZXhlY1N0YXJ0KFBHY29ubiAqY29ubik7CiAgc3RhdGljIFBHcmVzdWx0ICpQUWV4ZWNG aW5pc2goUEdjb25uICpjb25uKTsKICBzdGF0aWMgaW50IFBRc2VuZERlc2NyaWJlKFBHY29u biAqY29ubiwgY2hhciBkZXNjX3R5cGUsCiAgCQkJICAgY29uc3QgY2hhciAqZGVzY190YXJn ZXQpOwohIAogIAogIC8qIC0tLS0tLS0tLS0tLS0tLS0KICAgKiBTcGFjZSBtYW5hZ2VtZW50 IGZvciBQR3Jlc3VsdC4KICAgKgogICAqIEZvcm1lcmx5LCBsaWJwcSBkaWQgYSBzZXBhcmF0 ZSBtYWxsb2MoKSBmb3IgZWFjaCBmaWVsZCBvZiBlYWNoIHR1cGxlCiAgICogcmV0dXJuZWQg YnkgYSBxdWVyeS4gIFRoaXMgd2FzIHJlbWFya2FibHkgZXhwZW5zaXZlIC0tLSBtYWxsb2Mv ZnJlZQotLS0gNjAsNzIgLS0tLQogIAkJCQlpbnQgcmVzdWx0Rm9ybWF0KTsKICBzdGF0aWMg dm9pZCBwYXJzZUlucHV0KFBHY29ubiAqY29ubik7CiAgc3RhdGljIGJvb2wgUFFleGVjU3Rh cnQoUEdjb25uICpjb25uKTsKICBzdGF0aWMgUEdyZXN1bHQgKlBRZXhlY0ZpbmlzaChQR2Nv bm4gKmNvbm4pOwogIHN0YXRpYyBpbnQgUFFzZW5kRGVzY3JpYmUoUEdjb25uICpjb25uLCBj aGFyIGRlc2NfdHlwZSwKICAJCQkgICBjb25zdCBjaGFyICpkZXNjX3RhcmdldCk7CiEgc3Rh dGljIGludCBjaGVja19maWVsZF9udW1iZXIoY29uc3QgUEdyZXN1bHQgKnJlcywgaW50IGZp ZWxkX251bSk7CiAgCiAgLyogLS0tLS0tLS0tLS0tLS0tLQogICAqIFNwYWNlIG1hbmFnZW1l bnQgZm9yIFBHcmVzdWx0LgogICAqCiAgICogRm9ybWVybHksIGxpYnBxIGRpZCBhIHNlcGFy YXRlIG1hbGxvYygpIGZvciBlYWNoIGZpZWxkIG9mIGVhY2ggdHVwbGUKICAgKiByZXR1cm5l ZCBieSBhIHF1ZXJ5LiAgVGhpcyB3YXMgcmVtYXJrYWJseSBleHBlbnNpdmUgLS0tIG1hbGxv Yy9mcmVlCioqKioqKioqKioqKioqKgoqKiogMTIxLDE0MSAqKioqCiAgI2RlZmluZSBQR1JF U1VMVF9EQVRBX0JMT0NLU0laRQkJMjA0OAogICNkZWZpbmUgUEdSRVNVTFRfQUxJR05fQk9V TkRBUlkJCU1BWElNVU1fQUxJR05PRgkJLyogZnJvbSBjb25maWd1cmUgKi8KICAjZGVmaW5l IFBHUkVTVUxUX0JMT0NLX09WRVJIRUFECQlNYXgoc2l6ZW9mKFBHcmVzdWx0X2RhdGEpLCBQ R1JFU1VMVF9BTElHTl9CT1VOREFSWSkKICAjZGVmaW5lIFBHUkVTVUxUX1NFUF9BTExPQ19U SFJFU0hPTEQJKFBHUkVTVUxUX0RBVEFfQkxPQ0tTSVpFIC8gMikKICAKICAKICAvKgogICAq IFBRbWFrZUVtcHR5UEdyZXN1bHQKICAgKgkgcmV0dXJucyBhIG5ld2x5IGFsbG9jYXRlZCwg aW5pdGlhbGl6ZWQgUEdyZXN1bHQgd2l0aCBnaXZlbiBzdGF0dXMuCiAgICoJIElmIGNvbm4g aXMgbm90IE5VTEwgYW5kIHN0YXR1cyBpbmRpY2F0ZXMgYW4gZXJyb3IsIHRoZSBjb25uJ3MK ICAgKgkgZXJyb3JNZXNzYWdlIGlzIGNvcGllZC4KICAgKgogICAqIE5vdGUgdGhpcyBpcyBl eHBvcnRlZCAtLS0geW91IHdvdWxkbid0IHRoaW5rIGFuIGFwcGxpY2F0aW9uIHdvdWxkIG5l ZWQKICAgKiB0byBidWlsZCBpdHMgb3duIFBHcmVzdWx0cywgYnV0IHRoaXMgaGFzIHByb3Zl biB1c2VmdWwgaW4gYm90aCBsaWJwZ3RjbAohICAqIGFuZCB0aGUgUGVybDUgaW50ZXJmYWNl LCBzbyBtYXliZSBpdCdzIG5vdCBzbyB1bnJlYXNvbmFibGUuCiAgICovCiAgCiAgUEdyZXN1 bHQgKgogIFBRbWFrZUVtcHR5UEdyZXN1bHQoUEdjb25uICpjb25uLCBFeGVjU3RhdHVzVHlw ZSBzdGF0dXMpCiAgewogIAlQR3Jlc3VsdCAgICpyZXN1bHQ7Ci0tLSAxMjEsMTY5IC0tLS0K ICAjZGVmaW5lIFBHUkVTVUxUX0RBVEFfQkxPQ0tTSVpFCQkyMDQ4CiAgI2RlZmluZSBQR1JF U1VMVF9BTElHTl9CT1VOREFSWQkJTUFYSU1VTV9BTElHTk9GCQkvKiBmcm9tIGNvbmZpZ3Vy ZSAqLwogICNkZWZpbmUgUEdSRVNVTFRfQkxPQ0tfT1ZFUkhFQUQJCU1heChzaXplb2YoUEdy ZXN1bHRfZGF0YSksIFBHUkVTVUxUX0FMSUdOX0JPVU5EQVJZKQogICNkZWZpbmUgUEdSRVNV TFRfU0VQX0FMTE9DX1RIUkVTSE9MRAkoUEdSRVNVTFRfREFUQV9CTE9DS1NJWkUgLyAyKQog IAogIAorIC8qIERvZXMgbm90IGR1cGxpY2F0ZSB0aGUgZXZlbnQgaW5zdGFuY2UgZGF0YSwg c2V0cyB0aGlzIHRvIE5VTEwgKi8KKyBzdGF0aWMgUEdFdmVudCAqCisgZHVwRXZlbnRzKFBH RXZlbnQgKmV2ZW50cywgaW50IGNvdW50KQorIHsKKyAJaW50IGk7CisgCVBHRXZlbnQgKm5l d0V2ZW50czsKKyAKKyAJaWYgKCFldmVudHMgfHwgY291bnQgPD0gMCkKKyAJCXJldHVybiBO VUxMOworIAorIAluZXdFdmVudHMgPSAoUEdFdmVudCAqKSBtYWxsb2MoY291bnQgKiBzaXpl b2YoUEdFdmVudCkpOworIAlpZiAoIW5ld0V2ZW50cykKKyAJCXJldHVybiBOVUxMOworIAor IAltZW1jcHkobmV3RXZlbnRzLCBldmVudHMsIGNvdW50ICogc2l6ZW9mKFBHRXZlbnQpKTsK KyAKKyAJLyogTlVMTCBvdXQgdGhlIGRhdGEgcG9pbnRlciBhbmQgZGVlcCBjb3B5IG5hbWUg Ki8KKyAJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCisgCXsKKyAJCW5ld0V2ZW50c1tp XS5uYW1lID0gc3RyZHVwKG5ld0V2ZW50c1tpXS5uYW1lKTsKKyAJCW5ld0V2ZW50c1tpXS5k YXRhID0gTlVMTDsKKyAJfQorIAorIAlyZXR1cm4gbmV3RXZlbnRzOworIH0KKyAKICAvKgog ICAqIFBRbWFrZUVtcHR5UEdyZXN1bHQKICAgKgkgcmV0dXJucyBhIG5ld2x5IGFsbG9jYXRl ZCwgaW5pdGlhbGl6ZWQgUEdyZXN1bHQgd2l0aCBnaXZlbiBzdGF0dXMuCiAgICoJIElmIGNv bm4gaXMgbm90IE5VTEwgYW5kIHN0YXR1cyBpbmRpY2F0ZXMgYW4gZXJyb3IsIHRoZSBjb25u J3MKICAgKgkgZXJyb3JNZXNzYWdlIGlzIGNvcGllZC4KICAgKgogICAqIE5vdGUgdGhpcyBp cyBleHBvcnRlZCAtLS0geW91IHdvdWxkbid0IHRoaW5rIGFuIGFwcGxpY2F0aW9uIHdvdWxk IG5lZWQKICAgKiB0byBidWlsZCBpdHMgb3duIFBHcmVzdWx0cywgYnV0IHRoaXMgaGFzIHBy b3ZlbiB1c2VmdWwgaW4gYm90aCBsaWJwZ3RjbAohICAqIGFuZCB0aGUgUGVybDUgaW50ZXJm YWNlLCBzbyBtYXliZSBpdCdzIG5vdCBzbyB1bnJlYXNvbmFibGUuICBJZiBjb25uIGlzCiEg ICogbm90IE5VTEwsIHRoZSBQR2V2ZW50cyBhcnJheSB3aWxsIGJlIGNvcGllZCBmcm9tIHRo ZSBQR2Nvbm4gdG8gdGhlCiEgICogY3JlYXRlZCBQR3Jlc3VsdC4KICAgKi8KICAKICBQR3Jl c3VsdCAqCiAgUFFtYWtlRW1wdHlQR3Jlc3VsdChQR2Nvbm4gKmNvbm4sIEV4ZWNTdGF0dXNU eXBlIHN0YXR1cykKICB7CiAgCVBHcmVzdWx0ICAgKnJlc3VsdDsKKioqKioqKioqKioqKioq CioqKiAxNTcsMTc1ICoqKioKLS0tIDE4NSwyMTggLS0tLQogIAlyZXN1bHQtPmVyck1zZyA9 IE5VTEw7CiAgCXJlc3VsdC0+ZXJyRmllbGRzID0gTlVMTDsKICAJcmVzdWx0LT5udWxsX2Zp ZWxkWzBdID0gJ1wwJzsKICAJcmVzdWx0LT5jdXJCbG9jayA9IE5VTEw7CiAgCXJlc3VsdC0+ Y3VyT2Zmc2V0ID0gMDsKICAJcmVzdWx0LT5zcGFjZUxlZnQgPSAwOworIAlyZXN1bHQtPm5F dmVudHMgPSAwOworIAlyZXN1bHQtPmV2ZW50cyA9IE5VTEw7CiAgCiAgCWlmIChjb25uKQog IAl7CiAgCQkvKiBjb3B5IGNvbm5lY3Rpb24gZGF0YSB3ZSBtaWdodCBuZWVkIGZvciBvcGVy YXRpb25zIG9uIFBHcmVzdWx0ICovCiAgCQlyZXN1bHQtPm5vdGljZUhvb2tzID0gY29ubi0+ bm90aWNlSG9va3M7CiAgCQlyZXN1bHQtPmNsaWVudF9lbmNvZGluZyA9IGNvbm4tPmNsaWVu dF9lbmNvZGluZzsKICAKKyAJCS8qIGNvcHkgZXZlbnRzIGZyb20gY29ubmVjdGlvbiAqLwor IAkJaWYgKGNvbm4tPm5FdmVudHMgPiAwKQorIAkJeworIAkJCXJlc3VsdC0+ZXZlbnRzID0g ZHVwRXZlbnRzKGNvbm4tPmV2ZW50cywgY29ubi0+bkV2ZW50cyk7CisgCQkJaWYgKCFyZXN1 bHQtPmV2ZW50cykKKyAJCQl7CisgCQkJCVBRY2xlYXIocmVzdWx0KTsKKyAJCQkJcmV0dXJu IE5VTEw7CisgCQkJfQorIAorIAkJCXJlc3VsdC0+bkV2ZW50cyA9IGNvbm4tPm5FdmVudHM7 CisgCQl9CisgCiAgCQkvKiBjb25zaWRlciBjb3B5aW5nIGNvbm4ncyBlcnJvck1lc3NhZ2Ug Ki8KICAJCXN3aXRjaCAoc3RhdHVzKQogIAkJewogIAkJCWNhc2UgUEdSRVNfRU1QVFlfUVVF Ulk6CiAgCQkJY2FzZSBQR1JFU19DT01NQU5EX09LOgogIAkJCWNhc2UgUEdSRVNfVFVQTEVT X09LOgoqKioqKioqKioqKioqKioKKioqIDE5MiwyMDMgKioqKgotLS0gMjM1LDQ5MyAtLS0t CiAgCQlyZXN1bHQtPmNsaWVudF9lbmNvZGluZyA9IFBHX1NRTF9BU0NJSTsKICAJfQogIAog IAlyZXR1cm4gcmVzdWx0OwogIH0KICAKKyAvKiBQUXNldFJlc3VsdEF0dHJzCisgICogU2V0 IHRoZSBhdHRyaWJ1dGVzIGZvciBhIGdpdmVuIHJlc3VsdC4gIFRoaXMgZnVuY3Rpb24gZmFp bHMgaWYgdGhlcmUgYXJlCisgICogYWxyZWFkeSBhdHRyaWJ1dGVzIGNvbnRhaW5lZCBpbiB0 aGUgcHJvdmlkZWQgcmVzdWx0LiAgVGhlIGNhbGwgaXMKKyAgKiBpZ25vcmVkIGlmIG51bUF0 dHJpYnV0ZXMgaXMgaXMgemVybyBvciBhdHREZXNjcyBpcyBOVUxMLiAgSWYgdGhlCisgICog ZnVuY3Rpb24gZmFpbHMsIGl0IHJldHVybnMgemVyby4gIElmIHRoZSBmdW5jdGlvbiBzdWNj ZWVkcywgaXQKKyAgKiByZXR1cm5zIGEgbm9uLXplcm8gdmFsdWUuCisgICovCisgaW50Cisg UFFzZXRSZXN1bHRBdHRycyhQR3Jlc3VsdCAqcmVzLCBpbnQgbnVtQXR0cmlidXRlcywgUEdy ZXNBdHREZXNjICphdHREZXNjcykKKyB7CisgCWludCBpOworIAorIAkvKiBJZiBhdHRycyBh bHJlYWR5IGV4aXN0LCB0aGV5IGNhbm5vdCBiZSBvdmVyd3JpdHRlbi4gKi8KKyAJaWYgKCFy ZXMgfHwgcmVzLT5udW1BdHRyaWJ1dGVzID4gMCkKKyAJCXJldHVybiBGQUxTRTsKKyAKKyAJ LyogaWdub3JlIHJlcXVlc3QgKi8KKyAJaWYgKG51bUF0dHJpYnV0ZXMgPD0gMCB8fCAhYXR0 RGVzY3MpCisgCQlyZXR1cm4gVFJVRTsKKyAKKyAJcmVzLT5hdHREZXNjcyA9IChQR3Jlc0F0 dERlc2MgKikgUFFyZXN1bHRBbGxvYyhyZXMsCisgCQludW1BdHRyaWJ1dGVzICogc2l6ZW9m KFBHcmVzQXR0RGVzYykpOworIAorIAlpZiAoIXJlcy0+YXR0RGVzY3MpCisgCQlyZXR1cm4g RkFMU0U7CisgCisgCXJlcy0+bnVtQXR0cmlidXRlcyA9IG51bUF0dHJpYnV0ZXM7CisgCW1l bWNweShyZXMtPmF0dERlc2NzLCBhdHREZXNjcywKKyAJCW51bUF0dHJpYnV0ZXMgKiBzaXpl b2YoUEdyZXNBdHREZXNjKSk7CisgCisgCS8qIHJlc3VsdGFsbG9jIHRoZSBhdHRyaWJ1dGUg bmFtZXMuICBUaGUgYWJvdmUgbWVtY3B5IGhhcyB0aGUgYXR0cgorIAkgKiBuYW1lcyBwb2lu dGluZyBhdCB0aGUgY2FsbGVycyBwcm92aWRlZCBhdHREZXNjcyBtZW1vcnkuCisgCSAqLwor IAlyZXMtPmJpbmFyeSA9IDE7CisgCWZvciAoaSA9IDA7IGkgPCByZXMtPm51bUF0dHJpYnV0 ZXM7IGkrKykKKyAJeworIAkJaWYgKHJlcy0+YXR0RGVzY3NbaV0ubmFtZSkKKyAJCQlyZXMt PmF0dERlc2NzW2ldLm5hbWUgPSBwcVJlc3VsdFN0cmR1cChyZXMsIHJlcy0+YXR0RGVzY3Nb aV0ubmFtZSk7CisgCQllbHNlCisgCQkJcmVzLT5hdHREZXNjc1tpXS5uYW1lID0gcmVzLT5u dWxsX2ZpZWxkOworIAorIAkJaWYgKCFyZXMtPmF0dERlc2NzW2ldLm5hbWUpCisgCQkJcmV0 dXJuIEZBTFNFOworIAorIAkJLyogQWx0aG91Z2ggZGVwcmVjYXRlZCwgYmVjYXVzZSByZXN1 bHRzIGNhbiBoYXZlIHRleHQrYmluYXJ5IGNvbHVtbnMsCisgCQkgKiBpdHMgZWFzeSBlbm91 Z2ggdG8gZGVkdWNlIHNvIHNldCBpdCBmb3IgY29tcGxldGVuZXNzLgorIAkJICovCisgCQlp ZiAocmVzLT5hdHREZXNjc1tpXS5mb3JtYXQgPT0gMCkKKyAJCQlyZXMtPmJpbmFyeSA9IDA7 CisgCX0KKyAKKyAJcmV0dXJuIFRSVUU7CisgfQorIAorIC8qCisgICogUFFjb3B5UmVzdWx0 CisgICogUmV0dXJucyBhIGRlZXAgY29weSBvZiB0aGUgcHJvdmlkZWQgJ3NyYycgUEdyZXN1 bHQsIHdoaWNoIGNhbm5vdCBiZSBOVUxMLgorICAqIFRoZSAnZmxhZ3MnIGFyZ3VtZW50IGNv bnRyb2xzIHdoaWNoIHBvcnRpb25zIG9mIHRoZSByZXN1bHQgd2lsbCBvciB3aWxsCisgICog Tk9UIGJlIGNvcGllZC4gIFRoZSBjcmVhdGVkIHJlc3VsdCBpcyBhbHdheXMgcHV0IGludG8g dGhlCisgICogUEdSRVNfVFVQTEVTX09LIHN0YXR1cy4gIFRoZSBzb3VyY2UgcmVzdWx0IGVy cm9yIG1lc3NhZ2UgaXMgbm90IGNvcGllZCwKKyAgKiBhbHRob3VnaCBjbWRTdGF0dXMgaXMu CisgICoKKyAgKiBUbyBzZXQgY3VzdG9tIGF0dHJpYnV0ZXMsIHNlZSBQUXNldFJlc3VsdEF0 dHJzLiAgVGhhdCBmdW5jdGlvbiByZXF1aXJlcworICAqIHRoYXQgdGhlcmUgYXJlIG5vIGF0 dHJzIGNvbnRhaW5lZCBpbiB0aGUgcmVzdWx0LCBzbyB0byB1c2UgdGhhdAorICAqIGZ1bmN0 aW9uIHlvdSBjYW5ub3QgdXNlIHRoZSBQR19DT1BZUkVTX0FUVFJTIG9yIFBHX0NPUFlSRVNf VFVQTEVTCisgICogb3B0aW9ucyB3aXRoIHRoaXMgZnVuY3Rpb24uCisgICoKKyAgKiBPcHRp b25zOgorICAqICAgUEdfQ09QWVJFU19BVFRSUyAtIENvcHkgdGhlIHNvdXJjZSByZXN1bHQn cyBhdHRyaWJ1dGVzCisgICoKKyAgKiAgIFBHX0NPUFlSRVNfVFVQTEVTIC0gQ29weSB0aGUg c291cmNlIHJlc3VsdCdzIHR1cGxlcy4gIFRoaXMgaW1wbGllcworICAqICAgY29weWluZyB0 aGUgYXR0cnMsIGJlaW5nIGhvdyB0aGUgYXR0cnMgYXJlIG5lZWRlZCBieSB0aGUgdHVwbGVz LgorICAqCisgICogICBQR19DT1BZUkVTX0VWRU5UUyAtIENvcHkgdGhlIHNvdXJjZSByZXN1 bHQncyBldmVudHMuCisgICoKKyAgKiAgIFBHX0NPUFlSRVNfTk9USUNFSE9PS1MgLSBDb3B5 IHRoZSBzb3VyY2UgcmVzdWx0J3Mgbm90aWNlIGhvb2tzLgorICAqLworIAorIFBHcmVzdWx0 ICoKKyBQUWNvcHlSZXN1bHQoY29uc3QgUEdyZXN1bHQgKnNyYywgaW50IGZsYWdzKQorIHsK KyAJaW50IGk7CisgCVBHcmVzdWx0ICpkZXN0OworIAlQR0V2ZW50UmVzdWx0Q29weSBldnQ7 CisgCisgCWlmICghc3JjKQorIAkJcmV0dXJuIE5VTEw7CisgCisgCS8qIEF1dG9tYXRpY2Fs bHkgdHVybiBvbiBhdHRycyBmbGFncyBiZWNhdXNlIHlvdSBjYW4ndCBjb3B5IHR1cGxlcwor IAkgKiB3aXRob3V0IGNvcHlpbmcgdGhlIGF0dHJzLiAgX1RVUExFUyBpbXBsaWVzIF9BVFRS Uy4KKyAJICovCisgCWlmIChmbGFncyAmIFBHX0NPUFlSRVNfVFVQTEVTKQorIAkJZmxhZ3Mg fD0gUEdfQ09QWVJFU19BVFRSUzsKKyAKKyAJZGVzdCA9IFBRbWFrZUVtcHR5UEdyZXN1bHQo KFBHY29ubiAqKU5VTEwsIFBHUkVTX1RVUExFU19PSyk7CisgCWlmICghZGVzdCkKKyAJCXJl dHVybiBOVUxMOworIAorIAkvKiBhbHdheXMgY29weSB0aGVzZSBvdmVyLiAgSXMgY21kU3Rh dHVzIHVzZWZ1bCBoZXJlPyAqLworIAlkZXN0LT5jbGllbnRfZW5jb2RpbmcgPSBzcmMtPmNs aWVudF9lbmNvZGluZzsKKyAJc3RyY3B5KGRlc3QtPmNtZFN0YXR1cywgc3JjLT5jbWRTdGF0 dXMpOworIAorIAkvKiBXYW50cyB0byBjb3B5IG5vdGljZSBob29rcyAqLworIAlpZiAoZmxh Z3MgJiBQR19DT1BZUkVTX05PVElDRUhPT0tTKQorIAkJZGVzdC0+bm90aWNlSG9va3MgPSBz cmMtPm5vdGljZUhvb2tzOworIAorIAkvKiBXYW50cyBhdHRycyAqLworIAlpZiAoKGZsYWdz ICYgUEdfQ09QWVJFU19BVFRSUykgJiYKKyAJCSAhUFFzZXRSZXN1bHRBdHRycyhkZXN0LCBz cmMtPm51bUF0dHJpYnV0ZXMsIHNyYy0+YXR0RGVzY3MpKQorIAl7CisgCQlQUWNsZWFyKGRl c3QpOworIAkJcmV0dXJuIE5VTEw7CisgCX0KKyAKKyAJLyogV2FudHMgdG8gY29weSByZXN1 bHQgdHVwbGVzOiB1c2UgUFFzZXR2YWx1ZSgpLiAqLworIAlpZiAoKGZsYWdzICYgUEdfQ09Q WVJFU19UVVBMRVMpICYmIHNyYy0+bnR1cHMgPiAwKQorIAl7CisgCQlpbnQgdHVwLCBmaWVs ZDsKKyAJCWZvciAodHVwID0gMDsgdHVwIDwgc3JjLT5udHVwczsgdHVwKyspCisgCQkJZm9y IChmaWVsZCA9IDA7IGZpZWxkIDwgc3JjLT5udW1BdHRyaWJ1dGVzOyBmaWVsZCsrKQorIAkJ CQlQUXNldHZhbHVlKGRlc3QsIHR1cCwgZmllbGQsIHNyYy0+dHVwbGVzW3R1cF1bZmllbGRd LnZhbHVlLAorIAkJCQkJc3JjLT50dXBsZXNbdHVwXVtmaWVsZF0ubGVuKTsKKyAJfQorIAor IAkvKiBXYW50cyB0byBjb3B5IFBHRXZlbnRzLiAqLworIAlpZiAoKGZsYWdzICYgUEdfQ09Q WVJFU19FVkVOVFMpICYmIHNyYy0+bkV2ZW50cyA+IDApCisgCXsKKyAJCWRlc3QtPmV2ZW50 cyA9IGR1cEV2ZW50cyhzcmMtPmV2ZW50cywgc3JjLT5uRXZlbnRzKTsKKyAJCWlmICghZGVz dC0+ZXZlbnRzKQorIAkJeworIAkJCVBRY2xlYXIoZGVzdCk7CisgCQkJcmV0dXJuIE5VTEw7 CisgCQl9CisgCisgCQlkZXN0LT5uRXZlbnRzID0gc3JjLT5uRXZlbnRzOworIAl9CisgCisg CS8qIFRyaWdnZXIgUEdFVlRfUkVTVUxUQ09QWSBldmVudCAqLworIAlmb3IgKGkgPSAwOyBp IDwgZGVzdC0+bkV2ZW50czsgaSsrKQorIAl7CisgCQlldnQuc3JjID0gc3JjOworIAkJZXZ0 LmRlc3QgPSBkZXN0OworIAkJaWYgKCFkZXN0LT5ldmVudHNbaV0ucHJvYyhQR0VWVF9SRVNV TFRDT1BZLCAmZXZ0LCBkZXN0LT5ldmVudHNbaV0ucGFzc1Rocm91Z2gpKQorIAkJeworIAkJ CVBRY2xlYXIoZGVzdCk7CisgCQkJcmV0dXJuIE5VTEw7CisgCQl9CisgCX0KKyAKKyAJcmV0 dXJuIGRlc3Q7CisgfQorIAorIGludAorIFBRc2V0dmFsdWUoUEdyZXN1bHQgKnJlcywgaW50 IHR1cF9udW0sIGludCBmaWVsZF9udW0sCisgCWNoYXIgKnZhbHVlLCBpbnQgbGVuKQorIHsK KyAJUEdyZXNBdHRWYWx1ZSAqYXR0dmFsOworIAorIAlpZiAoIWNoZWNrX2ZpZWxkX251bWJl cihyZXMsIGZpZWxkX251bSkpCisgCQlyZXR1cm4gRkFMU0U7CisgCisgCS8qIEludmFsaWQg dHVwX251bSwgbXVzdCBiZSA8PSBudHVwcyAqLworIAlpZiAodHVwX251bSA+IHJlcy0+bnR1 cHMpCisgCQlyZXR1cm4gRkFMU0U7CisgCisgCS8qIG5lZWQgdG8gZ3JvdyB0aGUgdHVwbGUg dGFibGUgKi8KKyAJaWYgKHJlcy0+bnR1cHMgPj0gcmVzLT50dXBBcnJTaXplKQorIAl7Cisg CQlpbnQgbiA9IHJlcy0+dHVwQXJyU2l6ZSA/IHJlcy0+dHVwQXJyU2l6ZSAqIDIgOiAxMjg7 CisgCQlQR3Jlc0F0dFZhbHVlICoqdHVwczsKKyAKKyAJCWlmIChyZXMtPnR1cGxlcykKKyAJ CQl0dXBzID0gKFBHcmVzQXR0VmFsdWUgKiopIHJlYWxsb2MocmVzLT50dXBsZXMsIG4gKiBz aXplb2YoUEdyZXNBdHRWYWx1ZSAqKSk7CisgCQllbHNlCisgCQkJdHVwcyA9IChQR3Jlc0F0 dFZhbHVlICoqKSBtYWxsb2MobiAqIHNpemVvZihQR3Jlc0F0dFZhbHVlICopKTsKKyAKKyAJ CWlmICghdHVwcykKKyAJCQlyZXR1cm4gRkFMU0U7CisgCisgCQltZW1zZXQodHVwcyArIHJl cy0+dHVwQXJyU2l6ZSwgMCwKKyAJCQkobiAtIHJlcy0+dHVwQXJyU2l6ZSkgKiBzaXplb2Yo UEdyZXNBdHRWYWx1ZSAqKSk7CisgCQlyZXMtPnR1cGxlcyA9IHR1cHM7CisgCQlyZXMtPnR1 cEFyclNpemUgPSBuOworIAl9CisgCisgCS8qIG5lZWQgdG8gYWxsb2NhdGUgYSBuZXcgdHVw bGUgKi8KKyAJaWYgKHR1cF9udW0gPT0gcmVzLT5udHVwcyAmJiAhcmVzLT50dXBsZXNbdHVw X251bV0pCisgCXsKKyAJCWludCBpOworIAkJUEdyZXNBdHRWYWx1ZSAqdHVwOworIAorIAkJ dHVwID0gKFBHcmVzQXR0VmFsdWUgKikgcHFSZXN1bHRBbGxvYyhyZXMsCisgCQkJcmVzLT5u dW1BdHRyaWJ1dGVzICogc2l6ZW9mKFBHcmVzQXR0VmFsdWUpLCBUUlVFKTsKKyAKKyAJCWlm ICghdHVwKQorIAkJCXJldHVybiBGQUxTRTsKKyAKKyAJCS8qIGluaXRpYWxpemUgZWFjaCBj b2x1bW4gdG8gTlVMTCAqLworIAkJZm9yIChpID0gMDsgaSA8IHJlcy0+bnVtQXR0cmlidXRl czsgaSsrKQorIAkJeworIAkJCXR1cFtpXS5sZW4gPSBOVUxMX0xFTjsKKyAJCQl0dXBbaV0u dmFsdWUgPSByZXMtPm51bGxfZmllbGQ7CisgCQl9CisgCisgCQlyZXMtPnR1cGxlc1t0dXBf bnVtXSA9IHR1cDsKKyAJCXJlcy0+bnR1cHMrKzsKKyAJfQorIAorIAlhdHR2YWwgPSAmcmVz LT50dXBsZXNbdHVwX251bV1bZmllbGRfbnVtXTsKKyAKKyAJLyogT24gdG9wIG9mIE5VTExf TEVOLCB0cmVhdCBhIE5VTEwgdmFsdWUgYXMgYSBOVUxMIGZpZWxkICovCisgCWlmIChsZW4g PT0gTlVMTF9MRU4gfHwgdmFsdWUgPT0gTlVMTCkKKyAJeworIAkJYXR0dmFsLT5sZW4gPSBO VUxMX0xFTjsKKyAJCWF0dHZhbC0+dmFsdWUgPSByZXMtPm51bGxfZmllbGQ7CisgCX0KKyAJ ZWxzZQorIAl7CisgCQlpZiAobGVuIDwgMCkKKyAJCQlsZW4gPSAwOworIAorIAkJaWYgKGxl biA9PSAwKQorIAkJeworIAkJCWF0dHZhbC0+bGVuID0gMDsKKyAJCQlhdHR2YWwtPnZhbHVl ID0gcmVzLT5udWxsX2ZpZWxkOworIAkJfQorIAkJZWxzZQorIAkJeworIAkJCWF0dHZhbC0+ dmFsdWUgPSAoY2hhciAqKSBQUXJlc3VsdEFsbG9jKHJlcywgbGVuICsgMSk7CisgCQkJaWYg KCFhdHR2YWwtPnZhbHVlKQorIAkJCQlyZXR1cm4gRkFMU0U7CisgCisgCQkJYXR0dmFsLT5s ZW4gPSBsZW47CisgCQkJbWVtY3B5KGF0dHZhbC0+dmFsdWUsIHZhbHVlLCBsZW4pOworIAkJ CWF0dHZhbC0+dmFsdWVbbGVuXSA9ICdcMCc7CisgCQl9CisgCX0KKyAKKyAJcmV0dXJuIFRS VUU7CisgfQorIAorIHZvaWQgKgorIFBRcmVzdWx0QWxsb2MoUEdyZXN1bHQgKnJlcywgc2l6 ZV90IG5CeXRlcykKKyB7CisgCXJldHVybiBwcVJlc3VsdEFsbG9jKHJlcywgbkJ5dGVzLCBU UlVFKTsKKyB9CisgCiAgLyoKICAgKiBwcVJlc3VsdEFsbG9jIC0KICAgKgkJQWxsb2NhdGUg c3Vic2lkaWFyeSBzdG9yYWdlIGZvciBhIFBHcmVzdWx0LgogICAqCiAgICogbkJ5dGVzIGlz IHRoZSBhbW91bnQgb2Ygc3BhY2UgbmVlZGVkIGZvciB0aGUgb2JqZWN0LgogICAqIElmIGlz QmluYXJ5IGlzIHRydWUsIHdlIGFzc3VtZSB0aGF0IHdlIG5lZWQgdG8gYWxpZ24gdGhlIG9i amVjdCBvbgoqKioqKioqKioqKioqKioKKioqIDM0OSwzNjUgKioqKgotLS0gNjM5LDY3MSAt LS0tCiAgICogUFFjbGVhciAtCiAgICoJICBmcmVlJ3MgdGhlIG1lbW9yeSBhc3NvY2lhdGVk IHdpdGggYSBQR3Jlc3VsdAogICAqLwogIHZvaWQKICBQUWNsZWFyKFBHcmVzdWx0ICpyZXMp CiAgeworIAlpbnQgaTsKICAJUEdyZXN1bHRfZGF0YSAqYmxvY2s7CisgCVBHRXZlbnRSZXN1 bHREZXN0cm95IGV2dDsKICAKICAJaWYgKCFyZXMpCiAgCQlyZXR1cm47CiAgCisgCWZvciAo aSA9IDA7IGkgPCByZXMtPm5FdmVudHM7IGkrKykKKyAJeworIAkJZXZ0LnJlc3VsdCA9IHJl czsKKyAJCSh2b2lkKXJlcy0+ZXZlbnRzW2ldLnByb2MoUEdFVlRfUkVTVUxUREVTVFJPWSwg JmV2dCwgcmVzLT5ldmVudHNbaV0ucGFzc1Rocm91Z2gpOworIAkJZnJlZShyZXMtPmV2ZW50 c1tpXS5uYW1lKTsKKyAJfQorIAorIAlpZiAocmVzLT5ldmVudHMpCisgCXsKKyAJCWZyZWUo cmVzLT5ldmVudHMpOworIAkJcmVzLT5ldmVudHMgPSBOVUxMOworIAkJcmVzLT5uRXZlbnRz ID0gMDsKKyAJfQorIAogIAkvKiBGcmVlIGFsbCB0aGUgc3Vic2lkaWFyeSBibG9ja3MgKi8K ICAJd2hpbGUgKChibG9jayA9IHJlcy0+Y3VyQmxvY2spICE9IE5VTEwpCiAgCXsKICAJCXJl cy0+Y3VyQmxvY2sgPSBibG9jay0+bmV4dDsKICAJCWZyZWUoYmxvY2spOwogIAl9CioqKioq KioqKioqKioqKgoqKiogMTE5MiwxMjA0ICoqKioKICAgKgkgIG1lbW9yeSkuCiAgICovCiAg CiAgUEdyZXN1bHQgKgogIFBRZ2V0UmVzdWx0KFBHY29ubiAqY29ubikKICB7CiEgCVBHcmVz dWx0ICAgKnJlczsKICAKICAJaWYgKCFjb25uKQogIAkJcmV0dXJuIE5VTEw7CiAgCiAgCS8q IFBhcnNlIGFueSBhdmFpbGFibGUgZGF0YSwgaWYgb3VyIHN0YXRlIHBlcm1pdHMuICovCiAg CXBhcnNlSW5wdXQoY29ubik7Ci0tLSAxNDk4LDE1MTAgLS0tLQogICAqCSAgbWVtb3J5KS4K ICAgKi8KICAKICBQR3Jlc3VsdCAqCiAgUFFnZXRSZXN1bHQoUEdjb25uICpjb25uKQogIHsK ISAJUEdyZXN1bHQgICAqcmVzPU5VTEw7CiAgCiAgCWlmICghY29ubikKICAJCXJldHVybiBO VUxMOwogIAogIAkvKiBQYXJzZSBhbnkgYXZhaWxhYmxlIGRhdGEsIGlmIG91ciBzdGF0ZSBw ZXJtaXRzLiAqLwogIAlwYXJzZUlucHV0KGNvbm4pOwoqKioqKioqKioqKioqKioKKioqIDEy NjcsMTI3OCAqKioqCi0tLSAxNTczLDE2MTIgLS0tLQogIAkJCQkJCQkgIGxpYnBxX2dldHRl eHQoInVuZXhwZWN0ZWQgYXN5bmNTdGF0dXM6ICVkXG4iKSwKICAJCQkJCQkJICAoaW50KSBj b25uLT5hc3luY1N0YXR1cyk7CiAgCQkJcmVzID0gUFFtYWtlRW1wdHlQR3Jlc3VsdChjb25u LCBQR1JFU19GQVRBTF9FUlJPUik7CiAgCQkJYnJlYWs7CiAgCX0KICAKKyAJaWYgKHJlcyAm JiByZXMtPm5FdmVudHMgPiAwICYmCisgCQkocmVzLT5yZXN1bHRTdGF0dXMgPT0gUEdSRVNf Q09NTUFORF9PSyB8fAorIAkJIHJlcy0+cmVzdWx0U3RhdHVzID09IFBHUkVTX1RVUExFU19P SyB8fAorIAkJIHJlcy0+cmVzdWx0U3RhdHVzID09IFBHUkVTX0VNUFRZX1FVRVJZKSkKKyAJ eworIAkJaW50IGk7CisgCQlQR0V2ZW50UmVzdWx0Q3JlYXRlIGV2dDsKKyAKKyAJCWZvciAo aSA9IDA7IGkgPCByZXMtPm5FdmVudHM7IGkrKykKKyAJCXsKKyAJCQlldnQuY29ubiA9IGNv bm47CisgCQkJZXZ0LnJlc3VsdCA9IHJlczsKKyAKKyAJCQlpZiAoIXJlcy0+ZXZlbnRzW2ld LnByb2MoUEdFVlRfUkVTVUxUQ1JFQVRFLCAmZXZ0LCByZXMtPmV2ZW50c1tpXS5wYXNzVGhy b3VnaCkpCisgCQkJeworIAkJCQljaGFyIG1zZ1syNTZdOworIAorIAkJCQlzcHJpbnRmKG1z ZywKKyAJCQkJCSJQR0V2ZW50UHJvYyBcIiVzXCIgZmFpbGVkIGR1cmluZyBQR0VWVF9SRVNV TFRDUkVBVEUgZXZlbnQiLAorIAkJCQkJcmVzLT5ldmVudHNbaV0ubmFtZSk7CisgCisgCQkJ CXBxU2V0UmVzdWx0RXJyb3IocmVzLCBtc2cpOworIAkJCQlyZXMtPnJlc3VsdFN0YXR1cyA9 IFBHUkVTX0ZBVEFMX0VSUk9SOworIAkJCQlicmVhazsKKyAJCQl9CisgCQl9CisgCX0KKyAK ICAJcmV0dXJuIHJlczsKICB9CiAgCiAgCiAgLyoKICAgKiBQUWV4ZWMKSW5kZXg6IHNyYy9p bnRlcmZhY2VzL2xpYnBxL2xpYnBxLWZlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL3By b2plY3RzL2N2c3Jvb3QvcGdzcWwvc3JjL2ludGVyZmFjZXMvbGlicHEvbGlicHEtZmUuaCx2 CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNDIKZGlmZiAtQzYgLXIxLjE0MiBsaWJwcS1mZS5o CioqKiBzcmMvaW50ZXJmYWNlcy9saWJwcS9saWJwcS1mZS5oCTE5IE1hciAyMDA4IDAwOjM5 OjMzIC0wMDAwCTEuMTQyCi0tLSBzcmMvaW50ZXJmYWNlcy9saWJwcS9saWJwcS1mZS5oCTUg U2VwIDIwMDggMjA6MDM6MDQgLTAwMDAKKioqKioqKioqKioqKioqCioqKiAyNSwzNiAqKioq Ci0tLSAyNSw0NSAtLS0tCiAgLyoKICAgKiBwb3N0Z3Jlc19leHQuaCBkZWZpbmVzIHRoZSBi YWNrZW5kJ3MgZXh0ZXJuYWxseSB2aXNpYmxlIHR5cGVzLAogICAqIHN1Y2ggYXMgT2lkLgog ICAqLwogICNpbmNsdWRlICJwb3N0Z3Jlc19leHQuaCIKICAKKyAvKiAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorICAqIE9wdGlvbnMgZm9yIFBRY29weVJlc3VsdAorICAqLworIAorICNk ZWZpbmUgUEdfQ09QWVJFU19BVFRSUyAgICAgICAgICAweDAxCisgI2RlZmluZSBQR19DT1BZ UkVTX1RVUExFUyAgICAgICAgIDB4MDIgLyogSW1wbGllcyBQR19DT1BZUkVTX0FUVFJTICov CisgI2RlZmluZSBQR19DT1BZUkVTX0VWRU5UUyAgICAgICAgIDB4MDQKKyAjZGVmaW5lIFBH X0NPUFlSRVNfTk9USUNFSE9PS1MgICAgMHgwOAorIAogIC8qIEFwcGxpY2F0aW9uLXZpc2li bGUgZW51bSB0eXBlcyAqLwogIAogIHR5cGVkZWYgZW51bQogIHsKICAJLyoKICAJICogQWx0 aG91Z2ggaXQgaXMgb2theSB0byBhZGQgdG8gdGhpcyBsaXN0LCB2YWx1ZXMgd2hpY2ggYmVj b21lIHVudXNlZAoqKioqKioqKioqKioqKioKKioqIDE5MCwyMDEgKioqKgotLS0gMTk5LDIy NSAtLS0tCiAgCQlpbnQJCSAgICpwdHI7CQkvKiBjYW4ndCB1c2Ugdm9pZCAoZGVjIGNvbXBp bGVyIGJhcmZzKQkgKi8KICAJCWludAkJCWludGVnZXI7CiAgCX0JCQl1OwogIH0gUFFBcmdC bG9jazsKICAKICAvKiAtLS0tLS0tLS0tLS0tLS0tCisgICogUEdyZXNBdHREZXNjIC0tIERh dGEgYWJvdXQgYSBzaW5nbGUgYXR0cmlidXRlIChjb2x1bW4pIG9mIGEgcXVlcnkgcmVzdWx0 CisgICogLS0tLS0tLS0tLS0tLS0tLQorICAqLworIHR5cGVkZWYgc3RydWN0IHBncmVzQXR0 RGVzYworIHsKKyAJY2hhcgkgICAqbmFtZTsJCQkvKiBjb2x1bW4gbmFtZSAqLworIAlPaWQJ CQl0YWJsZWlkOwkJLyogc291cmNlIHRhYmxlLCBpZiBrbm93biAqLworIAlpbnQJCQljb2x1 bW5pZDsJCS8qIHNvdXJjZSBjb2x1bW4sIGlmIGtub3duICovCisgCWludAkJCWZvcm1hdDsJ CQkvKiBmb3JtYXQgY29kZSBmb3IgdmFsdWUgKHRleHQvYmluYXJ5KSAqLworIAlPaWQJCQl0 eXBpZDsJCQkvKiB0eXBlIGlkICovCisgCWludAkJCXR5cGxlbjsJCQkvKiB0eXBlIHNpemUg Ki8KKyAJaW50CQkJYXR0dHlwbW9kOyAgLyogdHlwZS1zcGVjaWZpYyBtb2RpZmllciBpbmZv ICovCisgfSBQR3Jlc0F0dERlc2M7CisgCisgLyogLS0tLS0tLS0tLS0tLS0tLQogICAqIEV4 cG9ydGVkIGZ1bmN0aW9ucyBvZiBsaWJwcQogICAqIC0tLS0tLS0tLS0tLS0tLS0KICAgKi8K ICAKICAvKiA9PT0JaW4gZmUtY29ubmVjdC5jID09PSAqLwogIAoqKioqKioqKioqKioqKioK KioqIDQzNCw0NDUgKioqKgotLS0gNDU4LDQ4NyAtLS0tCiAgICogTWFrZSBhbiBlbXB0eSBQ R3Jlc3VsdCB3aXRoIGdpdmVuIHN0YXR1cyAoc29tZSBhcHBzIGZpbmQgdGhpcwogICAqIHVz ZWZ1bCkuIElmIGNvbm4gaXMgbm90IE5VTEwgYW5kIHN0YXR1cyBpbmRpY2F0ZXMgYW4gZXJy b3IsIHRoZQogICAqIGNvbm4ncyBlcnJvck1lc3NhZ2UgaXMgY29waWVkLgogICAqLwogIGV4 dGVybiBQR3Jlc3VsdCAqUFFtYWtlRW1wdHlQR3Jlc3VsdChQR2Nvbm4gKmNvbm4sIEV4ZWNT dGF0dXNUeXBlIHN0YXR1cyk7CiAgCisgLyogbWFrZXMgYSBjb3B5IG9mIGEgcmVzdWx0ICov CisgZXh0ZXJuIFBHcmVzdWx0ICpQUWNvcHlSZXN1bHQoY29uc3QgUEdyZXN1bHQgKnNyYywg aW50IGZsYWdzKTsKKyAKKyAvKiBTZXRzIHRoZSBhdHRyaWJ1dGVzIG9mIGEgcmVzdWx0LCBu byBhdHRyaWJ1dGVzIGNhbiBhbHJlYWR5IGV4aXN0LiAqLworIGV4dGVybiBpbnQgUFFzZXRS ZXN1bHRBdHRycyhQR3Jlc3VsdCAqcmVzLCBpbnQgbnVtQXR0cmlidXRlcywgUEdyZXNBdHRE ZXNjICphdHREZXNjcyk7CisgCisgLyogQWxsb2NhdGUgc3Vic2lkaWFyeSBzdG9yYWdlIGZv ciBhIFBHcmVzdWx0LiAqLworIGV4dGVybiB2b2lkICpQUXJlc3VsdEFsbG9jKFBHcmVzdWx0 ICpyZXMsIHNpemVfdCBuQnl0ZXMpOworIAorIC8qCisgICogU2V0cyB0aGUgdmFsdWUgZm9y IGEgdHVwbGUgZmllbGQuICBUaGUgdHVwX251bSBtdXN0IGJlIGxlc3MgdGhhbiBvcgorICAq IGVxdWFsIHRvIFBRbnR1cGxlcyhyZXMpLiAgVGhpcyBmdW5jdGlvbiB3aWxsIGdlbmVyYXRl IHR1cGxlcyBhcyBuZWVkZWQuCisgICogQSBuZXcgdHVwbGUgaXMgZ2VuZXJhdGVkIHdoZW4g dHVwX251bSBlcXVhbHMgUFFudHVwbGVzKHJlcykgYW5kIHRoZXJlCisgICogYXJlIG5vIGZp ZWxkcyBkZWZpbmVkIGZvciB0aGF0IHR1cGxlLgorICAqCisgICogUmV0dXJucyBhIG5vbi16 ZXJvIHZhbHVlIGZvciBzdWNjZXNzIGFuZCB6ZXJvIGZvciBmYWlsdXJlLgorICAqLworIGV4 dGVybiBpbnQgUFFzZXR2YWx1ZShQR3Jlc3VsdCAqcmVzLCBpbnQgdHVwX251bSwgaW50IGZp ZWxkX251bSwgY2hhciAqdmFsdWUsIGludCBsZW4pOwogIAogIC8qIFF1b3Rpbmcgc3RyaW5n cyBiZWZvcmUgaW5jbHVzaW9uIGluIHF1ZXJpZXMuICovCiAgZXh0ZXJuIHNpemVfdCBQUWVz Y2FwZVN0cmluZ0Nvbm4oUEdjb25uICpjb25uLAogIAkJCQkgICBjaGFyICp0bywgY29uc3Qg Y2hhciAqZnJvbSwgc2l6ZV90IGxlbmd0aCwKICAJCQkJICAgaW50ICplcnJvcik7CiAgZXh0 ZXJuIHVuc2lnbmVkIGNoYXIgKlBRZXNjYXBlQnl0ZWFDb25uKFBHY29ubiAqY29ubiwKSW5k ZXg6IHNyYy9pbnRlcmZhY2VzL2xpYnBxL2xpYnBxLWludC5oCj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT IGZpbGU6IC9wcm9qZWN0cy9jdnNyb290L3Bnc3FsL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2xp YnBxLWludC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEzMQpkaWZmIC1DNiAtcjEuMTMx IGxpYnBxLWludC5oCioqKiBzcmMvaW50ZXJmYWNlcy9saWJwcS9saWJwcS1pbnQuaAkyOSBN YXkgMjAwOCAyMjowMjo0NCAtMDAwMAkxLjEzMQotLS0gc3JjL2ludGVyZmFjZXMvbGlicHEv bGlicHEtaW50LmgJNSBTZXAgMjAwOCAyMDowMzowNCAtMDAwMAoqKioqKioqKioqKioqKioK KioqIDE5LDMwICoqKioKLS0tIDE5LDMxIC0tLS0KICAKICAjaWZuZGVmIExJQlBRX0lOVF9I CiAgI2RlZmluZSBMSUJQUV9JTlRfSAogIAogIC8qIFdlIGFzc3VtZSBsaWJwcS1mZS5oIGhh cyBhbHJlYWR5IGJlZW4gaW5jbHVkZWQuICovCiAgI2luY2x1ZGUgInBvc3RncmVzX2ZlLmgi CisgI2luY2x1ZGUgImxpYnBxLWV2ZW50cy5oIgogIAogICNpbmNsdWRlIDx0aW1lLmg+CiAg I2luY2x1ZGUgPHN5cy90eXBlcy5oPgogICNpZm5kZWYgV0lOMzIKICAjaW5jbHVkZSA8c3lz L3RpbWUuaD4KICAjZW5kaWYKKioqKioqKioqKioqKioqCioqKiA5NywxMjEgKioqKgogIHVu aW9uIHBncmVzdWx0X2RhdGEKICB7CiAgCVBHcmVzdWx0X2RhdGEgKm5leHQ7CQkvKiBsaW5r IHRvIG5leHQgYmxvY2ssIG9yIE5VTEwgKi8KICAJY2hhcgkJc3BhY2VbMV07CQkvKiBkdW1t eSBmb3IgYWNjZXNzaW5nIGJsb2NrIGFzIGJ5dGVzICovCiAgfTsKICAKLSAvKiBEYXRhIGFi b3V0IGEgc2luZ2xlIGF0dHJpYnV0ZSAoY29sdW1uKSBvZiBhIHF1ZXJ5IHJlc3VsdCAqLwot IAotIHR5cGVkZWYgc3RydWN0IHBncmVzQXR0RGVzYwotIHsKLSAJY2hhcgkgICAqbmFtZTsJ CQkvKiBjb2x1bW4gbmFtZSAqLwotIAlPaWQJCQl0YWJsZWlkOwkJLyogc291cmNlIHRhYmxl LCBpZiBrbm93biAqLwotIAlpbnQJCQljb2x1bW5pZDsJCS8qIHNvdXJjZSBjb2x1bW4sIGlm IGtub3duICovCi0gCWludAkJCWZvcm1hdDsJCQkvKiBmb3JtYXQgY29kZSBmb3IgdmFsdWUg KHRleHQvYmluYXJ5KSAqLwotIAlPaWQJCQl0eXBpZDsJCQkvKiB0eXBlIGlkICovCi0gCWlu dAkJCXR5cGxlbjsJCQkvKiB0eXBlIHNpemUgKi8KLSAJaW50CQkJYXR0dHlwbW9kOwkJLyog dHlwZS1zcGVjaWZpYyBtb2RpZmllciBpbmZvICovCi0gfSBQR3Jlc0F0dERlc2M7Ci0gCiAg LyogRGF0YSBhYm91dCBhIHNpbmdsZSBwYXJhbWV0ZXIgb2YgYSBwcmVwYXJlZCBzdGF0ZW1l bnQgKi8KICB0eXBlZGVmIHN0cnVjdCBwZ3Jlc1BhcmFtRGVzYwogIHsKICAJT2lkCQkJdHlw aWQ7CQkJLyogdHlwZSBpZCAqLwogIH0gUEdyZXNQYXJhbURlc2M7CiAgCi0tLSA5OCwxMDkg LS0tLQoqKioqKioqKioqKioqKioKKioqIDE1OSwxNzAgKioqKgotLS0gMTQ3LDE2NiAtLS0t CiAgCVBRbm90aWNlUmVjZWl2ZXIgbm90aWNlUmVjOyAvKiBub3RpY2UgbWVzc2FnZSByZWNl aXZlciAqLwogIAl2b2lkCSAgICpub3RpY2VSZWNBcmc7CiAgCVBRbm90aWNlUHJvY2Vzc29y IG5vdGljZVByb2M7CQkvKiBub3RpY2UgbWVzc2FnZSBwcm9jZXNzb3IgKi8KICAJdm9pZAkg ICAqbm90aWNlUHJvY0FyZzsKICB9IFBHTm90aWNlSG9va3M7CiAgCisgdHlwZWRlZiBzdHJ1 Y3QKKyB7CisgCWNoYXIJICAgKm5hbWU7CS8qIGZvciBlcnJvciBtZXNzYWdlcyAqLworIAl2 b2lkCSAgICpwYXNzVGhyb3VnaDsgLyogcG9pbnRlciBzdXBwbGllZCBieSB1c2VyICovCisg CXZvaWQJICAgKmRhdGE7IC8qIHN0YXRlIChpbnN0YW5jZSkgZGF0YSwgb3B0aW9uYWxseSBn ZW5lcmF0ZWQgYnkgZXZlbnQgcHJvYyAqLworIAlQR0V2ZW50UHJvYyBwcm9jOyAvKiB0aGUg ZnVuY3Rpb24gdG8gY2FsbCBvbiBldmVudHMgKi8KKyB9IFBHRXZlbnQ7CisgCiAgc3RydWN0 IHBnX3Jlc3VsdAogIHsKICAJaW50CQkJbnR1cHM7CiAgCWludAkJCW51bUF0dHJpYnV0ZXM7 CiAgCVBHcmVzQXR0RGVzYyAqYXR0RGVzY3M7CiAgCVBHcmVzQXR0VmFsdWUgKip0dXBsZXM7 CQkvKiBlYWNoIFBHcmVzVHVwbGUgaXMgYW4gYXJyYXkgb2YKKioqKioqKioqKioqKioqCioq KiAxODEsMTkyICoqKioKLS0tIDE3NywxOTIgLS0tLQogIAkgKiBUaGVzZSBmaWVsZHMgYXJl IGNvcGllZCBmcm9tIHRoZSBvcmlnaW5hdGluZyBQR2Nvbm4sIHNvIHRoYXQgb3BlcmF0aW9u cwogIAkgKiBvbiB0aGUgUEdyZXN1bHQgZG9uJ3QgaGF2ZSB0byByZWZlcmVuY2UgdGhlIFBH Y29ubi4KICAJICovCiAgCVBHTm90aWNlSG9va3Mgbm90aWNlSG9va3M7CiAgCWludAkJCWNs aWVudF9lbmNvZGluZzsJLyogZW5jb2RpbmcgaWQgKi8KICAKKyAJLyogcmVnaXN0ZXJlZCBl dmVudHMsIGNvcGllZCBmcm9tIGNvbm4gKi8KKyAJaW50IG5FdmVudHM7CisgCVBHRXZlbnQg KmV2ZW50czsKKyAKICAJLyoKICAJICogRXJyb3IgaW5mb3JtYXRpb24gKGFsbCBOVUxMIGlm IG5vdCBhbiBlcnJvciByZXN1bHQpLiAgZXJyTXNnIGlzIHRoZQogIAkgKiAib3ZlcmFsbCIg ZXJyb3IgbWVzc2FnZSByZXR1cm5lZCBieSBQUXJlc3VsdEVycm9yTWVzc2FnZS4gIElmIHdl IGhhdmUKICAJICogcGVyLWZpZWxkIGluZm8gdGhlbiBpdCBpcyBzdG9yZWQgaW4gYSBsaW5r ZWQgbGlzdC4KICAJICovCiAgCWNoYXIJICAgKmVyck1zZzsJCQkvKiBlcnJvciBtZXNzYWdl LCBvciBOVUxMIGlmIG5vIGVycm9yICovCioqKioqKioqKioqKioqKgoqKiogMzAwLDMxMSAq KioqCi0tLSAzMDAsMzE2IC0tLS0KICAJLyogT3B0aW9uYWwgZmlsZSB0byB3cml0ZSB0cmFj ZSBpbmZvIHRvICovCiAgCUZJTEUJICAgKlBmZGVidWc7CiAgCiAgCS8qIENhbGxiYWNrIHBy b2NlZHVyZXMgZm9yIG5vdGljZSBtZXNzYWdlIHByb2Nlc3NpbmcgKi8KICAJUEdOb3RpY2VI b29rcyBub3RpY2VIb29rczsKICAKKyAJLyogcmVnaXN0ZXJlZCBldmVudHMgdmlhIFBRcmVn aXN0ZXJFdmVudFByb2MgKi8KKyAJaW50IG5FdmVudHM7CisgCWludCBldmVudEFyclNpemU7 CisgCVBHRXZlbnQgKmV2ZW50czsKKyAKICAJLyogU3RhdHVzIGluZGljYXRvcnMgKi8KICAJ Q29ublN0YXR1c1R5cGUgc3RhdHVzOwogIAlQR0FzeW5jU3RhdHVzVHlwZSBhc3luY1N0YXR1 czsKICAJUEdUcmFuc2FjdGlvblN0YXR1c1R5cGUgeGFjdFN0YXR1czsgLyogbmV2ZXIgY2hh bmdlcyB0byBBQ1RJVkUgKi8KICAJUEdRdWVyeUNsYXNzIHF1ZXJ5Y2xhc3M7CiAgCWNoYXIJ ICAgKmxhc3RfcXVlcnk7CQkvKiBsYXN0IFNRTCBjb21tYW5kLCBvciBOVUxMIGlmIHVua25v d24gKi8K --------------040306020308000503090001 Content-Type: application/x-compressed; name="libpq-events.tgz" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="libpq-events.tgz" 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 wfujJADwAAA= --------------040306020308000503090001--