Received: from localhost (unknown [200.46.204.183]) by postgresql.org (Postfix) with ESMTP id 857C564FCEB for ; Fri, 5 Sep 2008 17:30:42 -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 44839-09 for ; Fri, 5 Sep 2008 17:30:36 -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 2E85B64FCBA for ; Fri, 5 Sep 2008 17:30:34 -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 m85KUSr0000621; Fri, 5 Sep 2008 16:30:28 -0400 Message-ID: <48C19759.90402@esilo.com> Date: Fri, 05 Sep 2008 16:32:25 -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> <48C191A7.3000205@esilo.com> <20080905201504.GM4353@alvh.no-ip.org> In-Reply-To: <20080905201504.GM4353@alvh.no-ip.org> Content-Type: multipart/mixed; boundary="------------000000020601030206000600" 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/376 X-Sequence-Number: 123505 This is a multi-part message in MIME format. --------------000000020601030206000600 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Alvaro Herrera wrote: > > Doh! Sorry, you're right. In that case, you're missing a NULL result > check from strdup() in dupEvents() ;-) > Missed that one. Good catch :) Update attached. -- Andrew Chernow eSilo, LLC every bit counts http://www.esilo.com/ --------------000000020601030206000600 Content-Type: application/x-compressed; name="libpq-events.tgz" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="libpq-events.tgz" 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 f/t8+3z7fPt8+3z7fPt8+/xHff4/NXHhVgDwAAA= --------------000000020601030206000600 Content-Type: text/plain; name="libpq-events.patch" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="libpq-events.patch" SW5kZXg6IGRvYy9zcmMvc2dtbC9saWJwcS5zZ21sCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6 IC9wcm9qZWN0cy9jdnNyb290L3Bnc3FsL2RvYy9zcmMvc2dtbC9saWJwcS5zZ21sLHYKcmV0 cmlldmluZyByZXZpc2lvbiAxLjI2MApkaWZmIC1DNiAtcjEuMjYwIGxpYnBxLnNnbWwKKioq IGRvYy9zcmMvc2dtbC9saWJwcS5zZ21sCTI3IEp1biAyMDA4IDAyOjQ0OjMxIC0wMDAwCTEu MjYwCi0tLSBkb2Mvc3JjL3NnbWwvbGlicHEuc2dtbAk1IFNlcCAyMDA4IDIwOjI1OjI5IC0w 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 YWtlZmlsZQk1IFNlcCAyMDA4IDIwOjI1OjMwIC0wMDAwCioqKioqKioqKioqKioqKgoqKiog 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 cnRzLnR4dAk1IFNlcCAyMDA4IDIwOjI1OjMwIC0wMDAwCioqKioqKioqKioqKioqKgoqKiog MTM4LDE0MyAqKioqCi0tLSAxMzgsMTUyIC0tLS0KICBQUXNlbmREZXNjcmliZVBvcnRhbCAg ICAgIDEzNgogIGxvX3RydW5jYXRlICAgICAgICAgICAgICAgMTM3CiAgUFFjb25uZWN0aW9u VXNlZFBhc3N3b3JkICAxMzgKICBwZ192YWxpZF9zZXJ2ZXJfZW5jb2RpbmdfaWQgMTM5CiAg UFFjb25uZWN0aW9uTmVlZHNQYXNzd29yZCAxNDAKICBsb19pbXBvcnRfd2l0aF9vaWQJCSAg MTQxCisgUFFjb3B5UmVzdWx0ICAgICAgICAgICAgICAxNDIKKyBQUXNldFJlc3VsdEF0dHJz ICAgICAgICAgIDE0MworIFBRc2V0dmFsdWUgICAgICAgICAgICAgICAgMTQ0CisgUFFyZXN1 bHRBbGxvYyAgICAgICAgICAgICAxNDUKKyBQUXJlZ2lzdGVyRXZlbnRQcm9jICAgICAgIDE0 NgorIFBRaW5zdGFuY2VEYXRhICAgICAgICAgICAgMTQ3CisgUFFzZXRJbnN0YW5jZURhdGEg ICAgICAgICAxNDgKKyBQUXJlc3VsdEluc3RhbmNlRGF0YSAgICAgIDE0OQorIFBRcmVzdWx0 U2V0SW5zdGFuY2VEYXRhICAgMTUwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRl eDogc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtY29ubmVjdC5jCj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT IGZpbGU6IC9wcm9qZWN0cy9jdnNyb290L3Bnc3FsL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2Zl LWNvbm5lY3QuYyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zNTkKZGlmZiAtQzYgLXIxLjM1 OSBmZS1jb25uZWN0LmMKKioqIHNyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWNvbm5lY3QuYwky OSBNYXkgMjAwOCAyMjowMjo0NCAtMDAwMAkxLjM1OQotLS0gc3JjL2ludGVyZmFjZXMvbGli cHEvZmUtY29ubmVjdC5jCTUgU2VwIDIwMDggMjA6MjU6MzAgLTAwMDAKKioqKioqKioqKioq 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 aW50ZXJmYWNlcy9saWJwcS9mZS1leGVjLmMJNSBTZXAgMjAwOCAyMDoyNTozMCAtMDAwMAoq 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 ZSBzdGF0dXMpCiAgewogIAlQR3Jlc3VsdCAgICpyZXN1bHQ7Ci0tLSAxMjEsMTc3IC0tLS0K ICAjZGVmaW5lIFBHUkVTVUxUX0RBVEFfQkxPQ0tTSVpFCQkyMDQ4CiAgI2RlZmluZSBQR1JF U1VMVF9BTElHTl9CT1VOREFSWQkJTUFYSU1VTV9BTElHTk9GCQkvKiBmcm9tIGNvbmZpZ3Vy ZSAqLwogICNkZWZpbmUgUEdSRVNVTFRfQkxPQ0tfT1ZFUkhFQUQJCU1heChzaXplb2YoUEdy ZXN1bHRfZGF0YSksIFBHUkVTVUxUX0FMSUdOX0JPVU5EQVJZKQogICNkZWZpbmUgUEdSRVNV TFRfU0VQX0FMTE9DX1RIUkVTSE9MRAkoUEdSRVNVTFRfREFUQV9CTE9DS1NJWkUgLyAyKQog IAogIAorIC8qIERvZXMgbm90IGR1cGxpY2F0ZSB0aGUgZXZlbnQgaW5zdGFuY2UgZGF0YSwg c2V0cyB0aGlzIHRvIE5VTEwgKi8KKyBzdGF0aWMgUEdFdmVudCAqCisgZHVwRXZlbnRzKFBH RXZlbnQgKmV2ZW50cywgaW50IGNvdW50KQorIHsKKyAJaW50IGk7CisgCVBHRXZlbnQgKm5l d0V2ZW50czsKKyAKKyAJaWYgKCFldmVudHMgfHwgY291bnQgPD0gMCkKKyAJCXJldHVybiBO VUxMOworIAorIAluZXdFdmVudHMgPSAoUEdFdmVudCAqKSBtYWxsb2MoY291bnQgKiBzaXpl b2YoUEdFdmVudCkpOworIAlpZiAoIW5ld0V2ZW50cykKKyAJCXJldHVybiBOVUxMOworIAor IAltZW1jcHkobmV3RXZlbnRzLCBldmVudHMsIGNvdW50ICogc2l6ZW9mKFBHRXZlbnQpKTsK KyAKKyAJLyogTlVMTCBvdXQgdGhlIGRhdGEgcG9pbnRlciBhbmQgZGVlcCBjb3B5IG5hbWUg Ki8KKyAJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCisgCXsKKyAJCW5ld0V2ZW50c1tp XS5uYW1lID0gc3RyZHVwKG5ld0V2ZW50c1tpXS5uYW1lKTsKKyAJCWlmICghbmV3RXZlbnRz W2ldLm5hbWUpCisgCQl7CisgCQkJd2hpbGUgKC0taSA+PSAwKQorIAkJCQlmcmVlKG5ld0V2 ZW50c1tpXS5uYW1lKTsKKyAJCQlmcmVlKG5ld0V2ZW50cyk7CisgCQkJcmV0dXJuIE5VTEw7 CisgCQl9CisgCisgCQluZXdFdmVudHNbaV0uZGF0YSA9IE5VTEw7CisgCX0KKyAKKyAJcmV0 dXJuIG5ld0V2ZW50czsKKyB9CisgCiAgLyoKICAgKiBQUW1ha2VFbXB0eVBHcmVzdWx0CiAg ICoJIHJldHVybnMgYSBuZXdseSBhbGxvY2F0ZWQsIGluaXRpYWxpemVkIFBHcmVzdWx0IHdp dGggZ2l2ZW4gc3RhdHVzLgogICAqCSBJZiBjb25uIGlzIG5vdCBOVUxMIGFuZCBzdGF0dXMg aW5kaWNhdGVzIGFuIGVycm9yLCB0aGUgY29ubidzCiAgICoJIGVycm9yTWVzc2FnZSBpcyBj b3BpZWQuCiAgICoKICAgKiBOb3RlIHRoaXMgaXMgZXhwb3J0ZWQgLS0tIHlvdSB3b3VsZG4n dCB0aGluayBhbiBhcHBsaWNhdGlvbiB3b3VsZCBuZWVkCiAgICogdG8gYnVpbGQgaXRzIG93 biBQR3Jlc3VsdHMsIGJ1dCB0aGlzIGhhcyBwcm92ZW4gdXNlZnVsIGluIGJvdGggbGlicGd0 Y2wKISAgKiBhbmQgdGhlIFBlcmw1IGludGVyZmFjZSwgc28gbWF5YmUgaXQncyBub3Qgc28g dW5yZWFzb25hYmxlLiAgSWYgY29ubiBpcwohICAqIG5vdCBOVUxMLCB0aGUgUEdldmVudHMg YXJyYXkgd2lsbCBiZSBjb3BpZWQgZnJvbSB0aGUgUEdjb25uIHRvIHRoZQohICAqIGNyZWF0 ZWQgUEdyZXN1bHQuCiAgICovCiAgCiAgUEdyZXN1bHQgKgogIFBRbWFrZUVtcHR5UEdyZXN1 bHQoUEdjb25uICpjb25uLCBFeGVjU3RhdHVzVHlwZSBzdGF0dXMpCiAgewogIAlQR3Jlc3Vs dCAgICpyZXN1bHQ7CioqKioqKioqKioqKioqKgoqKiogMTU3LDE3NSAqKioqCi0tLSAxOTMs MjI2IC0tLS0KICAJcmVzdWx0LT5lcnJNc2cgPSBOVUxMOwogIAlyZXN1bHQtPmVyckZpZWxk cyA9IE5VTEw7CiAgCXJlc3VsdC0+bnVsbF9maWVsZFswXSA9ICdcMCc7CiAgCXJlc3VsdC0+ Y3VyQmxvY2sgPSBOVUxMOwogIAlyZXN1bHQtPmN1ck9mZnNldCA9IDA7CiAgCXJlc3VsdC0+ c3BhY2VMZWZ0ID0gMDsKKyAJcmVzdWx0LT5uRXZlbnRzID0gMDsKKyAJcmVzdWx0LT5ldmVu dHMgPSBOVUxMOwogIAogIAlpZiAoY29ubikKICAJewogIAkJLyogY29weSBjb25uZWN0aW9u IGRhdGEgd2UgbWlnaHQgbmVlZCBmb3Igb3BlcmF0aW9ucyBvbiBQR3Jlc3VsdCAqLwogIAkJ cmVzdWx0LT5ub3RpY2VIb29rcyA9IGNvbm4tPm5vdGljZUhvb2tzOwogIAkJcmVzdWx0LT5j bGllbnRfZW5jb2RpbmcgPSBjb25uLT5jbGllbnRfZW5jb2Rpbmc7CiAgCisgCQkvKiBjb3B5 IGV2ZW50cyBmcm9tIGNvbm5lY3Rpb24gKi8KKyAJCWlmIChjb25uLT5uRXZlbnRzID4gMCkK KyAJCXsKKyAJCQlyZXN1bHQtPmV2ZW50cyA9IGR1cEV2ZW50cyhjb25uLT5ldmVudHMsIGNv bm4tPm5FdmVudHMpOworIAkJCWlmICghcmVzdWx0LT5ldmVudHMpCisgCQkJeworIAkJCQlQ UWNsZWFyKHJlc3VsdCk7CisgCQkJCXJldHVybiBOVUxMOworIAkJCX0KKyAKKyAJCQlyZXN1 bHQtPm5FdmVudHMgPSBjb25uLT5uRXZlbnRzOworIAkJfQorIAogIAkJLyogY29uc2lkZXIg Y29weWluZyBjb25uJ3MgZXJyb3JNZXNzYWdlICovCiAgCQlzd2l0Y2ggKHN0YXR1cykKICAJ CXsKICAJCQljYXNlIFBHUkVTX0VNUFRZX1FVRVJZOgogIAkJCWNhc2UgUEdSRVNfQ09NTUFO RF9PSzoKICAJCQljYXNlIFBHUkVTX1RVUExFU19PSzoKKioqKioqKioqKioqKioqCioqKiAx OTIsMjAzICoqKioKLS0tIDI0Myw1MDEgLS0tLQogIAkJcmVzdWx0LT5jbGllbnRfZW5jb2Rp bmcgPSBQR19TUUxfQVNDSUk7CiAgCX0KICAKICAJcmV0dXJuIHJlc3VsdDsKICB9CiAgCisg LyogUFFzZXRSZXN1bHRBdHRycworICAqIFNldCB0aGUgYXR0cmlidXRlcyBmb3IgYSBnaXZl biByZXN1bHQuICBUaGlzIGZ1bmN0aW9uIGZhaWxzIGlmIHRoZXJlIGFyZQorICAqIGFscmVh ZHkgYXR0cmlidXRlcyBjb250YWluZWQgaW4gdGhlIHByb3ZpZGVkIHJlc3VsdC4gIFRoZSBj YWxsIGlzCisgICogaWdub3JlZCBpZiBudW1BdHRyaWJ1dGVzIGlzIGlzIHplcm8gb3IgYXR0 RGVzY3MgaXMgTlVMTC4gIElmIHRoZQorICAqIGZ1bmN0aW9uIGZhaWxzLCBpdCByZXR1cm5z IHplcm8uICBJZiB0aGUgZnVuY3Rpb24gc3VjY2VlZHMsIGl0CisgICogcmV0dXJucyBhIG5v bi16ZXJvIHZhbHVlLgorICAqLworIGludAorIFBRc2V0UmVzdWx0QXR0cnMoUEdyZXN1bHQg KnJlcywgaW50IG51bUF0dHJpYnV0ZXMsIFBHcmVzQXR0RGVzYyAqYXR0RGVzY3MpCisgewor IAlpbnQgaTsKKyAKKyAJLyogSWYgYXR0cnMgYWxyZWFkeSBleGlzdCwgdGhleSBjYW5ub3Qg YmUgb3ZlcndyaXR0ZW4uICovCisgCWlmICghcmVzIHx8IHJlcy0+bnVtQXR0cmlidXRlcyA+ IDApCisgCQlyZXR1cm4gRkFMU0U7CisgCisgCS8qIGlnbm9yZSByZXF1ZXN0ICovCisgCWlm IChudW1BdHRyaWJ1dGVzIDw9IDAgfHwgIWF0dERlc2NzKQorIAkJcmV0dXJuIFRSVUU7Cisg CisgCXJlcy0+YXR0RGVzY3MgPSAoUEdyZXNBdHREZXNjICopIFBRcmVzdWx0QWxsb2MocmVz LAorIAkJbnVtQXR0cmlidXRlcyAqIHNpemVvZihQR3Jlc0F0dERlc2MpKTsKKyAKKyAJaWYg KCFyZXMtPmF0dERlc2NzKQorIAkJcmV0dXJuIEZBTFNFOworIAorIAlyZXMtPm51bUF0dHJp YnV0ZXMgPSBudW1BdHRyaWJ1dGVzOworIAltZW1jcHkocmVzLT5hdHREZXNjcywgYXR0RGVz Y3MsCisgCQludW1BdHRyaWJ1dGVzICogc2l6ZW9mKFBHcmVzQXR0RGVzYykpOworIAorIAkv KiByZXN1bHRhbGxvYyB0aGUgYXR0cmlidXRlIG5hbWVzLiAgVGhlIGFib3ZlIG1lbWNweSBo YXMgdGhlIGF0dHIKKyAJICogbmFtZXMgcG9pbnRpbmcgYXQgdGhlIGNhbGxlcnMgcHJvdmlk ZWQgYXR0RGVzY3MgbWVtb3J5LgorIAkgKi8KKyAJcmVzLT5iaW5hcnkgPSAxOworIAlmb3Ig KGkgPSAwOyBpIDwgcmVzLT5udW1BdHRyaWJ1dGVzOyBpKyspCisgCXsKKyAJCWlmIChyZXMt PmF0dERlc2NzW2ldLm5hbWUpCisgCQkJcmVzLT5hdHREZXNjc1tpXS5uYW1lID0gcHFSZXN1 bHRTdHJkdXAocmVzLCByZXMtPmF0dERlc2NzW2ldLm5hbWUpOworIAkJZWxzZQorIAkJCXJl cy0+YXR0RGVzY3NbaV0ubmFtZSA9IHJlcy0+bnVsbF9maWVsZDsKKyAKKyAJCWlmICghcmVz LT5hdHREZXNjc1tpXS5uYW1lKQorIAkJCXJldHVybiBGQUxTRTsKKyAKKyAJCS8qIEFsdGhv dWdoIGRlcHJlY2F0ZWQsIGJlY2F1c2UgcmVzdWx0cyBjYW4gaGF2ZSB0ZXh0K2JpbmFyeSBj b2x1bW5zLAorIAkJICogaXRzIGVhc3kgZW5vdWdoIHRvIGRlZHVjZSBzbyBzZXQgaXQgZm9y IGNvbXBsZXRlbmVzcy4KKyAJCSAqLworIAkJaWYgKHJlcy0+YXR0RGVzY3NbaV0uZm9ybWF0 ID09IDApCisgCQkJcmVzLT5iaW5hcnkgPSAwOworIAl9CisgCisgCXJldHVybiBUUlVFOwor IH0KKyAKKyAvKgorICAqIFBRY29weVJlc3VsdAorICAqIFJldHVybnMgYSBkZWVwIGNvcHkg b2YgdGhlIHByb3ZpZGVkICdzcmMnIFBHcmVzdWx0LCB3aGljaCBjYW5ub3QgYmUgTlVMTC4K KyAgKiBUaGUgJ2ZsYWdzJyBhcmd1bWVudCBjb250cm9scyB3aGljaCBwb3J0aW9ucyBvZiB0 aGUgcmVzdWx0IHdpbGwgb3Igd2lsbAorICAqIE5PVCBiZSBjb3BpZWQuICBUaGUgY3JlYXRl ZCByZXN1bHQgaXMgYWx3YXlzIHB1dCBpbnRvIHRoZQorICAqIFBHUkVTX1RVUExFU19PSyBz dGF0dXMuICBUaGUgc291cmNlIHJlc3VsdCBlcnJvciBtZXNzYWdlIGlzIG5vdCBjb3BpZWQs CisgICogYWx0aG91Z2ggY21kU3RhdHVzIGlzLgorICAqCisgICogVG8gc2V0IGN1c3RvbSBh dHRyaWJ1dGVzLCBzZWUgUFFzZXRSZXN1bHRBdHRycy4gIFRoYXQgZnVuY3Rpb24gcmVxdWly ZXMKKyAgKiB0aGF0IHRoZXJlIGFyZSBubyBhdHRycyBjb250YWluZWQgaW4gdGhlIHJlc3Vs dCwgc28gdG8gdXNlIHRoYXQKKyAgKiBmdW5jdGlvbiB5b3UgY2Fubm90IHVzZSB0aGUgUEdf Q09QWVJFU19BVFRSUyBvciBQR19DT1BZUkVTX1RVUExFUworICAqIG9wdGlvbnMgd2l0aCB0 aGlzIGZ1bmN0aW9uLgorICAqCisgICogT3B0aW9uczoKKyAgKiAgIFBHX0NPUFlSRVNfQVRU UlMgLSBDb3B5IHRoZSBzb3VyY2UgcmVzdWx0J3MgYXR0cmlidXRlcworICAqCisgICogICBQ R19DT1BZUkVTX1RVUExFUyAtIENvcHkgdGhlIHNvdXJjZSByZXN1bHQncyB0dXBsZXMuICBU aGlzIGltcGxpZXMKKyAgKiAgIGNvcHlpbmcgdGhlIGF0dHJzLCBiZWluZyBob3cgdGhlIGF0 dHJzIGFyZSBuZWVkZWQgYnkgdGhlIHR1cGxlcy4KKyAgKgorICAqICAgUEdfQ09QWVJFU19F VkVOVFMgLSBDb3B5IHRoZSBzb3VyY2UgcmVzdWx0J3MgZXZlbnRzLgorICAqCisgICogICBQ R19DT1BZUkVTX05PVElDRUhPT0tTIC0gQ29weSB0aGUgc291cmNlIHJlc3VsdCdzIG5vdGlj ZSBob29rcy4KKyAgKi8KKyAKKyBQR3Jlc3VsdCAqCisgUFFjb3B5UmVzdWx0KGNvbnN0IFBH cmVzdWx0ICpzcmMsIGludCBmbGFncykKKyB7CisgCWludCBpOworIAlQR3Jlc3VsdCAqZGVz dDsKKyAJUEdFdmVudFJlc3VsdENvcHkgZXZ0OworIAorIAlpZiAoIXNyYykKKyAJCXJldHVy biBOVUxMOworIAorIAkvKiBBdXRvbWF0aWNhbGx5IHR1cm4gb24gYXR0cnMgZmxhZ3MgYmVj YXVzZSB5b3UgY2FuJ3QgY29weSB0dXBsZXMKKyAJICogd2l0aG91dCBjb3B5aW5nIHRoZSBh dHRycy4gIF9UVVBMRVMgaW1wbGllcyBfQVRUUlMuCisgCSAqLworIAlpZiAoZmxhZ3MgJiBQ R19DT1BZUkVTX1RVUExFUykKKyAJCWZsYWdzIHw9IFBHX0NPUFlSRVNfQVRUUlM7CisgCisg CWRlc3QgPSBQUW1ha2VFbXB0eVBHcmVzdWx0KChQR2Nvbm4gKilOVUxMLCBQR1JFU19UVVBM RVNfT0spOworIAlpZiAoIWRlc3QpCisgCQlyZXR1cm4gTlVMTDsKKyAKKyAJLyogYWx3YXlz IGNvcHkgdGhlc2Ugb3Zlci4gIElzIGNtZFN0YXR1cyB1c2VmdWwgaGVyZT8gKi8KKyAJZGVz dC0+Y2xpZW50X2VuY29kaW5nID0gc3JjLT5jbGllbnRfZW5jb2Rpbmc7CisgCXN0cmNweShk ZXN0LT5jbWRTdGF0dXMsIHNyYy0+Y21kU3RhdHVzKTsKKyAKKyAJLyogV2FudHMgdG8gY29w eSBub3RpY2UgaG9va3MgKi8KKyAJaWYgKGZsYWdzICYgUEdfQ09QWVJFU19OT1RJQ0VIT09L UykKKyAJCWRlc3QtPm5vdGljZUhvb2tzID0gc3JjLT5ub3RpY2VIb29rczsKKyAKKyAJLyog V2FudHMgYXR0cnMgKi8KKyAJaWYgKChmbGFncyAmIFBHX0NPUFlSRVNfQVRUUlMpICYmCisg CQkgIVBRc2V0UmVzdWx0QXR0cnMoZGVzdCwgc3JjLT5udW1BdHRyaWJ1dGVzLCBzcmMtPmF0 dERlc2NzKSkKKyAJeworIAkJUFFjbGVhcihkZXN0KTsKKyAJCXJldHVybiBOVUxMOworIAl9 CisgCisgCS8qIFdhbnRzIHRvIGNvcHkgcmVzdWx0IHR1cGxlczogdXNlIFBRc2V0dmFsdWUo KS4gKi8KKyAJaWYgKChmbGFncyAmIFBHX0NPUFlSRVNfVFVQTEVTKSAmJiBzcmMtPm50dXBz ID4gMCkKKyAJeworIAkJaW50IHR1cCwgZmllbGQ7CisgCQlmb3IgKHR1cCA9IDA7IHR1cCA8 IHNyYy0+bnR1cHM7IHR1cCsrKQorIAkJCWZvciAoZmllbGQgPSAwOyBmaWVsZCA8IHNyYy0+ bnVtQXR0cmlidXRlczsgZmllbGQrKykKKyAJCQkJUFFzZXR2YWx1ZShkZXN0LCB0dXAsIGZp ZWxkLCBzcmMtPnR1cGxlc1t0dXBdW2ZpZWxkXS52YWx1ZSwKKyAJCQkJCXNyYy0+dHVwbGVz W3R1cF1bZmllbGRdLmxlbik7CisgCX0KKyAKKyAJLyogV2FudHMgdG8gY29weSBQR0V2ZW50 cy4gKi8KKyAJaWYgKChmbGFncyAmIFBHX0NPUFlSRVNfRVZFTlRTKSAmJiBzcmMtPm5FdmVu dHMgPiAwKQorIAl7CisgCQlkZXN0LT5ldmVudHMgPSBkdXBFdmVudHMoc3JjLT5ldmVudHMs IHNyYy0+bkV2ZW50cyk7CisgCQlpZiAoIWRlc3QtPmV2ZW50cykKKyAJCXsKKyAJCQlQUWNs ZWFyKGRlc3QpOworIAkJCXJldHVybiBOVUxMOworIAkJfQorIAorIAkJZGVzdC0+bkV2ZW50 cyA9IHNyYy0+bkV2ZW50czsKKyAJfQorIAorIAkvKiBUcmlnZ2VyIFBHRVZUX1JFU1VMVENP UFkgZXZlbnQgKi8KKyAJZm9yIChpID0gMDsgaSA8IGRlc3QtPm5FdmVudHM7IGkrKykKKyAJ eworIAkJZXZ0LnNyYyA9IHNyYzsKKyAJCWV2dC5kZXN0ID0gZGVzdDsKKyAJCWlmICghZGVz dC0+ZXZlbnRzW2ldLnByb2MoUEdFVlRfUkVTVUxUQ09QWSwgJmV2dCwgZGVzdC0+ZXZlbnRz W2ldLnBhc3NUaHJvdWdoKSkKKyAJCXsKKyAJCQlQUWNsZWFyKGRlc3QpOworIAkJCXJldHVy biBOVUxMOworIAkJfQorIAl9CisgCisgCXJldHVybiBkZXN0OworIH0KKyAKKyBpbnQKKyBQ UXNldHZhbHVlKFBHcmVzdWx0ICpyZXMsIGludCB0dXBfbnVtLCBpbnQgZmllbGRfbnVtLAor IAljaGFyICp2YWx1ZSwgaW50IGxlbikKKyB7CisgCVBHcmVzQXR0VmFsdWUgKmF0dHZhbDsK KyAKKyAJaWYgKCFjaGVja19maWVsZF9udW1iZXIocmVzLCBmaWVsZF9udW0pKQorIAkJcmV0 dXJuIEZBTFNFOworIAorIAkvKiBJbnZhbGlkIHR1cF9udW0sIG11c3QgYmUgPD0gbnR1cHMg Ki8KKyAJaWYgKHR1cF9udW0gPiByZXMtPm50dXBzKQorIAkJcmV0dXJuIEZBTFNFOworIAor IAkvKiBuZWVkIHRvIGdyb3cgdGhlIHR1cGxlIHRhYmxlICovCisgCWlmIChyZXMtPm50dXBz ID49IHJlcy0+dHVwQXJyU2l6ZSkKKyAJeworIAkJaW50IG4gPSByZXMtPnR1cEFyclNpemUg PyByZXMtPnR1cEFyclNpemUgKiAyIDogMTI4OworIAkJUEdyZXNBdHRWYWx1ZSAqKnR1cHM7 CisgCisgCQlpZiAocmVzLT50dXBsZXMpCisgCQkJdHVwcyA9IChQR3Jlc0F0dFZhbHVlICoq KSByZWFsbG9jKHJlcy0+dHVwbGVzLCBuICogc2l6ZW9mKFBHcmVzQXR0VmFsdWUgKikpOwor IAkJZWxzZQorIAkJCXR1cHMgPSAoUEdyZXNBdHRWYWx1ZSAqKikgbWFsbG9jKG4gKiBzaXpl b2YoUEdyZXNBdHRWYWx1ZSAqKSk7CisgCisgCQlpZiAoIXR1cHMpCisgCQkJcmV0dXJuIEZB TFNFOworIAorIAkJbWVtc2V0KHR1cHMgKyByZXMtPnR1cEFyclNpemUsIDAsCisgCQkJKG4g LSByZXMtPnR1cEFyclNpemUpICogc2l6ZW9mKFBHcmVzQXR0VmFsdWUgKikpOworIAkJcmVz LT50dXBsZXMgPSB0dXBzOworIAkJcmVzLT50dXBBcnJTaXplID0gbjsKKyAJfQorIAorIAkv KiBuZWVkIHRvIGFsbG9jYXRlIGEgbmV3IHR1cGxlICovCisgCWlmICh0dXBfbnVtID09IHJl cy0+bnR1cHMgJiYgIXJlcy0+dHVwbGVzW3R1cF9udW1dKQorIAl7CisgCQlpbnQgaTsKKyAJ CVBHcmVzQXR0VmFsdWUgKnR1cDsKKyAKKyAJCXR1cCA9IChQR3Jlc0F0dFZhbHVlICopIHBx UmVzdWx0QWxsb2MocmVzLAorIAkJCXJlcy0+bnVtQXR0cmlidXRlcyAqIHNpemVvZihQR3Jl c0F0dFZhbHVlKSwgVFJVRSk7CisgCisgCQlpZiAoIXR1cCkKKyAJCQlyZXR1cm4gRkFMU0U7 CisgCisgCQkvKiBpbml0aWFsaXplIGVhY2ggY29sdW1uIHRvIE5VTEwgKi8KKyAJCWZvciAo aSA9IDA7IGkgPCByZXMtPm51bUF0dHJpYnV0ZXM7IGkrKykKKyAJCXsKKyAJCQl0dXBbaV0u bGVuID0gTlVMTF9MRU47CisgCQkJdHVwW2ldLnZhbHVlID0gcmVzLT5udWxsX2ZpZWxkOwor IAkJfQorIAorIAkJcmVzLT50dXBsZXNbdHVwX251bV0gPSB0dXA7CisgCQlyZXMtPm50dXBz Kys7CisgCX0KKyAKKyAJYXR0dmFsID0gJnJlcy0+dHVwbGVzW3R1cF9udW1dW2ZpZWxkX251 bV07CisgCisgCS8qIE9uIHRvcCBvZiBOVUxMX0xFTiwgdHJlYXQgYSBOVUxMIHZhbHVlIGFz IGEgTlVMTCBmaWVsZCAqLworIAlpZiAobGVuID09IE5VTExfTEVOIHx8IHZhbHVlID09IE5V TEwpCisgCXsKKyAJCWF0dHZhbC0+bGVuID0gTlVMTF9MRU47CisgCQlhdHR2YWwtPnZhbHVl ID0gcmVzLT5udWxsX2ZpZWxkOworIAl9CisgCWVsc2UKKyAJeworIAkJaWYgKGxlbiA8IDAp CisgCQkJbGVuID0gMDsKKyAKKyAJCWlmIChsZW4gPT0gMCkKKyAJCXsKKyAJCQlhdHR2YWwt PmxlbiA9IDA7CisgCQkJYXR0dmFsLT52YWx1ZSA9IHJlcy0+bnVsbF9maWVsZDsKKyAJCX0K KyAJCWVsc2UKKyAJCXsKKyAJCQlhdHR2YWwtPnZhbHVlID0gKGNoYXIgKikgUFFyZXN1bHRB bGxvYyhyZXMsIGxlbiArIDEpOworIAkJCWlmICghYXR0dmFsLT52YWx1ZSkKKyAJCQkJcmV0 dXJuIEZBTFNFOworIAorIAkJCWF0dHZhbC0+bGVuID0gbGVuOworIAkJCW1lbWNweShhdHR2 YWwtPnZhbHVlLCB2YWx1ZSwgbGVuKTsKKyAJCQlhdHR2YWwtPnZhbHVlW2xlbl0gPSAnXDAn OworIAkJfQorIAl9CisgCisgCXJldHVybiBUUlVFOworIH0KKyAKKyB2b2lkICoKKyBQUXJl c3VsdEFsbG9jKFBHcmVzdWx0ICpyZXMsIHNpemVfdCBuQnl0ZXMpCisgeworIAlyZXR1cm4g cHFSZXN1bHRBbGxvYyhyZXMsIG5CeXRlcywgVFJVRSk7CisgfQorIAogIC8qCiAgICogcHFS ZXN1bHRBbGxvYyAtCiAgICoJCUFsbG9jYXRlIHN1YnNpZGlhcnkgc3RvcmFnZSBmb3IgYSBQ R3Jlc3VsdC4KICAgKgogICAqIG5CeXRlcyBpcyB0aGUgYW1vdW50IG9mIHNwYWNlIG5lZWRl ZCBmb3IgdGhlIG9iamVjdC4KICAgKiBJZiBpc0JpbmFyeSBpcyB0cnVlLCB3ZSBhc3N1bWUg dGhhdCB3ZSBuZWVkIHRvIGFsaWduIHRoZSBvYmplY3Qgb24KKioqKioqKioqKioqKioqCioq KiAzNDksMzY1ICoqKioKLS0tIDY0Nyw2NzkgLS0tLQogICAqIFBRY2xlYXIgLQogICAqCSAg ZnJlZSdzIHRoZSBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIGEgUEdyZXN1bHQKICAgKi8KICB2 b2lkCiAgUFFjbGVhcihQR3Jlc3VsdCAqcmVzKQogIHsKKyAJaW50IGk7CiAgCVBHcmVzdWx0 X2RhdGEgKmJsb2NrOworIAlQR0V2ZW50UmVzdWx0RGVzdHJveSBldnQ7CiAgCiAgCWlmICgh cmVzKQogIAkJcmV0dXJuOwogIAorIAlmb3IgKGkgPSAwOyBpIDwgcmVzLT5uRXZlbnRzOyBp KyspCisgCXsKKyAJCWV2dC5yZXN1bHQgPSByZXM7CisgCQkodm9pZClyZXMtPmV2ZW50c1tp XS5wcm9jKFBHRVZUX1JFU1VMVERFU1RST1ksICZldnQsIHJlcy0+ZXZlbnRzW2ldLnBhc3NU aHJvdWdoKTsKKyAJCWZyZWUocmVzLT5ldmVudHNbaV0ubmFtZSk7CisgCX0KKyAKKyAJaWYg KHJlcy0+ZXZlbnRzKQorIAl7CisgCQlmcmVlKHJlcy0+ZXZlbnRzKTsKKyAJCXJlcy0+ZXZl bnRzID0gTlVMTDsKKyAJCXJlcy0+bkV2ZW50cyA9IDA7CisgCX0KKyAKICAJLyogRnJlZSBh bGwgdGhlIHN1YnNpZGlhcnkgYmxvY2tzICovCiAgCXdoaWxlICgoYmxvY2sgPSByZXMtPmN1 ckJsb2NrKSAhPSBOVUxMKQogIAl7CiAgCQlyZXMtPmN1ckJsb2NrID0gYmxvY2stPm5leHQ7 CiAgCQlmcmVlKGJsb2NrKTsKICAJfQoqKioqKioqKioqKioqKioKKioqIDExOTIsMTIwNCAq KioqCiAgICoJICBtZW1vcnkpLgogICAqLwogIAogIFBHcmVzdWx0ICoKICBQUWdldFJlc3Vs dChQR2Nvbm4gKmNvbm4pCiAgewohIAlQR3Jlc3VsdCAgICpyZXM7CiAgCiAgCWlmICghY29u bikKICAJCXJldHVybiBOVUxMOwogIAogIAkvKiBQYXJzZSBhbnkgYXZhaWxhYmxlIGRhdGEs IGlmIG91ciBzdGF0ZSBwZXJtaXRzLiAqLwogIAlwYXJzZUlucHV0KGNvbm4pOwotLS0gMTUw NiwxNTE4IC0tLS0KICAgKgkgIG1lbW9yeSkuCiAgICovCiAgCiAgUEdyZXN1bHQgKgogIFBR Z2V0UmVzdWx0KFBHY29ubiAqY29ubikKICB7CiEgCVBHcmVzdWx0ICAgKnJlcz1OVUxMOwog IAogIAlpZiAoIWNvbm4pCiAgCQlyZXR1cm4gTlVMTDsKICAKICAJLyogUGFyc2UgYW55IGF2 YWlsYWJsZSBkYXRhLCBpZiBvdXIgc3RhdGUgcGVybWl0cy4gKi8KICAJcGFyc2VJbnB1dChj b25uKTsKKioqKioqKioqKioqKioqCioqKiAxMjY3LDEyNzggKioqKgotLS0gMTU4MSwxNjIw IC0tLS0KICAJCQkJCQkJICBsaWJwcV9nZXR0ZXh0KCJ1bmV4cGVjdGVkIGFzeW5jU3RhdHVz OiAlZFxuIiksCiAgCQkJCQkJCSAgKGludCkgY29ubi0+YXN5bmNTdGF0dXMpOwogIAkJCXJl cyA9IFBRbWFrZUVtcHR5UEdyZXN1bHQoY29ubiwgUEdSRVNfRkFUQUxfRVJST1IpOwogIAkJ CWJyZWFrOwogIAl9CiAgCisgCWlmIChyZXMgJiYgcmVzLT5uRXZlbnRzID4gMCAmJgorIAkJ KHJlcy0+cmVzdWx0U3RhdHVzID09IFBHUkVTX0NPTU1BTkRfT0sgfHwKKyAJCSByZXMtPnJl c3VsdFN0YXR1cyA9PSBQR1JFU19UVVBMRVNfT0sgfHwKKyAJCSByZXMtPnJlc3VsdFN0YXR1 cyA9PSBQR1JFU19FTVBUWV9RVUVSWSkpCisgCXsKKyAJCWludCBpOworIAkJUEdFdmVudFJl c3VsdENyZWF0ZSBldnQ7CisgCisgCQlmb3IgKGkgPSAwOyBpIDwgcmVzLT5uRXZlbnRzOyBp KyspCisgCQl7CisgCQkJZXZ0LmNvbm4gPSBjb25uOworIAkJCWV2dC5yZXN1bHQgPSByZXM7 CisgCisgCQkJaWYgKCFyZXMtPmV2ZW50c1tpXS5wcm9jKFBHRVZUX1JFU1VMVENSRUFURSwg JmV2dCwgcmVzLT5ldmVudHNbaV0ucGFzc1Rocm91Z2gpKQorIAkJCXsKKyAJCQkJY2hhciBt c2dbMjU2XTsKKyAKKyAJCQkJc3ByaW50Zihtc2csCisgCQkJCQkiUEdFdmVudFByb2MgXCIl c1wiIGZhaWxlZCBkdXJpbmcgUEdFVlRfUkVTVUxUQ1JFQVRFIGV2ZW50IiwKKyAJCQkJCXJl cy0+ZXZlbnRzW2ldLm5hbWUpOworIAorIAkJCQlwcVNldFJlc3VsdEVycm9yKHJlcywgbXNn KTsKKyAJCQkJcmVzLT5yZXN1bHRTdGF0dXMgPSBQR1JFU19GQVRBTF9FUlJPUjsKKyAJCQkJ YnJlYWs7CisgCQkJfQorIAkJfQorIAl9CisgCiAgCXJldHVybiByZXM7CiAgfQogIAogIAog IC8qCiAgICogUFFleGVjCkluZGV4OiBzcmMvaW50ZXJmYWNlcy9saWJwcS9saWJwcS1mZS5o Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9wcm9qZWN0cy9jdnNyb290L3Bnc3FsL3NyYy9p bnRlcmZhY2VzL2xpYnBxL2xpYnBxLWZlLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTQy CmRpZmYgLUM2IC1yMS4xNDIgbGlicHEtZmUuaAoqKiogc3JjL2ludGVyZmFjZXMvbGlicHEv bGlicHEtZmUuaAkxOSBNYXIgMjAwOCAwMDozOTozMyAtMDAwMAkxLjE0MgotLS0gc3JjL2lu dGVyZmFjZXMvbGlicHEvbGlicHEtZmUuaAk1IFNlcCAyMDA4IDIwOjI1OjMwIC0wMDAwCioq KioqKioqKioqKioqKgoqKiogMjUsMzYgKioqKgotLS0gMjUsNDUgLS0tLQogIC8qCiAgICog cG9zdGdyZXNfZXh0LmggZGVmaW5lcyB0aGUgYmFja2VuZCdzIGV4dGVybmFsbHkgdmlzaWJs ZSB0eXBlcywKICAgKiBzdWNoIGFzIE9pZC4KICAgKi8KICAjaW5jbHVkZSAicG9zdGdyZXNf ZXh0LmgiCiAgCisgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgKiBPcHRpb25zIGZv ciBQUWNvcHlSZXN1bHQKKyAgKi8KKyAKKyAjZGVmaW5lIFBHX0NPUFlSRVNfQVRUUlMgICAg ICAgICAgMHgwMQorICNkZWZpbmUgUEdfQ09QWVJFU19UVVBMRVMgICAgICAgICAweDAyIC8q IEltcGxpZXMgUEdfQ09QWVJFU19BVFRSUyAqLworICNkZWZpbmUgUEdfQ09QWVJFU19FVkVO VFMgICAgICAgICAweDA0CisgI2RlZmluZSBQR19DT1BZUkVTX05PVElDRUhPT0tTICAgIDB4 MDgKKyAKICAvKiBBcHBsaWNhdGlvbi12aXNpYmxlIGVudW0gdHlwZXMgKi8KICAKICB0eXBl ZGVmIGVudW0KICB7CiAgCS8qCiAgCSAqIEFsdGhvdWdoIGl0IGlzIG9rYXkgdG8gYWRkIHRv IHRoaXMgbGlzdCwgdmFsdWVzIHdoaWNoIGJlY29tZSB1bnVzZWQKKioqKioqKioqKioqKioq CioqKiAxOTAsMjAxICoqKioKLS0tIDE5OSwyMjUgLS0tLQogIAkJaW50CQkgICAqcHRyOwkJ LyogY2FuJ3QgdXNlIHZvaWQgKGRlYyBjb21waWxlciBiYXJmcykJICovCiAgCQlpbnQJCQlp bnRlZ2VyOwogIAl9CQkJdTsKICB9IFBRQXJnQmxvY2s7CiAgCiAgLyogLS0tLS0tLS0tLS0t LS0tLQorICAqIFBHcmVzQXR0RGVzYyAtLSBEYXRhIGFib3V0IGEgc2luZ2xlIGF0dHJpYnV0 ZSAoY29sdW1uKSBvZiBhIHF1ZXJ5IHJlc3VsdAorICAqIC0tLS0tLS0tLS0tLS0tLS0KKyAg Ki8KKyB0eXBlZGVmIHN0cnVjdCBwZ3Jlc0F0dERlc2MKKyB7CisgCWNoYXIJICAgKm5hbWU7 CQkJLyogY29sdW1uIG5hbWUgKi8KKyAJT2lkCQkJdGFibGVpZDsJCS8qIHNvdXJjZSB0YWJs ZSwgaWYga25vd24gKi8KKyAJaW50CQkJY29sdW1uaWQ7CQkvKiBzb3VyY2UgY29sdW1uLCBp ZiBrbm93biAqLworIAlpbnQJCQlmb3JtYXQ7CQkJLyogZm9ybWF0IGNvZGUgZm9yIHZhbHVl ICh0ZXh0L2JpbmFyeSkgKi8KKyAJT2lkCQkJdHlwaWQ7CQkJLyogdHlwZSBpZCAqLworIAlp bnQJCQl0eXBsZW47CQkJLyogdHlwZSBzaXplICovCisgCWludAkJCWF0dHR5cG1vZDsgIC8q IHR5cGUtc3BlY2lmaWMgbW9kaWZpZXIgaW5mbyAqLworIH0gUEdyZXNBdHREZXNjOworIAor IC8qIC0tLS0tLS0tLS0tLS0tLS0KICAgKiBFeHBvcnRlZCBmdW5jdGlvbnMgb2YgbGlicHEK ICAgKiAtLS0tLS0tLS0tLS0tLS0tCiAgICovCiAgCiAgLyogPT09CWluIGZlLWNvbm5lY3Qu YyA9PT0gKi8KICAKKioqKioqKioqKioqKioqCioqKiA0MzQsNDQ1ICoqKioKLS0tIDQ1OCw0 ODcgLS0tLQogICAqIE1ha2UgYW4gZW1wdHkgUEdyZXN1bHQgd2l0aCBnaXZlbiBzdGF0dXMg KHNvbWUgYXBwcyBmaW5kIHRoaXMKICAgKiB1c2VmdWwpLiBJZiBjb25uIGlzIG5vdCBOVUxM IGFuZCBzdGF0dXMgaW5kaWNhdGVzIGFuIGVycm9yLCB0aGUKICAgKiBjb25uJ3MgZXJyb3JN ZXNzYWdlIGlzIGNvcGllZC4KICAgKi8KICBleHRlcm4gUEdyZXN1bHQgKlBRbWFrZUVtcHR5 UEdyZXN1bHQoUEdjb25uICpjb25uLCBFeGVjU3RhdHVzVHlwZSBzdGF0dXMpOwogIAorIC8q IG1ha2VzIGEgY29weSBvZiBhIHJlc3VsdCAqLworIGV4dGVybiBQR3Jlc3VsdCAqUFFjb3B5 UmVzdWx0KGNvbnN0IFBHcmVzdWx0ICpzcmMsIGludCBmbGFncyk7CisgCisgLyogU2V0cyB0 aGUgYXR0cmlidXRlcyBvZiBhIHJlc3VsdCwgbm8gYXR0cmlidXRlcyBjYW4gYWxyZWFkeSBl eGlzdC4gKi8KKyBleHRlcm4gaW50IFBRc2V0UmVzdWx0QXR0cnMoUEdyZXN1bHQgKnJlcywg aW50IG51bUF0dHJpYnV0ZXMsIFBHcmVzQXR0RGVzYyAqYXR0RGVzY3MpOworIAorIC8qIEFs bG9jYXRlIHN1YnNpZGlhcnkgc3RvcmFnZSBmb3IgYSBQR3Jlc3VsdC4gKi8KKyBleHRlcm4g dm9pZCAqUFFyZXN1bHRBbGxvYyhQR3Jlc3VsdCAqcmVzLCBzaXplX3QgbkJ5dGVzKTsKKyAK KyAvKgorICAqIFNldHMgdGhlIHZhbHVlIGZvciBhIHR1cGxlIGZpZWxkLiAgVGhlIHR1cF9u dW0gbXVzdCBiZSBsZXNzIHRoYW4gb3IKKyAgKiBlcXVhbCB0byBQUW50dXBsZXMocmVzKS4g IFRoaXMgZnVuY3Rpb24gd2lsbCBnZW5lcmF0ZSB0dXBsZXMgYXMgbmVlZGVkLgorICAqIEEg bmV3IHR1cGxlIGlzIGdlbmVyYXRlZCB3aGVuIHR1cF9udW0gZXF1YWxzIFBRbnR1cGxlcyhy ZXMpIGFuZCB0aGVyZQorICAqIGFyZSBubyBmaWVsZHMgZGVmaW5lZCBmb3IgdGhhdCB0dXBs ZS4KKyAgKgorICAqIFJldHVybnMgYSBub24temVybyB2YWx1ZSBmb3Igc3VjY2VzcyBhbmQg emVybyBmb3IgZmFpbHVyZS4KKyAgKi8KKyBleHRlcm4gaW50IFBRc2V0dmFsdWUoUEdyZXN1 bHQgKnJlcywgaW50IHR1cF9udW0sIGludCBmaWVsZF9udW0sIGNoYXIgKnZhbHVlLCBpbnQg bGVuKTsKICAKICAvKiBRdW90aW5nIHN0cmluZ3MgYmVmb3JlIGluY2x1c2lvbiBpbiBxdWVy aWVzLiAqLwogIGV4dGVybiBzaXplX3QgUFFlc2NhcGVTdHJpbmdDb25uKFBHY29ubiAqY29u biwKICAJCQkJICAgY2hhciAqdG8sIGNvbnN0IGNoYXIgKmZyb20sIHNpemVfdCBsZW5ndGgs CiAgCQkJCSAgIGludCAqZXJyb3IpOwogIGV4dGVybiB1bnNpZ25lZCBjaGFyICpQUWVzY2Fw ZUJ5dGVhQ29ubihQR2Nvbm4gKmNvbm4sCkluZGV4OiBzcmMvaW50ZXJmYWNlcy9saWJwcS9s aWJwcS1pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvcHJvamVjdHMvY3Zzcm9vdC9w Z3NxbC9zcmMvaW50ZXJmYWNlcy9saWJwcS9saWJwcS1pbnQuaCx2CnJldHJpZXZpbmcgcmV2 aXNpb24gMS4xMzEKZGlmZiAtQzYgLXIxLjEzMSBsaWJwcS1pbnQuaAoqKiogc3JjL2ludGVy ZmFjZXMvbGlicHEvbGlicHEtaW50LmgJMjkgTWF5IDIwMDggMjI6MDI6NDQgLTAwMDAJMS4x MzEKLS0tIHNyYy9pbnRlcmZhY2VzL2xpYnBxL2xpYnBxLWludC5oCTUgU2VwIDIwMDggMjA6 MjU6MzAgLTAwMDAKKioqKioqKioqKioqKioqCioqKiAxOSwzMCAqKioqCi0tLSAxOSwzMSAt LS0tCiAgCiAgI2lmbmRlZiBMSUJQUV9JTlRfSAogICNkZWZpbmUgTElCUFFfSU5UX0gKICAK ICAvKiBXZSBhc3N1bWUgbGlicHEtZmUuaCBoYXMgYWxyZWFkeSBiZWVuIGluY2x1ZGVkLiAq LwogICNpbmNsdWRlICJwb3N0Z3Jlc19mZS5oIgorICNpbmNsdWRlICJsaWJwcS1ldmVudHMu aCIKICAKICAjaW5jbHVkZSA8dGltZS5oPgogICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICAj aWZuZGVmIFdJTjMyCiAgI2luY2x1ZGUgPHN5cy90aW1lLmg+CiAgI2VuZGlmCioqKioqKioq KioqKioqKgoqKiogOTcsMTIxICoqKioKICB1bmlvbiBwZ3Jlc3VsdF9kYXRhCiAgewogIAlQ R3Jlc3VsdF9kYXRhICpuZXh0OwkJLyogbGluayB0byBuZXh0IGJsb2NrLCBvciBOVUxMICov CiAgCWNoYXIJCXNwYWNlWzFdOwkJLyogZHVtbXkgZm9yIGFjY2Vzc2luZyBibG9jayBhcyBi eXRlcyAqLwogIH07CiAgCi0gLyogRGF0YSBhYm91dCBhIHNpbmdsZSBhdHRyaWJ1dGUgKGNv bHVtbikgb2YgYSBxdWVyeSByZXN1bHQgKi8KLSAKLSB0eXBlZGVmIHN0cnVjdCBwZ3Jlc0F0 dERlc2MKLSB7Ci0gCWNoYXIJICAgKm5hbWU7CQkJLyogY29sdW1uIG5hbWUgKi8KLSAJT2lk CQkJdGFibGVpZDsJCS8qIHNvdXJjZSB0YWJsZSwgaWYga25vd24gKi8KLSAJaW50CQkJY29s dW1uaWQ7CQkvKiBzb3VyY2UgY29sdW1uLCBpZiBrbm93biAqLwotIAlpbnQJCQlmb3JtYXQ7 CQkJLyogZm9ybWF0IGNvZGUgZm9yIHZhbHVlICh0ZXh0L2JpbmFyeSkgKi8KLSAJT2lkCQkJ dHlwaWQ7CQkJLyogdHlwZSBpZCAqLwotIAlpbnQJCQl0eXBsZW47CQkJLyogdHlwZSBzaXpl ICovCi0gCWludAkJCWF0dHR5cG1vZDsJCS8qIHR5cGUtc3BlY2lmaWMgbW9kaWZpZXIgaW5m byAqLwotIH0gUEdyZXNBdHREZXNjOwotIAogIC8qIERhdGEgYWJvdXQgYSBzaW5nbGUgcGFy YW1ldGVyIG9mIGEgcHJlcGFyZWQgc3RhdGVtZW50ICovCiAgdHlwZWRlZiBzdHJ1Y3QgcGdy ZXNQYXJhbURlc2MKICB7CiAgCU9pZAkJCXR5cGlkOwkJCS8qIHR5cGUgaWQgKi8KICB9IFBH cmVzUGFyYW1EZXNjOwogIAotLS0gOTgsMTA5IC0tLS0KKioqKioqKioqKioqKioqCioqKiAx NTksMTcwICoqKioKLS0tIDE0NywxNjYgLS0tLQogIAlQUW5vdGljZVJlY2VpdmVyIG5vdGlj ZVJlYzsgLyogbm90aWNlIG1lc3NhZ2UgcmVjZWl2ZXIgKi8KICAJdm9pZAkgICAqbm90aWNl UmVjQXJnOwogIAlQUW5vdGljZVByb2Nlc3NvciBub3RpY2VQcm9jOwkJLyogbm90aWNlIG1l c3NhZ2UgcHJvY2Vzc29yICovCiAgCXZvaWQJICAgKm5vdGljZVByb2NBcmc7CiAgfSBQR05v dGljZUhvb2tzOwogIAorIHR5cGVkZWYgc3RydWN0CisgeworIAljaGFyCSAgICpuYW1lOwkv KiBmb3IgZXJyb3IgbWVzc2FnZXMgKi8KKyAJdm9pZAkgICAqcGFzc1Rocm91Z2g7IC8qIHBv aW50ZXIgc3VwcGxpZWQgYnkgdXNlciAqLworIAl2b2lkCSAgICpkYXRhOyAvKiBzdGF0ZSAo aW5zdGFuY2UpIGRhdGEsIG9wdGlvbmFsbHkgZ2VuZXJhdGVkIGJ5IGV2ZW50IHByb2MgKi8K KyAJUEdFdmVudFByb2MgcHJvYzsgLyogdGhlIGZ1bmN0aW9uIHRvIGNhbGwgb24gZXZlbnRz ICovCisgfSBQR0V2ZW50OworIAogIHN0cnVjdCBwZ19yZXN1bHQKICB7CiAgCWludAkJCW50 dXBzOwogIAlpbnQJCQludW1BdHRyaWJ1dGVzOwogIAlQR3Jlc0F0dERlc2MgKmF0dERlc2Nz OwogIAlQR3Jlc0F0dFZhbHVlICoqdHVwbGVzOwkJLyogZWFjaCBQR3Jlc1R1cGxlIGlzIGFu IGFycmF5IG9mCioqKioqKioqKioqKioqKgoqKiogMTgxLDE5MiAqKioqCi0tLSAxNzcsMTky IC0tLS0KICAJICogVGhlc2UgZmllbGRzIGFyZSBjb3BpZWQgZnJvbSB0aGUgb3JpZ2luYXRp bmcgUEdjb25uLCBzbyB0aGF0IG9wZXJhdGlvbnMKICAJICogb24gdGhlIFBHcmVzdWx0IGRv bid0IGhhdmUgdG8gcmVmZXJlbmNlIHRoZSBQR2Nvbm4uCiAgCSAqLwogIAlQR05vdGljZUhv b2tzIG5vdGljZUhvb2tzOwogIAlpbnQJCQljbGllbnRfZW5jb2Rpbmc7CS8qIGVuY29kaW5n IGlkICovCiAgCisgCS8qIHJlZ2lzdGVyZWQgZXZlbnRzLCBjb3BpZWQgZnJvbSBjb25uICov CisgCWludCBuRXZlbnRzOworIAlQR0V2ZW50ICpldmVudHM7CisgCiAgCS8qCiAgCSAqIEVy cm9yIGluZm9ybWF0aW9uIChhbGwgTlVMTCBpZiBub3QgYW4gZXJyb3IgcmVzdWx0KS4gIGVy ck1zZyBpcyB0aGUKICAJICogIm92ZXJhbGwiIGVycm9yIG1lc3NhZ2UgcmV0dXJuZWQgYnkg UFFyZXN1bHRFcnJvck1lc3NhZ2UuICBJZiB3ZSBoYXZlCiAgCSAqIHBlci1maWVsZCBpbmZv IHRoZW4gaXQgaXMgc3RvcmVkIGluIGEgbGlua2VkIGxpc3QuCiAgCSAqLwogIAljaGFyCSAg ICplcnJNc2c7CQkJLyogZXJyb3IgbWVzc2FnZSwgb3IgTlVMTCBpZiBubyBlcnJvciAqLwoq KioqKioqKioqKioqKioKKioqIDMwMCwzMTEgKioqKgotLS0gMzAwLDMxNiAtLS0tCiAgCS8q IE9wdGlvbmFsIGZpbGUgdG8gd3JpdGUgdHJhY2UgaW5mbyB0byAqLwogIAlGSUxFCSAgICpQ ZmRlYnVnOwogIAogIAkvKiBDYWxsYmFjayBwcm9jZWR1cmVzIGZvciBub3RpY2UgbWVzc2Fn ZSBwcm9jZXNzaW5nICovCiAgCVBHTm90aWNlSG9va3Mgbm90aWNlSG9va3M7CiAgCisgCS8q IHJlZ2lzdGVyZWQgZXZlbnRzIHZpYSBQUXJlZ2lzdGVyRXZlbnRQcm9jICovCisgCWludCBu RXZlbnRzOworIAlpbnQgZXZlbnRBcnJTaXplOworIAlQR0V2ZW50ICpldmVudHM7CisgCiAg CS8qIFN0YXR1cyBpbmRpY2F0b3JzICovCiAgCUNvbm5TdGF0dXNUeXBlIHN0YXR1czsKICAJ UEdBc3luY1N0YXR1c1R5cGUgYXN5bmNTdGF0dXM7CiAgCVBHVHJhbnNhY3Rpb25TdGF0dXNU eXBlIHhhY3RTdGF0dXM7IC8qIG5ldmVyIGNoYW5nZXMgdG8gQUNUSVZFICovCiAgCVBHUXVl cnlDbGFzcyBxdWVyeWNsYXNzOwogIAljaGFyCSAgICpsYXN0X3F1ZXJ5OwkJLyogbGFzdCBT UUwgY29tbWFuZCwgb3IgTlVMTCBpZiB1bmtub3duICovCg== --------------000000020601030206000600--