Received: from localhost (unknown [200.46.204.183]) by postgresql.org (Postfix) with ESMTP id AFC4064FD0A for ; Wed, 17 Sep 2008 01:00:33 -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 58537-01-9 for ; Wed, 17 Sep 2008 01:00:26 -0300 (ADT) X-Greylist: from auto-whitelisted by SQLgrey-1.7.6 Received: from mail.esilo.com (mail.esilo.com [63.150.152.211]) by postgresql.org (Postfix) with ESMTP id AA84A64FCCF for ; Wed, 17 Sep 2008 00:59:52 -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 m8H3xknr009055; Tue, 16 Sep 2008 23:59:47 -0400 Message-ID: <48D080B0.6070104@esilo.com> Date: Tue, 16 Sep 2008 23:59:44 -0400 From: Andrew Chernow User-Agent: Thunderbird 2.0.0.16 (Windows/20080708) MIME-Version: 1.0 To: Tom Lane CC: Alvaro Herrera , 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> <48C19759.90402@esilo.com> <27615.1221619326@sss.pgh.pa.us> <48D072E3.6010703@esilo.com> <28673.1221622817@sss.pgh.pa.us> In-Reply-To: <28673.1221622817@sss.pgh.pa.us> Content-Type: multipart/mixed; boundary="------------020105090504060809010008" 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/1076 X-Sequence-Number: 124205 This is a multi-part message in MIME format. --------------020105090504060809010008 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Tom Lane wrote: >> It is odd. Actually, it looks like a bug to me. PQgetResult is the >> behavior we were after, don't trigger the event if the creation >> failed. Same thing occurs during a conn reset. Looks like PQclear >> needs to check resultStatus before it triggers RESULTDESTROY events. > > If you did that, then you WOULD have a bug. Consider case where you > successfully init two events, and the third one fails. You'll now > change the result's status to ERROR. If you don't RESULTDESTROY > then the first two events will leak whatever storage they allocated. > > The reason I suggested not being conditional about the init call was > to reduce the probability of bugs of similar ilks associated with > an event proc assuming that it could only get a DESTROY call for > something it had seen CREATEd --- for example, if it were frobbing > a reference count for some long-lived data, it could very easily > screw up the reference count that way. I suppose that the risk of > an earlier event proc failing means it has to cope with that case > anyway, but I don't think it's a particularly good idea to have > arbitrary asymmetries increasing the odds of a problem. > > regards, tom lane > > Yeah. Good point. I fixed it to always fire events. -- Andrew Chernow eSilo, LLC every bit counts http://www.esilo.com/ --------------020105090504060809010008 Content-Type: application/x-compressed; name="libpq-events.tgz" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="libpq-events.tgz" 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 --------------020105090504060809010008 Content-Type: text/plain; name="libpq-events.patch" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="libpq-events.patch" SW5kZXg6IGRvYy9zcmMvc2dtbC9saWJwcS5zZ21sCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6 IC9wcm9qZWN0cy9jdnNyb290L3Bnc3FsL2RvYy9zcmMvc2dtbC9saWJwcS5zZ21sLHYKcmV0 cmlldmluZyByZXZpc2lvbiAxLjI2MApkaWZmIC1DNiAtcjEuMjYwIGxpYnBxLnNnbWwKKioq IGRvYy9zcmMvc2dtbC9saWJwcS5zZ21sCTI3IEp1biAyMDA4IDAyOjQ0OjMxIC0wMDAwCTEu MjYwCi0tLSBkb2Mvc3JjL3NnbWwvbGlicHEuc2dtbAkxNyBTZXAgMjAwOCAwMzo1NDoyMCAt MDAwMAoqKioqKioqKioqKioqKioKKioqIDIwOTIsMjEwMyAqKioqCi0tLSAyMDkyLDIyMjIg LS0tLQogICAgICAgICAgTm90ZSB0aGF0IDxmdW5jdGlvbj5QUWNsZWFyPC9mdW5jdGlvbj4g c2hvdWxkIGV2ZW50dWFsbHkgYmUgY2FsbGVkCiAgICAgICAgICBvbiB0aGUgb2JqZWN0LCBq dXN0IGFzIHdpdGggYSA8c3RydWN0bmFtZT5QR3Jlc3VsdDwvc3RydWN0bmFtZT4KICAgICAg ICAgIHJldHVybmVkIGJ5IDxhcHBsaWNhdGlvbj5saWJwcTwvYXBwbGljYXRpb24+IGl0c2Vs Zi4KICAgICAgICAgPC9wYXJhPgogICAgICAgIDwvbGlzdGl0ZW0+CiAgICAgICA8L3Zhcmxp c3RlbnRyeT4KKyAKKyAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgPHRlcm0+CisgICAg ICAgIDxmdW5jdGlvbj5QUWNvcHlSZXN1bHQ8L2Z1bmN0aW9uPgorICAgICAgICA8aW5kZXh0 ZXJtPgorICAgICAgICAgPHByaW1hcnk+UFFjb3B5UmVzdWx0PC9wcmltYXJ5PgorICAgICAg ICA8L2luZGV4dGVybT4KKyAgICAgICA8L3Rlcm0+CisgCisgICAgICAgPGxpc3RpdGVtPgor ICAgICAgICA8cGFyYT4KKyAgICAgICAgIE1ha2VzIGEgY29weSBvZiBhIDxzdHJ1Y3RuYW1l PlBHcmVzdWx0PC9zdHJ1Y3RuYW1lPiBvYmplY3QuCisgICAgICAgICA8c3lub3BzaXM+Cisg ICAgICAgICAgUEdyZXN1bHQgKlBRY29weVJlc3VsdChjb25zdCBQR3Jlc3VsdCAqc3JjLCBp bnQgZmxhZ3MpOworICAgICAgICAgPC9zeW5vcHNpcz4KKyAgICAgICAgPC9wYXJhPgorIAor ICAgICAgICA8cGFyYT4KKyAgICAgICAgIFRoZSByZXR1cm5lZCByZXN1bHQgaXMgYWx3YXlz IHB1dCBpbnRvIDxsaXRlcmFsPlBHUkVTX1RVUExFU19PSzwvbGl0ZXJhbD4gc3RhdHVzLgor ICAgICAgICAgSXQgaXMgbm90IGxpbmtlZCB0byB0aGUgc291cmNlIHJlc3VsdCBpbiBhbnkg d2F5IGFuZAorICAgICAgICAgPGZ1bmN0aW9uPlBRY2xlYXI8L2Z1bmN0aW9uPiBtdXN0IGJl IGNhbGxlZCB3aGVuIHRoZSByZXN1bHQgaXMgbm8gbG9uZ2VyIG5lZWRlZC4KKyAgICAgICAg IElmIHRoZSBmdW5jdGlvbiBmYWlscywgTlVMTCBpcyByZXR1cm5lZC4KKyAgICAgICAgPC9w YXJhPgorIAorICAgICAgICA8cGFyYT4KKyAgICAgICAgIE9wdGlvbmFsbHksIHRoZSA8cGFy YW1ldGVyPmZsYWdzPC9wYXJhbWV0ZXI+IGFyZ3VtZW50IGNhbiBiZSB1c2VkIHRvIGNvcHkK KyAgICAgICAgIG1vcmUgcGFydHMgb2YgdGhlIHJlc3VsdC4gIDxsaXRlcmFsPlBHX0NPUFlS RVNfQVRUUlM8L2xpdGVyYWw+IHdpbGwgY29weSB0aGUKKyAgICAgICAgIHNvdXJjZSByZXN1 bHQncyBhdHRyaWJ1dGVzLiAgPGxpdGVyYWw+UEdfQ09QWVJFU19UVVBMRVM8L2xpdGVyYWw+ IHdpbGwgY29weQorICAgICAgICAgdGhlIHNvdXJjZSByZXN1bHQncyB0dXBsZXMuICBUaGlz IGltcGxpZXMgY29weWluZyB0aGUgYXR0cnMsIGJlaW5nIGhvdyB0aGUKKyAgICAgICAgIGF0 dHJzIGFyZSBuZWVkZWQgYnkgdGhlIHR1cGxlcy4gIDxsaXRlcmFsPlBHX0NPUFlSRVNfRVZF TlRTPC9saXRlcmFsPiB3aWxsCisgICAgICAgICBjb3B5IHRoZSBzb3VyY2UgcmVzdWx0J3Mg ZXZlbnRzLiAgPGxpdGVyYWw+UEdfQ09QWVJFU19OT1RJQ0VIT09LUzwvbGl0ZXJhbD4KKyAg ICAgICAgIHdpbGwgY29weSB0aGUgc291cmNlIHJlc3VsdCdzIG5vdGlmeSBob29rcy4KKyAg ICAgICAgPC9wYXJhPgorICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICA8L3Zhcmxpc3RlbnRy eT4KKyAKKyAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgPHRlcm0+CisgICAgICAgIDxm dW5jdGlvbj5QUXNldFJlc3VsdEF0dHJzPC9mdW5jdGlvbj4KKyAgICAgICAgPGluZGV4dGVy bT4KKyAgICAgICAgIDxwcmltYXJ5PlBRc2V0UmVzdWx0QXR0cnM8L3ByaW1hcnk+CisgICAg ICAgIDwvaW5kZXh0ZXJtPgorICAgICAgIDwvdGVybT4KKyAKKyAgICAgICA8bGlzdGl0ZW0+ CisgICAgICAgIDxwYXJhPgorICAgICAgICAgU2V0cyB0aGUgYXR0cmlidXRlcyBvZiBhIDxz dHJ1Y3RuYW1lPlBHcmVzdWx0PC9zdHJ1Y3RuYW1lPiBvYmplY3QuCisgICAgICAgICA8c3lu b3BzaXM+CisgICAgICAgICAgaW50IFBRc2V0UmVzdWx0QXR0cnMoUEdyZXN1bHQgKnJlcywg aW50IG51bUF0dHJpYnV0ZXMsIFBHcmVzQXR0RGVzYyAqYXR0RGVzY3MpOworICAgICAgICAg PC9zeW5vcHNpcz4KKyAgICAgICAgPC9wYXJhPgorIAorICAgICAgICA8cGFyYT4KKyAgICAg ICAgIFRoZSBwcm92aWRlZCA8cGFyYW1ldGVyPmF0dERlc2NzPC9wYXJhbWV0ZXI+IGFyZSBj b3BpZWQgaW50byB0aGUgcmVzdWx0LCB0aHVzIHRoZQorICAgICAgICAgPHBhcmFtZXRlcj5h dHREZXNjczwvcGFyYW1ldGVyPiBhcmUgbm8gbG9uZ2VyIG5lZWRlZCBieSA8cGFyYW1ldGVy PnJlczwvcGFyYW1ldGVyPiBhZnRlcgorICAgICAgICAgdGhlIGZ1bmN0aW9uIHJldHVybnMu ICBJZiB0aGUgPHBhcmFtZXRlcj5hdHREZXNjczwvcGFyYW1ldGVyPiBhcmUgTlVMTCBvcgor ICAgICAgICAgPHBhcmFtZXRlcj5udW1BdHRyaWJ1dGVzPC9wYXJhbWV0ZXI+IGlzIGxlc3Mg dGhhbiBvbmUsIHRoZSByZXF1ZXN0IGlzIGlnbm9yZWQgYW5kCisgICAgICAgICB0aGUgZnVu Y3Rpb24gc3VjY2VlZHMuICBJZiA8cGFyYW1ldGVyPnJlczwvcGFyYW1ldGVyPiBhbHJlYWR5 IGNvbnRhaW5zIGF0dHJpYnV0ZXMsCisgICAgICAgICB0aGUgZnVuY3Rpb24gd2lsbCBmYWls LiAgSWYgdGhlIGZ1bmN0aW9uIGZhaWxzLCB0aGUgcmV0dXJuIHZhbHVlIGlzIHplcm8uICBJ ZiB0aGUKKyAgICAgICAgIGZ1bmN0aW9uIHN1Y2NlZWRzLCB0aGUgcmV0dXJuIHZhbHVlIGlz IG5vbi16ZXJvLgorICAgICAgICA8L3BhcmE+CisgICAgICAgPC9saXN0aXRlbT4KKyAgICAg IDwvdmFybGlzdGVudHJ5PgorIAorICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICA8dGVy bT4KKyAgICAgICAgPGZ1bmN0aW9uPlBRc2V0dmFsdWU8L2Z1bmN0aW9uPgorICAgICAgICA8 aW5kZXh0ZXJtPgorICAgICAgICAgPHByaW1hcnk+UFFzZXR2YWx1ZTwvcHJpbWFyeT4KKyAg ICAgICAgPC9pbmRleHRlcm0+CisgICAgICAgPC90ZXJtPgorIAorICAgICAgIDxsaXN0aXRl bT4KKyAgICAgICAgPHBhcmE+CisgICAgICAgICBTZXRzIGEgdHVwbGUgZmllbGQgdmFsdWUg b2YgYSA8c3RydWN0bmFtZT5QR3Jlc3VsdDwvc3RydWN0bmFtZT4gb2JqZWN0LgorICAgICAg ICAgPHN5bm9wc2lzPgorICAgICAgICAgIGludCBQUXNldHZhbHVlKFBHcmVzdWx0ICpyZXMs IGludCB0dXBfbnVtLCBpbnQgZmllbGRfbnVtLCBjaGFyICp2YWx1ZSwgaW50IGxlbik7Cisg ICAgICAgICA8L3N5bm9wc2lzPgorICAgICAgICA8L3BhcmE+CisgCisgICAgICAgIDxwYXJh PgorICAgICAgICAgVGhlIGZ1bmN0aW9uIHdpbGwgYXV0b21hdGljYWxseSBncm93IHRoZSBy ZXN1bHQncyBpbnRlcm5hbCB0dXBsZXMgYXJyYXkgYXMgbmVlZGVkLgorICAgICAgICAgVGhl IDxwYXJhbWV0ZXI+dHVwX251bTwvcGFyYW1ldGVyPiBhcmd1bWVudCBtdXN0IGJlIGxlc3Mg dGhhbiBvciBlcXVhbCB0bworICAgICAgICAgPGZ1bmN0aW9uPlBRbnR1cGxlczwvZnVuY3Rp b24+LCBtZWFuaW5nIHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgZ3JvdyB0aGUKKyAgICAgICAg IHR1cGxlcyBhcnJheSBpbiBvcmRlciBvbmUgdHVwbGUgYXQgYSB0aW1lLiAgQWx0aG91Z2gs IGFueSBmaWVsZCBmcm9tIGFueQorICAgICAgICAgZXhpc3RpbmcgdHVwbGUgY2FuIGJlIG1v ZGlmaWVkIGluIGFueSBvcmRlci4gIElmIGEgdmFsdWUgYXQgPHBhcmFtZXRlcj5maWVsZF9u dW08L3BhcmFtZXRlcj4KKyAgICAgICAgIGFscmVhZHkgZWl4c3RzLCBpdCB3aWxsIGJlIG92 ZXJ3cml0dGVuLiAgSWYgPHBhcmFtZXRlcj5sZW48L3BhcmFtZXRlcj4gaXMgPGxpdGVyYWw+ LTE8L2xpdGVyYWw+IG9yCisgICAgICAgICA8cGFyYW1ldGVyPnZhbHVlPC9wYXJhbWV0ZXI+ IGlzIDxsaXRlcmFsPk5VTEw8L2xpdGVyYWw+LCB0aGUgZmllbGQgdmFsdWUgd2lsbAorICAg ICAgICAgYmUgc2V0IHRvIGFuIFNRTCA8bGl0ZXJhbD5OVUxMPC9saXRlcmFsPi4gIFRoZSA8 cGFyYW1ldGVyPnZhbHVlPC9wYXJhbWV0ZXI+IGlzIGNvcGllZAorICAgICAgICAgaW50byBy ZXN1bHQncyBwcml2YXRlIHN0b3JhZ2UsIHRodXMgbm8gbG9uZ2VyIG5lZWRlZCBieSA8cGFy YW1ldGVyPnJlczwvcGFyYW1ldGVyPiBhZnRlcgorICAgICAgICAgdGhlIGZ1bmN0aW9uIHJl dHVybnMuICBJZiB0aGUgZnVuY3Rpb24gZmFpbHMsIHRoZSByZXR1cm4gdmFsdWUKKyAgICAg ICAgIGlzIHplcm8uICBJZiB0aGUgZnVuY3Rpb24gc3VjY2VlZHMsIHRoZSByZXR1cm4gdmFs dWUgaXMgbm9uLXplcm8uCisgICAgICAgIDwvcGFyYT4KKyAgICAgICA8L2xpc3RpdGVtPgor ICAgICAgPC92YXJsaXN0ZW50cnk+CisgCisgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAg IDx0ZXJtPgorICAgICAgICA8ZnVuY3Rpb24+UFFyZXN1bHRBbGxvYzwvZnVuY3Rpb24+Cisg ICAgICAgIDxpbmRleHRlcm0+CisgICAgICAgICA8cHJpbWFyeT5QUXJlc3VsdEFsbG9jPC9w cmltYXJ5PgorICAgICAgICA8L2luZGV4dGVybT4KKyAgICAgICA8L3Rlcm0+CisgCisgICAg ICAgPGxpc3RpdGVtPgorICAgICAgICA8cGFyYT4KKyAgICAgICAgIEFsbG9jYXRlIHN1YnNp ZGlhcnkgc3RvcmFnZSBmb3IgYSA8c3RydWN0bmFtZT5QR3Jlc3VsdDwvc3RydWN0bmFtZT4g b2JqZWN0LgorICAgICAgICAgPHN5bm9wc2lzPgorICAgICAgICAgIHZvaWQgKlBRcmVzdWx0 QWxsb2MoUEdyZXN1bHQgKnJlcywgc2l6ZV90IG5CeXRlcyk7CisgICAgICAgICA8L3N5bm9w c2lzPgorICAgICAgICA8L3BhcmE+CisgCisgICAgICAgIDxwYXJhPgorICAgICAgICAgQW55 IG1lbW9yeSBhbGxvY2F0ZWQgd2l0aCB0aGlzIGZ1bmN0aW9uLCB3aWxsIGJlIGZyZWVkIHdo ZW4KKyAgICAgICAgIDxwYXJhbWV0ZXI+cmVzPC9wYXJhbWV0ZXI+IGlzIGNsZWFyZWQuICBJ ZiB0aGUgZnVuY3Rpb24gZmFpbHMsCisgICAgICAgICB0aGUgcmV0dXJuIHZhbHVlIGlzIDxs aXRlcmFsPk5VTEw8L2xpdGVyYWw+LgorICAgICAgICA8L3BhcmE+CisgICAgICAgPC9saXN0 aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICA8L3ZhcmlhYmxlbGlzdD4KICAg ICA8L3BhcmE+CiAgICA8L3NlY3QyPgogIAogICAgPHNlY3QyIGlkPSJsaWJwcS1leGVjLXNl bGVjdC1pbmZvIj4KICAgICA8dGl0bGU+UmV0cmlldmluZyBRdWVyeSBSZXN1bHQgSW5mb3Jt YXRpb248L3RpdGxlPgoqKioqKioqKioqKioqKioKKioqIDQ1NTgsNDU2OSAqKioqCi0tLSA0 Njc3LDUxNTcgLS0tLQogICAgICA8L2xpc3RpdGVtPgogICAgIDwvdmFybGlzdGVudHJ5Pgog ICAgPC92YXJpYWJsZWxpc3Q+CiAgCiAgIDwvc2VjdDE+CiAgCisgIDxzZWN0MSBpZD0ibGli cHEtZXZlbnRzIj4KKyAgIDx0aXRsZT5FdmVudCBTeXN0ZW08L3RpdGxlPgorIAorICAgPHBh cmE+CisgICAgVGhlIGV2ZW50IHN5c3RlbSBpcyBkZXNpZ25lZCB0byBub3RpZnkgcmVnaXN0 ZXJlZCBldmVudCBoYW5kbGVycworICAgIGFib3V0IHBhcnRpY3VsYXIgbGlicHEgZXZlbnRz OyBzdWNoIGFzIHRoZSBjcmVhdGlvbiBvciBkZXN0cnVjdGlvbgorICAgIG9mIDxzdHJ1Y3Ru YW1lPlBHY29ubjwvc3RydWN0bmFtZT4gYW5kIDxzdHJ1Y3RuYW1lPlBHcmVzdWx0PC9zdHJ1 Y3RuYW1lPgorICAgIG9iamVjdHMuICBPbmUgdXNlIGNhc2UgaXMgdGhhdCB0aGlzIGFsbG93 cyBhcHBsaWNhdGlvbnMgdG8gYXNzb2NpYXRlCisgICAgdGhlaXIgb3duIGRhdGEgd2l0aCBh IDxzdHJ1Y3RuYW1lPlBHY29ubjwvc3RydWN0bmFtZT4gYW5kCisgICAgPHN0cnVjdG5hbWU+ UEdyZXN1bHQ8L3N0cnVjdG5hbWU+LCB0aGF0IGNhbiByZXRyaWV2ZWQgdmlhCisgICAgPGZ1 bmN0aW9uPlBRaW5zdGFuY2VEYXRhPC9mdW5jdGlvbj4gYW5kIDxmdW5jdGlvbj5QUXJlc3Vs dEluc3RhbmNlRGF0YTwvZnVuY3Rpb24+LgorICAgIEJhc2ljYWxseSwgaXRzIGxpa2UgYWRk aW5nIG1lbWJlcnMgdG8gdGhlIG9wYXF1ZSBjb25uIG9yIHJlc3VsdAorICAgIHN0cnVjdHVy ZXMgYXQgcnVudGltZS4KKyAgIDwvcGFyYT4KKyAKKyAgIDxwYXJhPgorICAgIEJlbG93IGlz IGEgbGlzdCBvZiBldmVudCBzeXN0ZW0gY29uY2VwdHM6CisgICAgPGl0ZW1pemVkbGlzdCBt YXJrPSdidWxsZXQnPgorICAgICA8bGlzdGl0ZW0+CisgICAgICA8cGFyYT4KKyAgICAgICA8 bGl0ZXJhbD5ldmVudElkPC9saXRlcmFsPiAtIElkZW50aWZpZXMgd2hpY2ggZXZlbnQgd2Fz IGZpcmVkIGJ5IGxpYnBxLiAgQWxsCisgICAgICAgZXZlbnRzIGJlZ2luIHdpdGggPGxpdGVy YWw+UEdFVlRfPC9saXRlcmFsPi4KKyAgICAgIDwvcGFyYT4KKyAgICAgPC9saXN0aXRlbT4K KyAgICAgPGxpc3RpdGVtPgorICAgICAgPHBhcmE+CisgICAgICAgPGxpdGVyYWw+ZXZlbnRJ bmZvPC9saXRlcmFsPiAtIEV2ZXJ5IDxsaXRlcmFsPmV2ZW50SWQ8L2xpdGVyYWw+IGhhcyBh IGNvcnJlc3BvbmRpbmcKKyAgICAgICBldmVudCBpbmZvIHN0cnVjdHVyZSwgdGhhdCBjb250 YWlucyBkYXRhIHRvIGFpZCBpbiBwcm9jZXNzaW5nIHRoZSBldmVudC4KKyAgICAgIDwvcGFy YT4KKyAgICAgPC9saXN0aXRlbT4KKyAgICAgPGxpc3RpdGVtPgorICAgICAgPHBhcmE+Cisg ICAgICAgPGxpdGVyYWw+aW5zdGFuY2VEYXRhPC9saXRlcmFsPiAtIFRoZSBpbnN0YW5jZSBk YXRhIGlzIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggYQorICAgICAgIDxzdHJ1Y3RuYW1lPlBH Y29ubjwvc3RydWN0bmFtZT4gb3IgPHN0cnVjdG5hbWU+UEdyZXN1bHQ8L3N0cnVjdG5hbWU+ LiAgVGhlIGRhdGEgaXMKKyAgICAgICBjcmVhdGVkIGFuZCBkZXN0cm95ZWQgYWxvbmcgd2l0 aCB3aXRoIHRoZSBjb25uZWN0aW9uIG9yIHJlc3VsdC4KKyAgICAgICBUeXBpY2FsbHksIGlu c3RhbmNlIGRhdGEgaXMgY3JlYXRlZCBpbiByZXNwb25zZSB0bworICAgICAgIGEgPGxpdGVy YWw+UEdFVlRfUkVHSVNURVI8L2xpdGVyYWw+IGV2ZW50LCBidXQgY2FuIGJlIGNyZWF0ZWQg YXQgYW55IHRpbWUgb3IKKyAgICAgICBub3QgYXQgYWxsLiAgTWFuYWdlbWVudCBvZiBpbnN0 YW5jZSBkYXRhIGlzIGRvbmUgdXNpbmcgdGhlIDxmdW5jdGlvbj5QUWluc3RhbmNlRGF0YTwv ZnVuY3Rpb24+LAorICAgICAgIDxmdW5jdGlvbj5QUXNldEluc3RhbmNlRGF0YTwvZnVuY3Rp b24+LCA8ZnVuY3Rpb24+UFFyZXN1bHRJbnN0YW5jZURhdGE8L2Z1bmN0aW9uPiBhbmQKKyAg ICAgICA8ZnVuY3Rpb24+UFFzZXRSZXN1bHRJbnN0YW5jZURhdGE8L2Z1bmN0aW9uPiBmdW5j dGlvbnMuCisgICAgICA8L3BhcmE+CisgICAgIDwvbGlzdGl0ZW0+CisgICAgPC9pdGVtaXpl ZGxpc3Q+CisgICA8L3BhcmE+CisgCisgCisgICA8c2VjdDIgaWQ9ImxpYnBxLWV2ZW50cy10 eXBlcyI+CisgICAgPHRpdGxlPkV2ZW50IFR5cGVzPC90aXRsZT4KKyAgICAgPHBhcmE+Cisg ICAgICA8dmFyaWFibGVsaXN0PgorICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAgIDx0 ZXJtPjxsaXRlcmFsPlBHRVZUX1JFR0lTVEVSPC9saXRlcmFsPjwvdGVybT4KKyAgICAgICAg PGxpc3RpdGVtPgorICAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhlIHJlZ2lzdGVyIGV2 ZW50IG9jY3VycyB3aGVuIDxmdW5jdGlvbj5QUXJlZ2lzdGVyRXZlbnRQcm9jPC9mdW5jdGlv bj4gaXMKKyAgICAgICAgICBjYWxsZWQuICBJdCBpcyB0aGUgaWRlYWwgdGltZSB0byBpbml0 aWFsaXplIGFueSA8bGl0ZXJhbD5pbnN0YW5jZURhdGE8L2xpdGVyYWw+CisgICAgICAgICAg YW4gZXZlbnQgcHJvY2VkdXJlIG1heSBuZWVkLiAgT25seSBvbmUgcmVnaXN0ZXIgZXZlbnQg d2lsbCBiZSBmaXJlZCBwZXIgY29ubmVjdGlvbi4KKyAgICAgICAgICBJZiB0aGUgZXZlbnQg cHJvY2VkdXJlIGZhaWxzLCB0aGUgcmVnaXN0cmF0aW9uIGlzIGFib3J0ZWQuCisgCisgICAg ICAgICA8c3lub3BzaXM+CisgdHlwZWRlZiBzdHJ1Y3QKKyB7CisgICAgIGNvbnN0IFBHY29u biAqY29ubjsKKyB9IFBHRXZlbnRSZWdpc3Rlcjs8L3N5bm9wc2lzPgorIAorICAgICAgICAg IFdoZW4gYSA8bGl0ZXJhbD5QR0VWVF9SRUdJU1RFUjwvbGl0ZXJhbD4gZXZlbnQgaXMgcmVj ZWl2ZWQsIHRoZSA8cGFyYW1ldGVyPmV2dEluZm88L3BhcmFtZXRlcj4KKyAgICAgICAgICBw b2ludGVyIHNob3VsZCBiZSBjYXN0ZWQgdG8gYSA8c3RydWN0bmFtZT5QR0V2ZW50UmVnaXN0 ZXIqPC9zdHJ1Y3RuYW1lPi4gIFRoaXMgc3RydWN0dXJlCisgICAgICAgICAgY29udGFpbnMg YSA8c3RydWN0bmFtZT5QR2Nvbm48L3N0cnVjdG5hbWU+IHRoYXQgc2hvdWxkIGJlIGluIHRo ZSA8bGl0ZXJhbD5DT05ORUNUSU9OX09LPC9saXRlcmFsPgorICAgICAgICAgIHN0YXR1czsg Z3VhcmFudGVlZCBpZiBvbmUgY2FsbHMgPGZ1bmN0aW9uPlBRcmVnaXN0ZXJFdmVudFByb2M8 L2Z1bmN0aW9uPiByaWdodCBhZnRlciBvYnRhaW5pbmcKKyAgICAgICAgICBhIGdvb2QgPHN0 cnVjdG5hbWU+UEdjb25uPC9zdHJ1Y3RuYW1lPi4gIFRoZSBjb25uZWN0aW9uIGNhbiBiZSB1 c2VkIHRvIGluaXRpYWxpemUgYW55CisgICAgICAgICAgYXBwbGljYXRpb24gc3BlY2lmaWMg bmVlZHM6IGxpa2UgYWxsb2NhdGluZyBzdHJ1Y3R1cmVzIGFzIHRoZSBldmVudCA8bGl0ZXJh bD5pbnN0YW5jZURhdGE8L2xpdGVyYWw+CisgICAgICAgICAgb3IgZXhlY3V0aW5nIFNRTCBz dGF0ZW1lbnRzLgorICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L2xpc3RpdGVtPgorICAg ICAgIDwvdmFybGlzdGVudHJ5PgorIAorICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAg IDx0ZXJtPjxsaXRlcmFsPlBHRVZUX0NPTk5SRVNFVDwvbGl0ZXJhbD48L3Rlcm0+CisgICAg ICAgIDxsaXN0aXRlbT4KKyAgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoZSBjb25uZWN0 aW9uIHJlc2V0IGV2ZW50IGlzIGZpcmVkIGluIHJlc3BvbnNlIHRvIGEgPGZ1bmN0aW9uPlBR cmVzZXQ8L2Z1bmN0aW9uPiBvciA8ZnVuY3Rpb24+UFFyZXNldFBvbGw8L2Z1bmN0aW9uPi4K KyAgICAgICAgICBJbiBib3RoIGNhc2VzLCB0aGUgZXZlbnQgaXMgb25seSBmaXJlZCBpZiB0 aGUgcmVzZXQgd2FzIHN1Y2Nlc3NmdWwuICBJZiB0aGUgZXZlbnQgcHJvY2VkdXJlIGZhaWxz LAorICAgICAgICAgIHRoZSBlbnRpcmUgY29ubmVjdGlvbiByZXNldCB3aWxsIGZhaWw7IHRo ZSA8c3RydWN0bmFtZT5QR2Nvbm48L3N0cnVjdG5hbWU+IGlzIHB1dCBpbnRvCisgICAgICAg ICAgPGxpdGVyYWw+Q09OTkVDVElPTl9CQUQ8L2xpdGVyYWw+IHN0YXR1cyBhbmQgPGZ1bmN0 aW9uPlBRcmVzZXRQb2xsPC9mdW5jdGlvbj4gd2lsbCByZXR1cm4KKyAgICAgICAgICA8bGl0 ZXJhbD5QR1JFU19QT0xMSU5HX0ZBSUxFRDwvbGl0ZXJhbD4uCisgICAgICAgICA8c3lub3Bz aXM+CisgdHlwZWRlZiBzdHJ1Y3QKKyB7CisgICAgIGNvbnN0IFBHY29ubiAqY29ubjsKKyB9 IFBHRXZlbnRSZXNldDs8L3N5bm9wc2lzPgorIAorICAgICAgICAgIFdoZW4gYSA8bGl0ZXJh bD5QR0VWVF9DT05OUkVTRVQ8L2xpdGVyYWw+IGV2ZW50IGlzIHJlY2VpdmVkLCB0aGUgPHBh cmFtZXRlcj5ldnRJbmZvPC9wYXJhbWV0ZXI+CisgICAgICAgICAgcG9pbnRlciBzaG91bGQg YmUgY2FzdGVkIHRvIGEgPHN0cnVjdG5hbWU+UEdFdmVudFJlc2V0Kjwvc3RydWN0bmFtZT4u ICBBbHRob3VnaCB0aGUgY29udGFpbmVkCisgICAgICAgICAgPHN0cnVjdG5hbWU+UEdjb25u PC9zdHJ1Y3RuYW1lPiB3YXMganVzdCByZXNldCwgYWxsIGV2ZW50IGRhdGEgcmVtYWlucyB1 bmNoYW5nZWQuICBUaGlzIGV2ZW50CisgICAgICAgICAgc2hvdWxkIGJlIHVzZWQgdG8gcmVz ZXQvcmVsb2FkL3JlcXVlcnkgYW55IGFzc29jYWl0ZWQgPGxpdGVyYWw+aW5zdGFuY2VEYXRh PC9saXRlcmFsPi4KKyAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9saXN0aXRlbT4KKyAg ICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAKKyAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAg ICA8dGVybT48bGl0ZXJhbD5QR0VWVF9DT05OREVTVFJPWTwvbGl0ZXJhbD48L3Rlcm0+Cisg ICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoZSBjb25u ZWN0aW9uIGRlc3Ryb3kgZXZlbnQgaXMgZmlyZWQgaW4gcmVzcG9uc2UgdG8gYSA8ZnVuY3Rp b24+UFFmaW5pc2g8L2Z1bmN0aW9uPi4KKyAgICAgICAgICBJdCBpcyB0aGUgZXZlbnQgcHJv Y2VkdXJlJ3MgcmVzcG9uc2liaWxpdHkgdG8gcHJvcGVybHkgY2xlYW51cCBpdHMgZXZlbnQg ZGF0YSBhcyBsaWJwcQorICAgICAgICAgIGhhcyBubyBhYmlsaXR5IHRvIG1hbmFnZSB0aGlz IG1lbW9yeS4gIEZhaWx1cmUgdG8gcHJvcGVybHkgY2xlYW51cCB3aWxsIGxlYWQgdG8gbWVt b3J5CisgICAgICAgICAgbGVha3MuCisgICAgICAgICA8c3lub3BzaXM+CisgdHlwZWRlZiBz dHJ1Y3QKKyB7CisgICAgIGNvbnN0IFBHY29ubiAqY29ubjsKKyB9IFBHRXZlbnRDb25uRGVz dHJveTs8L3N5bm9wc2lzPgorIAorICAgICAgICAgIFdoZW4gYSA8bGl0ZXJhbD5QR0VWVF9D T05OREVTVFJPWTwvbGl0ZXJhbD4gZXZlbnQgaXMgcmVjZWl2ZWQsIHRoZSA8cGFyYW1ldGVy PmV2dEluZm88L3BhcmFtZXRlcj4KKyAgICAgICAgICBwb2ludGVyIHNob3VsZCBiZSBjYXN0 ZWQgdG8gYSA8c3RydWN0bmFtZT5QR0V2ZW50Q29ubkRlc3Ryb3kqPC9zdHJ1Y3RuYW1lPi4g IFRoaXMgZXZlbnQgaXMgZmlyZWQKKyAgICAgICAgICBwcmlvciB0byA8ZnVuY3Rpb24+UFFm aW5pc2g8L2Z1bmN0aW9uPiBwZXJmb3JtaW5nIGFueSBjbGVhbnVwLiAgVGhlIHJldHVybiB2 YWx1ZSBvZiB0aGUgZXZlbnQKKyAgICAgICAgICBwcm9jZWR1cmUgaXMgaWdub3JlZCBzaW5j ZSB0aGVyZSBpcyBubyB3YXkgb2YgaW5kaWNhdGluZyBhIGZhaWx1cmUgZnJvbSA8ZnVuY3Rp b24+UFFmaW5pc2g8L2Z1bmN0aW9uPi4KKyAgICAgICAgICBBbHNvLCBhbiBldmVudCBwcm9j ZWR1cmUgZmFpbHVyZSBzaG91bGQgbm90IGFib3J0IHRoZSBwcm9jZXNzIG9mIGNsZWFuaW5n IHVwIHVud2FudGVkIG1lbW9yeS4KKyAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9saXN0 aXRlbT4KKyAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAKKyAgICAgICA8dmFybGlzdGVudHJ5 PgorICAgICAgICA8dGVybT48bGl0ZXJhbD5QR0VWVF9SRVNVTFRDUkVBVEU8L2xpdGVyYWw+ PC90ZXJtPgorICAgICAgICA8bGlzdGl0ZW0+CisgICAgICAgICA8cGFyYT4KKyAgICAgICAg ICBUaGUgcmVzdWx0IGNyZWF0ZSBldmVudCBpcyBmaXJlZCBpbiByZXNwb25zZSB0byBhbnkg ZXhlYyBmdW5jdGlvbiB0aGF0IGdlbmVyYXRlcyBhIHJlc3VsdCwKKyAgICAgICAgICBpbmNs dWRpbmcgPGZ1bmN0aW9uPlBRZ2V0UmVzdWx0PC9mdW5jdGlvbj4uICBUaGlzIGV2ZW50IHdp bGwgb25seSBiZSBmaXJlZCBhZnRlciB0aGUgcmVzdWx0CisgICAgICAgICAgaGFzIGJlZW4g Y3JlYXRlZCBzdWNjZXNzZnVsbHksIHdpdGggYSByZXN1bHQgc3RhdHVzIG9mIGVpdGhlciA8 bGl0ZXJhbD5QR1JFU19DT01NQU5EX09LPC9saXRlcmFsPiwKKyAgICAgICAgICA8bGl0ZXJh bD5QR1JFU19UVVBMRVNfT0s8L2xpdGVyYWw+IG9yIDxsaXRlcmFsPlBHUkVTX0VNUFRZX1FV RVJZPC9saXRlcmFsPi4KKyAgICAgICAgIDxzeW5vcHNpcz4KKyB0eXBlZGVmIHN0cnVjdAor IHsKKyAgICAgY29uc3QgUEdjb25uICpjb25uOworICAgICBjb25zdCBQR3Jlc3VsdCAqcmVz dWx0OworIH0gUEdFdmVudFJlc3VsdENyZWF0ZTs8L3N5bm9wc2lzPgorIAorICAgICAgICAg IFdoZW4gYSA8bGl0ZXJhbD5QR0VWVF9SRVNVTFRDUkVBVEU8L2xpdGVyYWw+IGV2ZW50IGlz IHJlY2VpdmVkLCB0aGUgPHBhcmFtZXRlcj5ldnRJbmZvPC9wYXJhbWV0ZXI+CisgICAgICAg ICAgcG9pbnRlciBzaG91bGQgYmUgY2FzdGVkIHRvIGEgPHN0cnVjdG5hbWU+UEdFdmVudFJl c3VsdENyZWF0ZSo8L3N0cnVjdG5hbWU+LiAgVGhlIDxwYXJhbWV0ZXI+Y29ubjwvcGFyYW1l dGVyPgorICAgICAgICAgIHdhcyB0aGUgY29ubmVjdGlvbiB1c2VkIHRvIGdlbmVyYXRlIHRo ZSByZXN1bHQuICBUaGlzIGlzIHRoZSBpZGVhbCBwbGFjZSB0byBpbml0aWFsaXplCisgICAg ICAgICAgYW55IDxsaXRlcmFsPmluc3RhbmNlRGF0YTwvbGl0ZXJhbD4gdGhhdCBuZWVkcyB0 byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIHJlc3VsdC4gIElmIHRoZSBldmVudCBwcm9jZWR1 cmUgZmFpbHMsCisgICAgICAgICAgdGhlIHJlc3VsdCB3aWxsIGJlIGNsZWFyZWQgYW5kIHRo ZSBmYWlsdXJlIHdpbGwgYmUgcHJvcGFnYXRlZC4gIERvIG5vdCBhdHRlbXB0IHRvCisgICAg ICAgICAgY2xlYXIgdGhlIHJlc3VsdCBvYmplY3QgY29udGFpbmVkIGluIHRoZSA8c3RydWN0 bmFtZT5QR0V2ZW50UmVzdWx0Q3JlYXRlPC9zdHJ1Y3RuYW1lPiBzdHJ1Y3R1cmUuCisgICAg ICAgICA8L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+CisgICAgICAgPC92YXJsaXN0ZW50 cnk+CisgCisgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgPHRlcm0+PGxpdGVyYWw+ UEdFVlRfUkVTVUxUQ09QWTwvbGl0ZXJhbD48L3Rlcm0+CisgICAgICAgIDxsaXN0aXRlbT4K KyAgICAgICAgIDxwYXJhPgorICAgICAgICAgIFRoZSByZXN1bHQgY29weSBldmVudCBpcyBm aXJlZCBpbiByZXNwb25zZSB0byA8ZnVuY3Rpb24+UFFjb3B5UmVzdWx0PC9mdW5jdGlvbj4u CisgICAgICAgICAgVGhpcyBldmVudCB3aWxsIG9ubHkgYmUgZmlyZWQgYWZ0ZXIgdGhlIGNv cHkgaXMgY29tcGxldGUuCisgICAgICAgICA8c3lub3BzaXM+CisgdHlwZWRlZiBzdHJ1Y3QK KyB7CisgICAgIGNvbnN0IFBHcmVzdWx0ICpzcmM7CisgICAgIFBHcmVzdWx0ICpkZXN0Owor IH0gUEdFdmVudFJlc3VsdENvcHk7PC9zeW5vcHNpcz4KKyAKKyAgICAgICAgICBXaGVuIGEg PGxpdGVyYWw+UEdFVlRfUkVTVUxUQ09QWTwvbGl0ZXJhbD4gZXZlbnQgaXMgcmVjZWl2ZWQs IHRoZSA8cGFyYW1ldGVyPmV2dEluZm88L3BhcmFtZXRlcj4KKyAgICAgICAgICBwb2ludGVy IHNob3VsZCBiZSBjYXN0ZWQgdG8gYSA8c3RydWN0bmFtZT5QR0V2ZW50UmVzdWx0Q29weSo8 L3N0cnVjdG5hbWU+LiAgVGhlIDxwYXJhbWV0ZXI+c3JjPC9wYXJhbWV0ZXI+CisgICAgICAg ICAgcmVzdWx0IGlzIHdoYXQgaXMgYmVpbmcgY29waWVkIHdoaWxlIHRoZSA8cGFyYW1ldGVy PmRlc3Q8L3BhcmFtZXRlcj4gcmVzdWx0IGlzIHRoZSBjb3B5IGRlc3RpbmF0aW9uLgorICAg ICAgICAgIFRoaXMgZXZlbnQgY2FuIGJlIHVzZWQgdG8gcHJvdmlkZSBhIGRlZXAgY29weSBv ZiA8bGl0ZXJhbD5pbnN0YW5jZURhdGE8L2xpdGVyYWw+LCBzaW5jZQorICAgICAgICAgIDxs aXRlcmFsPlBRY29weVJlc3VsdDwvbGl0ZXJhbD4gY2Fubm90IGRvIHRoYXQuICBJZiB0aGUg ZXZlbnQgcHJvY2VkdXJlIGZhaWxzLCB0aGUgZW50aXJlIGNvcHkgb3BlcmF0aW9uCisgICAg ICAgICAgd2lsbCBmYWlsIGFuZCB0aGUgPHBhcmFtZXRlcj5kZXN0PC9wYXJhbWV0ZXI+IHJl c3VsdCB3aWxsIGJlIGNsZWFyZWQuCisgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbGlz dGl0ZW0+CisgICAgICAgPC92YXJsaXN0ZW50cnk+CisgCisgICAgICAgPHZhcmxpc3RlbnRy eT4KKyAgICAgICAgPHRlcm0+PGxpdGVyYWw+UEdFVlRfUkVTVUxUREVTVFJPWTwvbGl0ZXJh bD48L3Rlcm0+CisgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgIDxwYXJhPgorICAgICAg ICAgIFRoZSByZXN1bHQgZGVzdHJveSBldmVudCBpcyBmaXJlZCBpbiByZXNwb25zZSB0byBh IDxmdW5jdGlvbj5QUWNsZWFyPC9mdW5jdGlvbj4uCisgICAgICAgICAgSXQgaXMgdGhlIGV2 ZW50IHByb2NlZHVyZSdzIHJlc3BvbnNpYmlsaXR5IHRvIHByb3Blcmx5IGNsZWFudXAgaXRz IGV2ZW50IGRhdGEgYXMgbGlicHEKKyAgICAgICAgICBoYXMgbm8gYWJpbGl0eSB0byBtYW5h Z2UgdGhpcyBtZW1vcnkuICBGYWlsdXJlIHRvIHByb3Blcmx5IGNsZWFudXAgd2lsbCBsZWFk IHRvIG1lbW9yeQorICAgICAgICAgIGxlYWtzLgorICAgICAgICAgPHN5bm9wc2lzPgorIHR5 cGVkZWYgc3RydWN0CisgeworICAgICBjb25zdCBQR3Jlc3VsdCAqcmVzdWx0OworIH0gUEdF dmVudFJlc3VsdERlc3Ryb3k7PC9zeW5vcHNpcz4KKyAKKyAgICAgICAgICBXaGVuIGEgPGxp dGVyYWw+UEdFVlRfUkVTVUxUREVTVFJPWTwvbGl0ZXJhbD4gZXZlbnQgaXMgcmVjZWl2ZWQs IHRoZSA8cGFyYW1ldGVyPmV2dEluZm88L3BhcmFtZXRlcj4KKyAgICAgICAgICBwb2ludGVy IHNob3VsZCBiZSBjYXN0ZWQgdG8gYSA8c3RydWN0bmFtZT5QR0V2ZW50UmVzdWx0RGVzdHJv eSo8L3N0cnVjdG5hbWU+LiAgVGhpcyBldmVudCBpcyBmaXJlZAorICAgICAgICAgIHByaW9y IHRvIDxmdW5jdGlvbj5QUWNsZWFyPC9mdW5jdGlvbj4gcGVyZm9ybWluZyBhbnkgY2xlYW51 cC4gIFRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGV2ZW50CisgICAgICAgICAgcHJvY2VkdXJl IGlzIGlnbm9yZWQgc2luY2UgdGhlcmUgaXMgbm8gd2F5IG9mIGluZGljYXRpbmcgYSBmYWls dXJlIGZyb20gPGZ1bmN0aW9uPlBRY2xlYXI8L2Z1bmN0aW9uPi4KKyAgICAgICAgICBBbHNv LCBhbiBldmVudCBwcm9jZWR1cmUgZmFpbHVyZSBzaG91bGQgbm90IGFib3J0IHRoZSBwcm9j ZXNzIG9mIGNsZWFuaW5nIHVwIHVud2FudGVkIG1lbW9yeS4KKyAgICAgICAgIDwvcGFyYT4K KyAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICAgIDwv dmFyaWFibGVsaXN0PgorICAgIDwvcGFyYT4KKyAgIDwvc2VjdDI+CisgCisgICA8c2VjdDIg aWQ9ImxpYnBxLWV2ZW50cy1wcm9jIj4KKyAgICA8dGl0bGU+RXZlbnQgQ2FsbGJhY2sgUHJv Y2VkdXJlPC90aXRsZT4KKyAgICA8dmFyaWFibGVsaXN0PgorICAgICA8dmFybGlzdGVudHJ5 PgorICAgICAgPHRlcm0+CisgICAgICAgPGZ1bmN0aW9uPlBHRXZlbnRQcm9jPC9mdW5jdGlv bj4KKyAgICAgICA8aW5kZXh0ZXJtPgorICAgICAgICA8cHJpbWFyeT5QR0V2ZW50UHJvYzwv cHJpbWFyeT4KKyAgICAgICA8L2luZGV4dGVybT4KKyAgICAgIDwvdGVybT4KKyAKKyAgICAg IDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgVXNlciBjYWxsYmFjayBmdW5j dGlvbiB0aGF0IHJlY2VpdmVzIGV2ZW50cyBmcm9tIGxpYnBxLiBUaGUgYWRkcmVzcyBvZiB0 aGUgZXZlbnQKKyAgICAgICAgcHJvYyBpcyBhbHNvIHVzZWQgdG8gbG9va3VwIHRoZSA8bGl0 ZXJhbD5pbnN0YW5jZURhdGE8L2xpdGVyYWw+CisgICAgICAgIGFzc29jaWF0ZWQgd2l0aCBh IDxzdHJ1Y3RuYW1lPlBHY29ubjwvc3RydWN0bmFtZT4gb3IgPHN0cnVjdG5hbWU+UEdyZXN1 bHQ8L3N0cnVjdG5hbWU+LgorICAgICAgICA8c3lub3BzaXM+dHlwZWRlZiBpbnQgKCpQR0V2 ZW50UHJvYykoUEdFdmVudElkIGV2dElkLCB2b2lkICpldnRJbmZvLCB2b2lkICpwYXNzVGhy b3VnaCk7PC9zeW5vcHNpcz4KKyAgICAgICA8L3BhcmE+CisgCisgICAgICAgPHBhcmE+Cisg ICAgICAgIFRoZSA8cGFyYW1ldGVyPmV2dElkPC9wYXJhbWV0ZXI+IGluaWRjYXRlcyB3aGlj aCA8bGl0ZXJhbD5QR0VWVF88L2xpdGVyYWw+IGV2ZW50IG9jY3VycmVkLgorICAgICAgICBU aGUgPHBhcmFtZXRlcj5ldnRJbmZvPC9wYXJhbWV0ZXI+IG11c3QgYmUgY2FzdGVkIHRvIHRo ZSBhcHByb3ByaWF0ZSBzdHJ1Y3R1cmU6IGV4LiBQR0VWVF9SRUdJU1RFUgorICAgICAgICBt ZWFucyBjYXN0IGV2dEluZm8gdG8gYSBQR0V2ZW50UmVnaXN0ZXIgcG9pbnRlci4gIFRoZSA8 cGFyYW1ldGVyPnBhc3NUaHJvdWdoPC9wYXJhbWV0ZXI+IGlzIHRoZQorICAgICAgICBwb2lu dGVyIHByb3ZpZGVkIHRvIHRoZSA8ZnVuY3Rpb24+UFFyZWdpc3RlckV2ZW50UHJvYzwvZnVu Y3Rpb24+LCB3aGljaCBjYW4gYmUgTlVMTC4gIFRoZSBmdW5jdGlvbgorICAgICAgICBzaG91 bGQgcmV0dXJuIGEgbm9uLXplcm8gdmFsdWUgaWYgaXQgc3VjY2VlZHMgYW5kIHplcm8gaWYg aXQgZmFpbHMuCisgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92 YXJsaXN0ZW50cnk+CisgICAgPC92YXJpYWJsZWxpc3Q+CisgICA8L3NlY3QyPgorIAorICAg PHNlY3QyIGlkPSJsaWJwcS1ldmVudHMtZnVuY3MiPgorICAgIDx0aXRsZT5FdmVudCBGdW5j dGlvbnM8L3RpdGxlPgorICAgICA8dmFyaWFibGVsaXN0PgorICAgICA8dmFybGlzdGVudHJ5 PgorICAgICAgPHRlcm0+CisgICAgICAgPGZ1bmN0aW9uPlBRcmVnaXN0ZXJFdmVudFByb2M8 L2Z1bmN0aW9uPgorICAgICAgIDxpbmRleHRlcm0+CisgICAgICAgIDxwcmltYXJ5PlBRcmVn aXN0ZXJFdmVudFByb2M8L3ByaW1hcnk+CisgICAgICAgPC9pbmRleHRlcm0+CisgICAgICA8 L3Rlcm0+CisgCisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAgIFJl Z2lzdGVycyBhbiBldmVudCBjYWxsYmFjayBwcm9jZWR1cmUgd2l0aCBsaWJwcS4KKyAgICAg ICAgPHN5bm9wc2lzPmludCBQUXJlZ2lzdGVyRXZlbnRQcm9jKFBHY29ubiAqY29ubiwgUEdF dmVudFByb2MgcHJvYywgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqcGFzc1Rocm91Z2gpOzwv c3lub3BzaXM+CisgICAgICAgPC9wYXJhPgorIAorICAgICAgIDxwYXJhPgorICAgICAgICBS ZWdpc3RyYXRpb24gbXVzdCBiZSBjYWxsZWQgb25jZSBvbiBldmVyeSBQR2Nvbm4geW91IHdh bnQgdG8gcmVjZWl2ZSBldmVudHMgYWJvdXQuCisgICAgICAgIFRoZXJlIGlzIG5vIGxpbWl0 IG9uIHRoZSBudW1iZXIgb2YgZXZlbnQgcHJvY2VkdXJlcyB0aGF0IGNhbiBiZSByZWdpc3Rl cmVkIHdpdGggYSBjb25uZWN0aW9uLgorICAgICAgICBUaGUgZnVuY3Rpb24gcmV0dXJucyBh IG5vbi16ZXJvIHZhbHVlIGlmIGl0IHN1Y2NlZWRzIGFuZCB6ZXJvIGlmIGl0IGZhaWxzLgor ICAgICAgIDwvcGFyYT4KKyAKKyAgICAgICA8cGFyYT4KKyAgICAgICAgVGhlIDxwYXJhbWV0 ZXI+cHJvYzwvcGFyYW1ldGVyPiBhcmd1bWVudCB3aWxsIGJlIGNhbGxlZCB3aGVuIGEgbGli cHEgZXZlbnQgaXMgZmlyZWQuICBJdHMKKyAgICAgICAgbWVtb3J5IGFkZHJlc3MgaXMgYWxz byB1c2VkIHRvIGxvb2t1cCA8bGl0ZXJhbD5pbnN0YW5jZURhdGE8L2xpdGVyYWw+LgorICAg ICAgICBUaGUgPHBhcmFtZXRlcj5uYW1lPC9wYXJhbWV0ZXI+IGFyZ3VtZW50IGlzIHVzZWQg dG8gY29udHJ1Y3QgZXJyb3IgbWVzc2FnZXMgdG8gYWlkCisgICAgICAgIGluIGRlYnVnZ2lu Zy4gIFRoaXMgdmFsdWUgY2Fubm90IGJlIE5VTEwgb3IgYSB6ZXJvLWxlbmd0aCBzdHJpbmcu CisgICAgICAgIFRoZSA8cGFyYW1ldGVyPnBhc3NUaHJvdWdoPC9wYXJhbWV0ZXI+IHBvaW50 ZXIgaXMgcGFzc2VkIHRvIHRoZSA8cGFyYW1ldGVyPnByb2M8L3BhcmFtZXRlcj4gd2hlbmV2 ZXIKKyAgICAgICAgYW4gZXZlbnQgb2NjdXJzLiBUaGlzIGFyZ3VtZW50IGNhbiBiZSBOVUxM LgorICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVu dHJ5PgorIAorICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgPHRlcm0+CisgICAgICAgPGZ1 bmN0aW9uPlBRaW5zdGFuY2VEYXRhPC9mdW5jdGlvbj4KKyAgICAgICA8aW5kZXh0ZXJtPgor ICAgICAgICA8cHJpbWFyeT5QUWluc3RhbmNlRGF0YTwvcHJpbWFyeT4KKyAgICAgICA8L2lu ZGV4dGVybT4KKyAgICAgIDwvdGVybT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFy YT4KKyAgICAgICAgUmV0dXJucyB0aGUgY29ubidzIGluc3RhbmNlRGF0YSBhc3NvY2lhdGVk IHdpdGggcHJvYy4KKyAgICAgICAgPHN5bm9wc2lzPnZvaWQgKlBRaW5zdGFuY2VEYXRhKGNv bnN0IFBHY29ubiAqY29ubiwgUEdFdmVudFByb2MgcHJvYyk7PC9zeW5vcHNpcz4KKyAgICAg ICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAK KyAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgIDx0ZXJtPgorICAgICAgIDxmdW5jdGlvbj5Q UXNldEluc3RhbmNlRGF0YTwvZnVuY3Rpb24+CisgICAgICAgPGluZGV4dGVybT4KKyAgICAg ICAgPHByaW1hcnk+UFFzZXRJbnN0YW5jZURhdGE8L3ByaW1hcnk+CisgICAgICAgPC9pbmRl eHRlcm0+CisgICAgICA8L3Rlcm0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+ CisgICAgICAgIFNldHMgdGhlIGNvbm4ncyBpbnN0YW5jZURhdGEgZm9yIHByb2MgdG8gZGF0 YS4gIFRoaXMgcmV1dHJucyBub24temVybyBmb3IKKyAgICAgICAgc3VjY2VlcyBhbmQgemVy byBmb3IgZmFpbHVyZS4KKyAgICAgICAgPHN5bm9wc2lzPmludCBQUXNldEluc3RhbmNlRGF0 YShQR2Nvbm4gKmNvbm4sIFBHRXZlbnRQcm9jIHByb2MsIHZvaWQgKmRhdGEpOzwvc3lub3Bz aXM+CisgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0 ZW50cnk+CisgCisgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICA8dGVybT4KKyAgICAgICA8 ZnVuY3Rpb24+UFFyZXN1bHRJbnN0YW5jZURhdGE8L2Z1bmN0aW9uPgorICAgICAgIDxpbmRl eHRlcm0+CisgICAgICAgIDxwcmltYXJ5PlBRcmVzdWx0SW5zdGFuY2VEYXRhPC9wcmltYXJ5 PgorICAgICAgIDwvaW5kZXh0ZXJtPgorICAgICAgPC90ZXJtPgorICAgICAgPGxpc3RpdGVt PgorICAgICAgIDxwYXJhPgorICAgICAgICBSZXR1cm5zIHRoZSByZXN1bHQncyBpbnN0YW5j ZURhdGEgYXNzb2NpYXRlZCBieSBwcm9jLgorICAgICAgICA8c3lub3BzaXM+dm9pZCAqUFFy ZXN1bHRJbnN0YW5jZURhdGEoY29uc3QgUEdyZXN1bHQgKnJlcywgUEdFdmVudFByb2MgcHJv Yyk7PC9zeW5vcHNpcz4KKyAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAg ICA8L3Zhcmxpc3RlbnRyeT4KKyAKKyAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgIDx0ZXJt PgorICAgICAgIDxmdW5jdGlvbj5QUXJlc3VsdFNldEluc3RhbmNlRGF0YTwvZnVuY3Rpb24+ CisgICAgICAgPGluZGV4dGVybT4KKyAgICAgICAgPHByaW1hcnk+UFFyZXN1bHRTZXRJbnN0 YW5jZURhdGE8L3ByaW1hcnk+CisgICAgICAgPC9pbmRleHRlcm0+CisgICAgICA8L3Rlcm0+ CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAgIFNldHMgdGhlIHJl c3VsdCdzIGluc3RhbmNlRGF0YSBmb3IgcHJvYyB0byBkYXRhLiAgVGhpcyByZXV0cm5zIG5v bi16ZXJvIGZvcgorICAgICAgICBzdWNjZWVzIGFuZCB6ZXJvIGZvciBmYWlsdXJlLgorICAg ICAgICA8c3lub3BzaXM+aW50IFBRcmVzdWx0U2V0SW5zdGFuY2VEYXRhKFBHcmVzdWx0ICpy ZXMsIFBHRXZlbnRQcm9jIHByb2MsIHZvaWQgKmRhdGEpOzwvc3lub3BzaXM+CisgICAgICAg PC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50cnk+CisgICAg PC92YXJpYWJsZWxpc3Q+CisgICA8L3NlY3QyPgorIAorICAgPHNlY3QyIGlkPSJsaWJwcS1l dmVudHMtZXhhbXBsZSI+CisgICAgPHRpdGxlPkV2ZW50IEV4YW1wbGU8L3RpdGxlPgorICAg IDxwcm9ncmFtbGlzdGluZz4KKyAvKiByZXF1aXJlZCBoZWFkZXIgZm9yIGxpYnBxIGV2ZW50 cyAobm90ZTogaW5jbHVkZXMgbGlicHEtZmUuaCkqLworICNpbmNsdWRlICZsdDtsaWJwcS1l dmVudHMuaCZndDsKKyAKKyAvKiBUaGUgaW5zdGFuY2VEYXRhICovCisgdHlwZWRlZiBzdHJ1 Y3QKKyB7CisgICAgIGludCBuOworICAgICBjaGFyICpzdHI7CisgfSBteWRhdGE7CisgCisg LyogUEdFdmVudFByb2MgKi8KKyBpbnQgbXlFdmVudFByb2MoUEdFdmVudElkIGV2dElkLCB2 b2lkICpldnRJbmZvLCB2b2lkICpwYXNzVGhyb3VnaCk7CisgCisgaW50IG1haW4odm9pZCkK KyB7CisgICAgIG15ZGF0YSAqZGF0YTsKKyAgICAgUEdyZXN1bHQgKnJlczsKKyAgICAgUEdj b25uICpjb25uID0gUFFjb25uZWN0ZGIoImRibmFtZSA9IHBvc3RncmVzIik7CisgCisgICAg IGlmIChQUXN0YXR1cyhjb25uKSAhPSBDT05ORUNUSU9OX09LKQorICAgICB7CisgICAgICAg ICBmcHJpbnRmKHN0ZGVyciwgIkNvbm5lY3Rpb24gdG8gZGF0YWJhc2UgZmFpbGVkOiAlcyIs CisgICAgICAgICAgICAgUFFlcnJvck1lc3NhZ2UoY29ubikpOworICAgICAgICAgUFFmaW5p c2goY29ubik7CisgICAgICAgICByZXR1cm4gMTsKKyAgICAgfQorIAorICAgICAvKiBjYWxs ZWQgb25jZSBvbiBhbnkgY29ubmVjdGlvbiB0aGF0IHNob3VsZCByZWNlaXZlIGV2ZW50cy4K KyAgICAgICogU2VuZHMgYSBQR0VWVF9SRUdJU1RFUiB0byBteUV2ZW50UHJvYy4KKyAgICAg ICovCisgICAgIGlmICghUFFyZWdpc3RlckV2ZW50UHJvYyhjb25uLCBteUV2ZW50UHJvYywg Im15ZGF0YV9wcm9jIiwgTlVMTCkpCisgICAgIHsKKyAgICAgICAgIGZwcmludGYoc3RkZXJy LCAiQ2Fubm90IHJlZ2lzdGVyIFBHRXZlbnRQcm9jXG4iKTsKKyAgICAgICAgIFBRZmluaXNo KGNvbm4pOworICAgICAgICAgcmV0dXJuIDE7CisgICAgIH0KKyAKKyAgICAgLyogY29ubiBp bnN0YW5jZURhdGEgaXMgYXZhaWxhYmxlICovCisgICAgIGRhdGEgPSBQUWluc3RhbmNlRGF0 YShjb25uLCBteUV2ZW50UHJvYyk7CisgCisgICAgIC8qIFNlbmRzIGEgUEdFVlRfUkVTVUxU Q1JFQVRFIHRvIG15RXZlbnRQcm9jICovCisgICAgIHJlcyA9IFBRZXhlYyhjb25uLCAiU0VM RUNUIDEgKyAxIik7CisgCisgICAgIC8qIHJlc3VsdCBpbnN0YW5jZURhdGEgaXMgYXZhaWxh YmxlICovCisgICAgIGRhdGEgPSBQUXJlc3VsdEluc3RhbmNlRGF0YShyZXMsIG15RXZlbnRQ cm9jKTsKKyAKKyAgICAgLyogSWYgUEdfQ09QWVJFU19FVkVOVFMgaXMgdXNlZCwgc2VuZHMg YSBQR0VWVF9SRVNVTFRDT1BZIHRvIG15RXZlbnRQcm9jICovCisgICAgIHJlc19jb3B5ID0g UFFjb3B5UmVzdWx0KHJlcywgUEdfQ09QWVJFU19UVVBMRVMgfCBQR19DT1BZUkVTX0VWRU5U Uyk7CisgCisgICAgIC8qIHJlc3VsdCBpbnN0YW5jZURhdGEgaXMgYXZhaWxhYmxlIGlmIFBH X0NPUFlSRVNfRVZFTlRTIHdhcworICAgICAgKiB1c2VkIGR1cmluZyB0aGUgUFFjb3B5UmVz dWx0IGNhbGwuCisgICAgICAqLworICAgICBkYXRhID0gUFFyZXN1bHRJbnN0YW5jZURhdGEo cmVzX2NvcHksIG15RXZlbnRQcm9jKTsKKyAKKyAgICAgLyogQm90aCBjbGVhcnMgc2VuZCBh IFBHRVZUX1JFU1VMVERFU1RPUlkgdG8gbXlFdmVudFByb2MgKi8KKyAgICAgUFFjbGVhcihy ZXMpOworICAgICBQUWNsZWFyKHJlc19jb3B5KTsKKyAKKyAgICAgLyogU2VuZHMgYSBQR0VW VF9DT05OREVTVFJPWSB0byBteUV2ZW50UHJvYyAqLworICAgICBQUWZpbmlzaChjb25uKTsK KyAKKyAgICAgcmV0dXJuIDA7CisgfQorIAorIGludCBteUV2ZW50UHJvYyhQR0V2ZW50SWQg ZXZ0SWQsIHZvaWQgKmV2dEluZm8sIHZvaWQgKnBhc3NUaHJvdWdoKQorIHsKKyAgICAgc3dp dGNoIChldnRJZCkKKyAgICAgeworICAgICAgICAgY2FzZSBQR0VWVF9SRUdJU1RFUjoKKyAg ICAgICAgIHsKKyAgICAgICAgICAgICBQR0V2ZW50UmVnaXN0ZXIgKmUgPSAoUEdFdmVudFJl Z2lzdGVyICopZXZ0SW5mbzsKKyAgICAgICAgICAgICBteWRhdGEgKmRhdGEgPSBnZXRfbXlk YXRhKGUtPmNvbm4pOworIAorICAgICAgICAgICAgIC8qIGFzc29jaWF0ZSBhcHAgc3BlY2lm aWMgZGF0YSB3aXRoIGNvbm5lY3Rpb24gKi8KKyAgICAgICAgICAgICBQUXNldEluc3RhbmNl RGF0YShlLT5jb25uLCBteUV2ZW50UHJvYywgZGF0YSk7CisgICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgICB9CisgCisgICAgICAgICBjYXNlIFBHRVZUX0NPTk5SRVNFVDoKKyAgICAg ICAgIHsKKyAgICAgICAgICAgICBQR0V2ZW50Q29ublJlc2V0ICplID0gKFBHRXZlbnRDb25u UmVzZXQgKilldnRJbmZvOworICAgICAgICAgICAgIG15ZGF0YSAqZGF0YSA9IFBRaW5zdGFu Y2VEYXRhKGUtPmNvbm4sIG15RXZlbnRQcm9jKTsKKyAgICAgICAgICAgICBpZiAoZGF0YSkK KyAgICAgICAgICAgICAgIG1lbXNldChkYXRhLCAwLCBzaXplb2YobXlkYXRhKSk7CisgICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CisgCisgICAgICAgICBjYXNlIFBHRVZUX0NP Tk5ERVNUUk9ZOgorICAgICAgICAgeworICAgICAgICAgICAgIFBHRXZlbnRDb25uRGVzdHJv eSAqZSA9IChQR0V2ZW50Q29ubkRlc3Ryb3kgKilldnRJbmZvOworICAgICAgICAgICAgIG15 ZGF0YSAqZGF0YSA9IFBRaW5zdGFuY2VEYXRhKGUtPmNvbm4sIG15RXZlbnRQcm9jKTsKKyAK KyAgICAgICAgICAgICAvKiBmcmVlIGluc3RhbmNlIGRhdGEgYmVjYXVzZSB0aGUgY29ubiBp cyBiZWluZyBkZXN0cm95ZWQgKi8KKyAgICAgICAgICAgICBpZiAoZGF0YSkKKyAgICAgICAg ICAgICAgIGZyZWVfbXlkYXRhKGRhdGEpOworICAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgfQorIAorICAgICAgICAgY2FzZSBQR0VWVF9SRVNVTFRDUkVBVEU6CisgICAgICAgICB7 CisgICAgICAgICAgICAgUEdFdmVudFJlc3VsdENyZWF0ZSAqZSA9IChQR0V2ZW50UmVzdWx0 Q3JlYXRlICopZXZ0SW5mbzsKKyAgICAgICAgICAgICBteWRhdGEgKmNvbm5fZGF0YSA9IFBR aW5zdGFuY2VEYXRhKGUtPmNvbm4sIG15RXZlbnRQcm9jKTsKKyAgICAgICAgICAgICBteWRh dGEgKnJlc19kYXRhID0gZHVwX215ZGF0YShjb25uX2RhdGEpOworIAorICAgICAgICAgICAg IC8qIGFzc29jaWF0ZSBhcHAgc3BlY2lmaWMgZGF0YSB3aXRoIHJlc3VsdCAoY29weSBpdCBm cm9tIGNvbm4pICovCisgICAgICAgICAgICAgUFFzZXRSZXN1bHRJbnN0YW5jZURhdGEoZS0+ cmVzdWx0LCBteUV2ZW50UHJvYywgcmVzX2RhdGEpOworICAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICAgfQorIAorICAgICAgICAgY2FzZSBQR0VWVF9SRVNVTFRDT1BZOgorICAgICAg ICAgeworICAgICAgICAgICAgIFBHRXZlbnRSZXN1bHRDb3B5ICplID0gKFBHRXZlbnRSZXN1 bHRDb3B5ICopZXZ0SW5mbzsKKyAgICAgICAgICAgICBteWRhdGEgKnNyY19kYXRhID0gUFFy ZXN1bHRJbnN0YW5jZURhdGEoZS0+c3JjLCBteUV2ZW50UHJvYyk7CisgICAgICAgICAgICAg bXlkYXRhICpkZXN0X2RhdGEgPSBkdXBfbXlkYXRhKHNyY19kYXRhKTsKKyAKKyAgICAgICAg ICAgICAvKiBhc3NvY2lhdGUgYXBwIHNwZWNpZmljIGRhdGEgd2l0aCByZXN1bHQgKGNvcHkg aXQgZnJvbSBhIHJlc3VsdCkgKi8KKyAgICAgICAgICAgICBQUXNldFJlc3VsdEluc3RhbmNl RGF0YShlLT5kZXN0LCBteUV2ZW50UHJvYywgZGVzdF9kYXRhKTsKKyAgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgIH0KKyAKKyAgICAgICAgIGNhc2UgUEdFVlRfUkVTVUxUREVTVFJP WToKKyAgICAgICAgIHsKKyAgICAgICAgICAgICBQR0V2ZW50UmVzdWx0RGVzdHJveSAqZSA9 IChQR0V2ZW50UmVzdWx0RGVzdHJveSAqKWV2dEluZm87CisgICAgICAgICAgICAgbXlkYXRh ICpkYXRhID0gUFFyZXN1bHRJbnN0YW5jZURhdGEoZS0+cmVzdWx0LCBteUV2ZW50UHJvYyk7 CisgCisgICAgICAgICAgICAgLyogZnJlZSBpbnN0YW5jZSBkYXRhIGJlY2F1c2UgdGhlIHJl c3VsdCBpcyBiZWluZyBkZXN0cm95ZWQgKi8KKyAgICAgICAgICAgICBpZiggZGF0YSkKKyAg ICAgICAgICAgICAgIGZyZWVfbXlkYXRhKGRhdGEpOworICAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICAgfQorIAorICAgICAgICAgLyogdW5rbm93biBldmVudCBpZCwganVzdCByZXR1 cm4gVFJVRS4gKi8KKyAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgYnJlYWs7Cisg ICAgIH0KKyAKKyAgICAgcmV0dXJuIFRSVUU7IC8qIGV2ZW50IHByb2Nlc3Npbmcgc3VjY2Vl ZGVkICovCisgfSAgPC9wcm9ncmFtbGlzdGluZz4KKyAgIDwvc2VjdDI+CisgIDwvc2VjdDE+ CisgCiAgIDxzZWN0MSBpZD0ibGlicHEtbWlzYyI+CiAgICA8dGl0bGU+TWlzY2VsbGFuZW91 cyBGdW5jdGlvbnM8L3RpdGxlPgogIAogICAgPHBhcmE+CiAgICAgQXMgYWx3YXlzLCB0aGVy ZSBhcmUgc29tZSBmdW5jdGlvbnMgdGhhdCBqdXN0IGRvbid0IGZpdCBhbnl3aGVyZS4KICAg IDwvcGFyYT4KSW5kZXg6IHNyYy9pbnRlcmZhY2VzL2xpYnBxL01ha2VmaWxlCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KUkNTIGZpbGU6IC9wcm9qZWN0cy9jdnNyb290L3Bnc3FsL3NyYy9pbnRlcmZhY2Vz L2xpYnBxL01ha2VmaWxlLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE2NgpkaWZmIC1DNiAt cjEuMTY2IE1ha2VmaWxlCioqKiBzcmMvaW50ZXJmYWNlcy9saWJwcS9NYWtlZmlsZQkxNiBB cHIgMjAwOCAxNDoxOTo1NiAtMDAwMAkxLjE2NgotLS0gc3JjL2ludGVyZmFjZXMvbGlicHEv TWFrZWZpbGUJMTcgU2VwIDIwMDggMDM6NTQ6MjAgLTAwMDAKKioqKioqKioqKioqKioqCioq KiAyOSw0MSAqKioqCiAgIyB0aGUgb2JqZWN0IGZpbGVzIGZyb20gbGlicGdwb3J0LCB0aGlz IHdvdWxkIG5vdCBiZSB0cnVlIG9uIGFsbAogICMgcGxhdGZvcm1zLgogIExJQlMgOj0gJChM SUJTOi1scGdwb3J0PSkKICAKICBPQkpTPQlmZS1hdXRoLm8gZmUtY29ubmVjdC5vIGZlLWV4 ZWMubyBmZS1taXNjLm8gZmUtcHJpbnQubyBmZS1sb2JqLm8gXAogIAlmZS1wcm90b2NvbDIu byBmZS1wcm90b2NvbDMubyBwcWV4cGJ1ZmZlci5vIHBxc2lnbmFsLm8gZmUtc2VjdXJlLm8g XAohIAltZDUubyBpcC5vIHdjaGFyLm8gZW5jbmFtZXMubyBub2Jsb2NrLm8gcGdzdHJjYXNl Y21wLm8gdGhyZWFkLm8gXAogIAkkKGZpbHRlciBjcnlwdC5vIGdldGFkZHJpbmZvLm8gaW5l dF9hdG9uLm8gb3Blbi5vIHNucHJpbnRmLm8gc3RyZXJyb3IubyBzdHJsY3B5Lm8gd2luMzJl cnJvci5vLCAkKExJQk9CSlMpKQogIAogIGlmZXEgKCQoUE9SVE5BTUUpLCBjeWd3aW4pCiAg b3ZlcnJpZGUgc2hsaWIgPSBjeWckKE5BTUUpJChETFNVRkZJWCkKICBlbmRpZgogIAotLS0g MjksNDEgLS0tLQogICMgdGhlIG9iamVjdCBmaWxlcyBmcm9tIGxpYnBncG9ydCwgdGhpcyB3 b3VsZCBub3QgYmUgdHJ1ZSBvbiBhbGwKICAjIHBsYXRmb3Jtcy4KICBMSUJTIDo9ICQoTElC UzotbHBncG9ydD0pCiAgCiAgT0JKUz0JZmUtYXV0aC5vIGZlLWNvbm5lY3QubyBmZS1leGVj Lm8gZmUtbWlzYy5vIGZlLXByaW50Lm8gZmUtbG9iai5vIFwKICAJZmUtcHJvdG9jb2wyLm8g ZmUtcHJvdG9jb2wzLm8gcHFleHBidWZmZXIubyBwcXNpZ25hbC5vIGZlLXNlY3VyZS5vIFwK ISAJbWQ1Lm8gaXAubyB3Y2hhci5vIGVuY25hbWVzLm8gbm9ibG9jay5vIHBnc3RyY2FzZWNt cC5vIHRocmVhZC5vIGxpYnBxLWV2ZW50cy5vIFwKICAJJChmaWx0ZXIgY3J5cHQubyBnZXRh ZGRyaW5mby5vIGluZXRfYXRvbi5vIG9wZW4ubyBzbnByaW50Zi5vIHN0cmVycm9yLm8gc3Ry bGNweS5vIHdpbjMyZXJyb3IubywgJChMSUJPQkpTKSkKICAKICBpZmVxICgkKFBPUlROQU1F KSwgY3lnd2luKQogIG92ZXJyaWRlIHNobGliID0gY3lnJChOQU1FKSQoRExTVUZGSVgpCiAg ZW5kaWYKICAKKioqKioqKioqKioqKioqCioqKiAxMDMsMTIzICoqKioKICAKICAkKHRvcF9i dWlsZGRpcikvc3JjL3BvcnQvcGdfY29uZmlnX3BhdGhzLmg6CiAgCSQoTUFLRSkgLUMgJCh0 b3BfYnVpbGRkaXIpL3NyYy9wb3J0IHBnX2NvbmZpZ19wYXRocy5oCiAgCiAgaW5zdGFsbDog YWxsIGluc3RhbGxkaXJzIGluc3RhbGwtbGliCiAgCSQoSU5TVEFMTF9EQVRBKSAkKHNyY2Rp cikvbGlicHEtZmUuaCAnJChERVNURElSKSQoaW5jbHVkZWRpciknCiAgCSQoSU5TVEFMTF9E QVRBKSAkKHNyY2RpcikvbGlicHEtaW50LmggJyQoREVTVERJUikkKGluY2x1ZGVkaXJfaW50 ZXJuYWwpJwogIAkkKElOU1RBTExfREFUQSkgJChzcmNkaXIpL3BxZXhwYnVmZmVyLmggJyQo REVTVERJUikkKGluY2x1ZGVkaXJfaW50ZXJuYWwpJwogIAkkKElOU1RBTExfREFUQSkgJChz cmNkaXIpL3BnX3NlcnZpY2UuY29uZi5zYW1wbGUgJyQoREVTVERJUikkKGRhdGFkaXIpL3Bn X3NlcnZpY2UuY29uZi5zYW1wbGUnCiAgCiAgaW5zdGFsbGRpcnM6IGluc3RhbGxkaXJzLWxp YgogIAkkKG1raW5zdGFsbGRpcnMpICckKERFU1RESVIpJChpbmNsdWRlZGlyKScgJyQoREVT VERJUikkKGluY2x1ZGVkaXJfaW50ZXJuYWwpJwogIAogIHVuaW5zdGFsbDogdW5pbnN0YWxs LWxpYgohIAlybSAtZiAnJChERVNURElSKSQoaW5jbHVkZWRpcikvbGlicHEtZmUuaCcgJyQo REVTVERJUikkKGluY2x1ZGVkaXJfaW50ZXJuYWwpL2xpYnBxLWludC5oJyAnJChERVNURElS KSQoaW5jbHVkZWRpcl9pbnRlcm5hbCkvcHFleHBidWZmZXIuaCcgJyQoREVTVERJUikkKGRh dGFkaXIpL3BnX3NlcnZpY2UuY29uZi5zYW1wbGUnCiAgCiAgY2xlYW4gZGlzdGNsZWFuOiBj bGVhbi1saWIKICAJcm0gLWYgJChPQkpTKSBwZ19jb25maWdfcGF0aHMuaCBjcnlwdC5jIGdl dGFkZHJpbmZvLmMgaW5ldF9hdG9uLmMgbm9ibG9jay5jIG9wZW4uYyBwZ3N0cmNhc2VjbXAu YyBzbnByaW50Zi5jIHN0cmVycm9yLmMgc3RybGNweS5jIHRocmVhZC5jIG1kNS5jIGlwLmMg ZW5jbmFtZXMuYyB3Y2hhci5jIHdpbjMyZXJyb3IuYyBwZ3NsZWVwLmMgcHRocmVhZC5oIGxp YnBxLnJjCiAgIyBNaWdodCBiZSBsZWZ0IG92ZXIgZnJvbSBhIFdpbjMyIGNsaWVudC1vbmx5 IGJ1aWxkCiAgCXJtIC1mIHBnX2NvbmZpZ19wYXRocy5oCiAgCi0tLSAxMDMsMTI0IC0tLS0K ICAKICAkKHRvcF9idWlsZGRpcikvc3JjL3BvcnQvcGdfY29uZmlnX3BhdGhzLmg6CiAgCSQo TUFLRSkgLUMgJCh0b3BfYnVpbGRkaXIpL3NyYy9wb3J0IHBnX2NvbmZpZ19wYXRocy5oCiAg CiAgaW5zdGFsbDogYWxsIGluc3RhbGxkaXJzIGluc3RhbGwtbGliCiAgCSQoSU5TVEFMTF9E QVRBKSAkKHNyY2RpcikvbGlicHEtZmUuaCAnJChERVNURElSKSQoaW5jbHVkZWRpciknCisg CSQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvbGlicHEtZXZlbnRzLmggJyQoREVTVERJUikk KGluY2x1ZGVkaXIpJwogIAkkKElOU1RBTExfREFUQSkgJChzcmNkaXIpL2xpYnBxLWludC5o ICckKERFU1RESVIpJChpbmNsdWRlZGlyX2ludGVybmFsKScKICAJJChJTlNUQUxMX0RBVEEp ICQoc3JjZGlyKS9wcWV4cGJ1ZmZlci5oICckKERFU1RESVIpJChpbmNsdWRlZGlyX2ludGVy bmFsKScKICAJJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS9wZ19zZXJ2aWNlLmNvbmYuc2Ft cGxlICckKERFU1RESVIpJChkYXRhZGlyKS9wZ19zZXJ2aWNlLmNvbmYuc2FtcGxlJwogIAog IGluc3RhbGxkaXJzOiBpbnN0YWxsZGlycy1saWIKICAJJChta2luc3RhbGxkaXJzKSAnJChE RVNURElSKSQoaW5jbHVkZWRpciknICckKERFU1RESVIpJChpbmNsdWRlZGlyX2ludGVybmFs KScKICAKICB1bmluc3RhbGw6IHVuaW5zdGFsbC1saWIKISAJcm0gLWYgJyQoREVTVERJUikk KGluY2x1ZGVkaXIpL2xpYnBxLWZlLmgnICckKERFU1RESVIpJChpbmNsdWRlZGlyKS9saWJw cS1ldmVudHMuaCcgJyQoREVTVERJUikkKGluY2x1ZGVkaXJfaW50ZXJuYWwpL2xpYnBxLWlu dC5oJyAnJChERVNURElSKSQoaW5jbHVkZWRpcl9pbnRlcm5hbCkvcHFleHBidWZmZXIuaCcg JyQoREVTVERJUikkKGRhdGFkaXIpL3BnX3NlcnZpY2UuY29uZi5zYW1wbGUnCiAgCiAgY2xl YW4gZGlzdGNsZWFuOiBjbGVhbi1saWIKICAJcm0gLWYgJChPQkpTKSBwZ19jb25maWdfcGF0 aHMuaCBjcnlwdC5jIGdldGFkZHJpbmZvLmMgaW5ldF9hdG9uLmMgbm9ibG9jay5jIG9wZW4u YyBwZ3N0cmNhc2VjbXAuYyBzbnByaW50Zi5jIHN0cmVycm9yLmMgc3RybGNweS5jIHRocmVh ZC5jIG1kNS5jIGlwLmMgZW5jbmFtZXMuYyB3Y2hhci5jIHdpbjMyZXJyb3IuYyBwZ3NsZWVw LmMgcHRocmVhZC5oIGxpYnBxLnJjCiAgIyBNaWdodCBiZSBsZWZ0IG92ZXIgZnJvbSBhIFdp bjMyIGNsaWVudC1vbmx5IGJ1aWxkCiAgCXJtIC1mIHBnX2NvbmZpZ19wYXRocy5oCiAgCklu ZGV4OiBzcmMvaW50ZXJmYWNlcy9saWJwcS9leHBvcnRzLnR4dAo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD UyBmaWxlOiAvcHJvamVjdHMvY3Zzcm9vdC9wZ3NxbC9zcmMvaW50ZXJmYWNlcy9saWJwcS9l eHBvcnRzLnR4dCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xOQpkaWZmIC1DNiAtcjEuMTkg ZXhwb3J0cy50eHQKKioqIHNyYy9pbnRlcmZhY2VzL2xpYnBxL2V4cG9ydHMudHh0CTE5IE1h ciAyMDA4IDAwOjM5OjMzIC0wMDAwCTEuMTkKLS0tIHNyYy9pbnRlcmZhY2VzL2xpYnBxL2V4 cG9ydHMudHh0CTE3IFNlcCAyMDA4IDAzOjU0OjIwIC0wMDAwCioqKioqKioqKioqKioqKgoq KiogMTM4LDE0MyAqKioqCi0tLSAxMzgsMTUyIC0tLS0KICBQUXNlbmREZXNjcmliZVBvcnRh bCAgICAgIDEzNgogIGxvX3RydW5jYXRlICAgICAgICAgICAgICAgMTM3CiAgUFFjb25uZWN0 aW9uVXNlZFBhc3N3b3JkICAxMzgKICBwZ192YWxpZF9zZXJ2ZXJfZW5jb2RpbmdfaWQgMTM5 CiAgUFFjb25uZWN0aW9uTmVlZHNQYXNzd29yZCAxNDAKICBsb19pbXBvcnRfd2l0aF9vaWQJ CSAgMTQxCisgUFFjb3B5UmVzdWx0ICAgICAgICAgICAgICAxNDIKKyBQUXNldFJlc3VsdEF0 dHJzICAgICAgICAgIDE0MworIFBRc2V0dmFsdWUgICAgICAgICAgICAgICAgMTQ0CisgUFFy ZXN1bHRBbGxvYyAgICAgICAgICAgICAxNDUKKyBQUXJlZ2lzdGVyRXZlbnRQcm9jICAgICAg IDE0NgorIFBRaW5zdGFuY2VEYXRhICAgICAgICAgICAgMTQ3CisgUFFzZXRJbnN0YW5jZURh dGEgICAgICAgICAxNDgKKyBQUXJlc3VsdEluc3RhbmNlRGF0YSAgICAgIDE0OQorIFBRcmVz dWx0U2V0SW5zdGFuY2VEYXRhICAgMTUwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJ bmRleDogc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtY29ubmVjdC5jCj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K UkNTIGZpbGU6IC9wcm9qZWN0cy9jdnNyb290L3Bnc3FsL3NyYy9pbnRlcmZhY2VzL2xpYnBx L2ZlLWNvbm5lY3QuYyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zNTkKZGlmZiAtQzYgLXIx LjM1OSBmZS1jb25uZWN0LmMKKioqIHNyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWNvbm5lY3Qu YwkyOSBNYXkgMjAwOCAyMjowMjo0NCAtMDAwMAkxLjM1OQotLS0gc3JjL2ludGVyZmFjZXMv bGlicHEvZmUtY29ubmVjdC5jCTE3IFNlcCAyMDA4IDAzOjU0OjIwIC0wMDAwCioqKioqKioq KioqKioqKgoqKiogMTk3MSwxOTgyICoqKioKLS0tIDE5NzEsMjAwMSAtLS0tCiAgICogcmVs ZWFzZSBkYXRhIHRoYXQgaXMgdG8gYmUgaGVsZCBmb3IgdGhlIGxpZmUgb2YgdGhlIFBHY29u biBzdHJ1Y3R1cmUuCiAgICogSWYgYSB2YWx1ZSBvdWdodCB0byBiZSBjbGVhcmVkL2ZyZWVk IGR1cmluZyBQUXJlc2V0KCksIGRvIGl0IHRoZXJlIG5vdCBoZXJlLgogICAqLwogIHN0YXRp YyB2b2lkCiAgZnJlZVBHY29ubihQR2Nvbm4gKmNvbm4pCiAgeworIAlpbnQgaTsKKyAJUEdF dmVudENvbm5EZXN0cm95IGV2dDsKKyAKKyAJLyogTGV0IHRoZSBldmVudCBwcm9jcyBjbGVh bnVwIHRoZWlyIHN0YXRlIGRhdGEgKi8KKyAJZm9yIChpID0gMDsgaSA8IGNvbm4tPm5FdmVu dHM7IGkrKykKKyAJeworIAkJZXZ0LmNvbm4gPSBjb25uOworIAkJKHZvaWQpY29ubi0+ZXZl bnRzW2ldLnByb2MoUEdFVlRfQ09OTkRFU1RST1ksICZldnQsIGNvbm4tPmV2ZW50c1tpXS5w YXNzVGhyb3VnaCk7CisgCQlmcmVlKGNvbm4tPmV2ZW50c1tpXS5uYW1lKTsKKyAJfQorIAor IAkvKiBmcmVlIHRoZSBQR0V2ZW50IGFycmF5ICovCisgCWlmIChjb25uLT5ldmVudHMpCisg CXsKKyAJCWZyZWUoY29ubi0+ZXZlbnRzKTsKKyAJCWNvbm4tPmV2ZW50cyA9IE5VTEw7Cisg CQljb25uLT5uRXZlbnRzID0gY29ubi0+ZXZlbnRBcnJTaXplID0gMDsKKyAJfQorIAogIAlp ZiAoY29ubi0+cGdob3N0KQogIAkJZnJlZShjb25uLT5wZ2hvc3QpOwogIAlpZiAoY29ubi0+ cGdob3N0YWRkcikKICAJCWZyZWUoY29ubi0+cGdob3N0YWRkcik7CiAgCWlmIChjb25uLT5w Z3BvcnQpCiAgCQlmcmVlKGNvbm4tPnBncG9ydCk7CioqKioqKioqKioqKioqKgoqKiogMjE1 MiwyMTY1ICoqKioKICBQUXJlc2V0KFBHY29ubiAqY29ubikKICB7CiAgCWlmIChjb25uKQog IAl7CiAgCQljbG9zZVBHY29ubihjb25uKTsKICAKISAJCWlmIChjb25uZWN0REJTdGFydChj b25uKSkKISAJCQkodm9pZCkgY29ubmVjdERCQ29tcGxldGUoY29ubik7CiAgCX0KICB9CiAg CiAgCiAgLyoKICAgKiBQUXJlc2V0U3RhcnQ6Ci0tLSAyMTcxLDIyMDEgLS0tLQogIFBRcmVz ZXQoUEdjb25uICpjb25uKQogIHsKICAJaWYgKGNvbm4pCiAgCXsKICAJCWNsb3NlUEdjb25u KGNvbm4pOwogIAohIAkJaWYgKGNvbm5lY3REQlN0YXJ0KGNvbm4pICYmIGNvbm5lY3REQkNv bXBsZXRlKGNvbm4pKQohIAkJewohIAkJCWludCBpOwohIAkJCVBHRXZlbnRDb25uUmVzZXQg ZXZ0OwohIAohIAkJCWZvciAoaSA9IDA7IGkgPCBjb25uLT5uRXZlbnRzOyBpKyspCiEgCQkJ ewohIAkJCQlldnQuY29ubiA9IGNvbm47CiEgCiEgCQkJCWlmICghY29ubi0+ZXZlbnRzW2ld LnByb2MoUEdFVlRfQ09OTlJFU0VULCAmZXZ0LCBjb25uLT5ldmVudHNbaV0ucGFzc1Rocm91 Z2gpKQohIAkJCQl7CiEgCQkJCQljb25uLT5zdGF0dXMgPSBDT05ORUNUSU9OX0JBRDsKISAJ CQkJCXByaW50ZlBRRXhwQnVmZmVyKCZjb25uLT5lcnJvck1lc3NhZ2UsCiEgCQkJCQkJbGli cHFfZ2V0dGV4dCgiUEdFdmVudFByb2MgXCIlc1wiIGZhaWxlZCBkdXJpbmcgUEdFVlRfQ09O TlJFU0VUIGV2ZW50XG4iKSwKISAJCQkJCQljb25uLT5ldmVudHNbaV0ubmFtZSk7CiEgCQkJ CQlicmVhazsKISAJCQkJfQohIAkJCX0KISAJCX0KICAJfQogIH0KICAKICAKICAvKgogICAq IFBRcmVzZXRTdGFydDoKKioqKioqKioqKioqKioqCioqKiAyMTg3LDIxOTkgKioqKgogICAq IGNsb3NlcyB0aGUgZXhpc3RpbmcgY29ubmVjdGlvbiBhbmQgbWFrZXMgYSBuZXcgb25lCiAg ICovCiAgUG9zdGdyZXNQb2xsaW5nU3RhdHVzVHlwZQogIFBRcmVzZXRQb2xsKFBHY29ubiAq Y29ubikKICB7CiAgCWlmIChjb25uKQohIAkJcmV0dXJuIFBRY29ubmVjdFBvbGwoY29ubik7 CiAgCiAgCXJldHVybiBQR1JFU19QT0xMSU5HX0ZBSUxFRDsKICB9CiAgCiAgLyoKICAgKiBQ UWNhbmNlbEdldDogZ2V0IGEgUEdjYW5jZWwgc3RydWN0dXJlIGNvcnJlc3BvbmRpbmcgdG8g YSBjb25uZWN0aW9uLgotLS0gMjIyMywyMjU5IC0tLS0KICAgKiBjbG9zZXMgdGhlIGV4aXN0 aW5nIGNvbm5lY3Rpb24gYW5kIG1ha2VzIGEgbmV3IG9uZQogICAqLwogIFBvc3RncmVzUG9s bGluZ1N0YXR1c1R5cGUKICBQUXJlc2V0UG9sbChQR2Nvbm4gKmNvbm4pCiAgewogIAlpZiAo Y29ubikKISAJewohIAkJUG9zdGdyZXNQb2xsaW5nU3RhdHVzVHlwZSBzdGF0dXMgPSBQUWNv bm5lY3RQb2xsKGNvbm4pOwohIAohIAkJaWYgKHN0YXR1cyA9PSBQR1JFU19QT0xMSU5HX09L KQohIAkJewohIAkJCWludCBpOwohIAkJCVBHRXZlbnRDb25uUmVzZXQgZXZ0OwohIAohIAkJ CWZvciAoaSA9IDA7IGkgPCBjb25uLT5uRXZlbnRzOyBpKyspCiEgCQkJewohIAkJCQlldnQu Y29ubiA9IGNvbm47CiEgCiEgCQkJCWlmICghY29ubi0+ZXZlbnRzW2ldLnByb2MoUEdFVlRf Q09OTlJFU0VULCAmZXZ0LCBjb25uLT5ldmVudHNbaV0ucGFzc1Rocm91Z2gpKQohIAkJCQl7 CiEgCQkJCQljb25uLT5zdGF0dXMgPSBDT05ORUNUSU9OX0JBRDsKISAJCQkJCXByaW50ZlBR RXhwQnVmZmVyKCZjb25uLT5lcnJvck1lc3NhZ2UsCiEgCQkJCQkJbGlicHFfZ2V0dGV4dCgi UEdFdmVudFByb2MgXCIlc1wiIGZhaWxlZCBkdXJpbmcgUEdFVlRfQ09OTlJFU0VUIGV2ZW50 XG4iKSwKISAJCQkJCQljb25uLT5ldmVudHNbaV0ubmFtZSk7CiEgCQkJCQlyZXR1cm4gUEdS RVNfUE9MTElOR19GQUlMRUQ7CiEgCQkJCX0KISAJCQl9CiEgCQl9CiEgCiEgCQlyZXR1cm4g c3RhdHVzOwohIAl9CiAgCiAgCXJldHVybiBQR1JFU19QT0xMSU5HX0ZBSUxFRDsKICB9CiAg CiAgLyoKICAgKiBQUWNhbmNlbEdldDogZ2V0IGEgUEdjYW5jZWwgc3RydWN0dXJlIGNvcnJl c3BvbmRpbmcgdG8gYSBjb25uZWN0aW9uLgpJbmRleDogc3JjL2ludGVyZmFjZXMvbGlicHEv ZmUtZXhlYy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9wcm9qZWN0cy9jdnNyb290L3Bn c3FsL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWV4ZWMuYyx2CnJldHJpZXZpbmcgcmV2aXNp b24gMS4xOTcKZGlmZiAtQzYgLXIxLjE5NyBmZS1leGVjLmMKKioqIHNyYy9pbnRlcmZhY2Vz L2xpYnBxL2ZlLWV4ZWMuYwkxMCBTZXAgMjAwOCAxNzowMTowNyAtMDAwMAkxLjE5NwotLS0g c3JjL2ludGVyZmFjZXMvbGlicHEvZmUtZXhlYy5jCTE3IFNlcCAyMDA4IDAzOjU0OjIwIC0w MDAwCioqKioqKioqKioqKioqKgoqKiogNjAsNzIgKioqKgogIAkJCQlpbnQgcmVzdWx0Rm9y bWF0KTsKICBzdGF0aWMgdm9pZCBwYXJzZUlucHV0KFBHY29ubiAqY29ubik7CiAgc3RhdGlj IGJvb2wgUFFleGVjU3RhcnQoUEdjb25uICpjb25uKTsKICBzdGF0aWMgUEdyZXN1bHQgKlBR ZXhlY0ZpbmlzaChQR2Nvbm4gKmNvbm4pOwogIHN0YXRpYyBpbnQgUFFzZW5kRGVzY3JpYmUo UEdjb25uICpjb25uLCBjaGFyIGRlc2NfdHlwZSwKICAJCQkgICBjb25zdCBjaGFyICpkZXNj X3RhcmdldCk7CiEgCiAgCiAgLyogLS0tLS0tLS0tLS0tLS0tLQogICAqIFNwYWNlIG1hbmFn ZW1lbnQgZm9yIFBHcmVzdWx0LgogICAqCiAgICogRm9ybWVybHksIGxpYnBxIGRpZCBhIHNl cGFyYXRlIG1hbGxvYygpIGZvciBlYWNoIGZpZWxkIG9mIGVhY2ggdHVwbGUKICAgKiByZXR1 cm5lZCBieSBhIHF1ZXJ5LiAgVGhpcyB3YXMgcmVtYXJrYWJseSBleHBlbnNpdmUgLS0tIG1h bGxvYy9mcmVlCi0tLSA2MCw3MiAtLS0tCiAgCQkJCWludCByZXN1bHRGb3JtYXQpOwogIHN0 YXRpYyB2b2lkIHBhcnNlSW5wdXQoUEdjb25uICpjb25uKTsKICBzdGF0aWMgYm9vbCBQUWV4 ZWNTdGFydChQR2Nvbm4gKmNvbm4pOwogIHN0YXRpYyBQR3Jlc3VsdCAqUFFleGVjRmluaXNo KFBHY29ubiAqY29ubik7CiAgc3RhdGljIGludCBQUXNlbmREZXNjcmliZShQR2Nvbm4gKmNv bm4sIGNoYXIgZGVzY190eXBlLAogIAkJCSAgIGNvbnN0IGNoYXIgKmRlc2NfdGFyZ2V0KTsK ISBzdGF0aWMgaW50IGNoZWNrX2ZpZWxkX251bWJlcihjb25zdCBQR3Jlc3VsdCAqcmVzLCBp bnQgZmllbGRfbnVtKTsKICAKICAvKiAtLS0tLS0tLS0tLS0tLS0tCiAgICogU3BhY2UgbWFu YWdlbWVudCBmb3IgUEdyZXN1bHQuCiAgICoKICAgKiBGb3JtZXJseSwgbGlicHEgZGlkIGEg c2VwYXJhdGUgbWFsbG9jKCkgZm9yIGVhY2ggZmllbGQgb2YgZWFjaCB0dXBsZQogICAqIHJl dHVybmVkIGJ5IGEgcXVlcnkuICBUaGlzIHdhcyByZW1hcmthYmx5IGV4cGVuc2l2ZSAtLS0g bWFsbG9jL2ZyZWUKKioqKioqKioqKioqKioqCioqKiAxMjEsMTQxICoqKioKICAjZGVmaW5l IFBHUkVTVUxUX0RBVEFfQkxPQ0tTSVpFCQkyMDQ4CiAgI2RlZmluZSBQR1JFU1VMVF9BTElH Tl9CT1VOREFSWQkJTUFYSU1VTV9BTElHTk9GCQkvKiBmcm9tIGNvbmZpZ3VyZSAqLwogICNk ZWZpbmUgUEdSRVNVTFRfQkxPQ0tfT1ZFUkhFQUQJCU1heChzaXplb2YoUEdyZXN1bHRfZGF0 YSksIFBHUkVTVUxUX0FMSUdOX0JPVU5EQVJZKQogICNkZWZpbmUgUEdSRVNVTFRfU0VQX0FM TE9DX1RIUkVTSE9MRAkoUEdSRVNVTFRfREFUQV9CTE9DS1NJWkUgLyAyKQogIAogIAogIC8q CiAgICogUFFtYWtlRW1wdHlQR3Jlc3VsdAogICAqCSByZXR1cm5zIGEgbmV3bHkgYWxsb2Nh dGVkLCBpbml0aWFsaXplZCBQR3Jlc3VsdCB3aXRoIGdpdmVuIHN0YXR1cy4KICAgKgkgSWYg Y29ubiBpcyBub3QgTlVMTCBhbmQgc3RhdHVzIGluZGljYXRlcyBhbiBlcnJvciwgdGhlIGNv bm4ncwogICAqCSBlcnJvck1lc3NhZ2UgaXMgY29waWVkLgogICAqCiAgICogTm90ZSB0aGlz IGlzIGV4cG9ydGVkIC0tLSB5b3Ugd291bGRuJ3QgdGhpbmsgYW4gYXBwbGljYXRpb24gd291 bGQgbmVlZAogICAqIHRvIGJ1aWxkIGl0cyBvd24gUEdyZXN1bHRzLCBidXQgdGhpcyBoYXMg cHJvdmVuIHVzZWZ1bCBpbiBib3RoIGxpYnBndGNsCiEgICogYW5kIHRoZSBQZXJsNSBpbnRl cmZhY2UsIHNvIG1heWJlIGl0J3Mgbm90IHNvIHVucmVhc29uYWJsZS4KICAgKi8KICAKICBQ R3Jlc3VsdCAqCiAgUFFtYWtlRW1wdHlQR3Jlc3VsdChQR2Nvbm4gKmNvbm4sIEV4ZWNTdGF0 dXNUeXBlIHN0YXR1cykKICB7CiAgCVBHcmVzdWx0ICAgKnJlc3VsdDsKLS0tIDEyMSwxNzcg LS0tLQogICNkZWZpbmUgUEdSRVNVTFRfREFUQV9CTE9DS1NJWkUJCTIwNDgKICAjZGVmaW5l IFBHUkVTVUxUX0FMSUdOX0JPVU5EQVJZCQlNQVhJTVVNX0FMSUdOT0YJCS8qIGZyb20gY29u ZmlndXJlICovCiAgI2RlZmluZSBQR1JFU1VMVF9CTE9DS19PVkVSSEVBRAkJTWF4KHNpemVv ZihQR3Jlc3VsdF9kYXRhKSwgUEdSRVNVTFRfQUxJR05fQk9VTkRBUlkpCiAgI2RlZmluZSBQ R1JFU1VMVF9TRVBfQUxMT0NfVEhSRVNIT0xECShQR1JFU1VMVF9EQVRBX0JMT0NLU0laRSAv IDIpCiAgCiAgCisgLyogRG9lcyBub3QgZHVwbGljYXRlIHRoZSBldmVudCBpbnN0YW5jZSBk YXRhLCBzZXRzIHRoaXMgdG8gTlVMTCAqLworIHN0YXRpYyBQR0V2ZW50ICoKKyBkdXBFdmVu dHMoUEdFdmVudCAqZXZlbnRzLCBpbnQgY291bnQpCisgeworIAlpbnQgaTsKKyAJUEdFdmVu dCAqbmV3RXZlbnRzOworIAorIAlpZiAoIWV2ZW50cyB8fCBjb3VudCA8PSAwKQorIAkJcmV0 dXJuIE5VTEw7CisgCisgCW5ld0V2ZW50cyA9IChQR0V2ZW50ICopIG1hbGxvYyhjb3VudCAq IHNpemVvZihQR0V2ZW50KSk7CisgCWlmICghbmV3RXZlbnRzKQorIAkJcmV0dXJuIE5VTEw7 CisgCisgCW1lbWNweShuZXdFdmVudHMsIGV2ZW50cywgY291bnQgKiBzaXplb2YoUEdFdmVu dCkpOworIAorIAkvKiBOVUxMIG91dCB0aGUgZGF0YSBwb2ludGVyIGFuZCBkZWVwIGNvcHkg bmFtZSAqLworIAlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAJeworIAkJbmV3RXZl bnRzW2ldLm5hbWUgPSBzdHJkdXAobmV3RXZlbnRzW2ldLm5hbWUpOworIAkJaWYgKCFuZXdF dmVudHNbaV0ubmFtZSkKKyAJCXsKKyAJCQl3aGlsZSAoLS1pID49IDApCisgCQkJCWZyZWUo bmV3RXZlbnRzW2ldLm5hbWUpOworIAkJCWZyZWUobmV3RXZlbnRzKTsKKyAJCQlyZXR1cm4g TlVMTDsKKyAJCX0KKyAKKyAJCW5ld0V2ZW50c1tpXS5kYXRhID0gTlVMTDsKKyAJfQorIAor IAlyZXR1cm4gbmV3RXZlbnRzOworIH0KKyAKICAvKgogICAqIFBRbWFrZUVtcHR5UEdyZXN1 bHQKICAgKgkgcmV0dXJucyBhIG5ld2x5IGFsbG9jYXRlZCwgaW5pdGlhbGl6ZWQgUEdyZXN1 bHQgd2l0aCBnaXZlbiBzdGF0dXMuCiAgICoJIElmIGNvbm4gaXMgbm90IE5VTEwgYW5kIHN0 YXR1cyBpbmRpY2F0ZXMgYW4gZXJyb3IsIHRoZSBjb25uJ3MKICAgKgkgZXJyb3JNZXNzYWdl IGlzIGNvcGllZC4KICAgKgogICAqIE5vdGUgdGhpcyBpcyBleHBvcnRlZCAtLS0geW91IHdv dWxkbid0IHRoaW5rIGFuIGFwcGxpY2F0aW9uIHdvdWxkIG5lZWQKICAgKiB0byBidWlsZCBp dHMgb3duIFBHcmVzdWx0cywgYnV0IHRoaXMgaGFzIHByb3ZlbiB1c2VmdWwgaW4gYm90aCBs aWJwZ3RjbAohICAqIGFuZCB0aGUgUGVybDUgaW50ZXJmYWNlLCBzbyBtYXliZSBpdCdzIG5v dCBzbyB1bnJlYXNvbmFibGUuICBJZiBjb25uIGlzCiEgICogbm90IE5VTEwsIHRoZSBQR2V2 ZW50cyBhcnJheSB3aWxsIGJlIGNvcGllZCBmcm9tIHRoZSBQR2Nvbm4gdG8gdGhlCiEgICog Y3JlYXRlZCBQR3Jlc3VsdC4KICAgKi8KICAKICBQR3Jlc3VsdCAqCiAgUFFtYWtlRW1wdHlQ R3Jlc3VsdChQR2Nvbm4gKmNvbm4sIEV4ZWNTdGF0dXNUeXBlIHN0YXR1cykKICB7CiAgCVBH cmVzdWx0ICAgKnJlc3VsdDsKKioqKioqKioqKioqKioqCioqKiAxNTcsMTc1ICoqKioKLS0t IDE5MywyMjYgLS0tLQogIAlyZXN1bHQtPmVyck1zZyA9IE5VTEw7CiAgCXJlc3VsdC0+ZXJy RmllbGRzID0gTlVMTDsKICAJcmVzdWx0LT5udWxsX2ZpZWxkWzBdID0gJ1wwJzsKICAJcmVz dWx0LT5jdXJCbG9jayA9IE5VTEw7CiAgCXJlc3VsdC0+Y3VyT2Zmc2V0ID0gMDsKICAJcmVz dWx0LT5zcGFjZUxlZnQgPSAwOworIAlyZXN1bHQtPm5FdmVudHMgPSAwOworIAlyZXN1bHQt PmV2ZW50cyA9IE5VTEw7CiAgCiAgCWlmIChjb25uKQogIAl7CiAgCQkvKiBjb3B5IGNvbm5l Y3Rpb24gZGF0YSB3ZSBtaWdodCBuZWVkIGZvciBvcGVyYXRpb25zIG9uIFBHcmVzdWx0ICov CiAgCQlyZXN1bHQtPm5vdGljZUhvb2tzID0gY29ubi0+bm90aWNlSG9va3M7CiAgCQlyZXN1 bHQtPmNsaWVudF9lbmNvZGluZyA9IGNvbm4tPmNsaWVudF9lbmNvZGluZzsKICAKKyAJCS8q IGNvcHkgZXZlbnRzIGZyb20gY29ubmVjdGlvbiAqLworIAkJaWYgKGNvbm4tPm5FdmVudHMg PiAwKQorIAkJeworIAkJCXJlc3VsdC0+ZXZlbnRzID0gZHVwRXZlbnRzKGNvbm4tPmV2ZW50 cywgY29ubi0+bkV2ZW50cyk7CisgCQkJaWYgKCFyZXN1bHQtPmV2ZW50cykKKyAJCQl7Cisg CQkJCVBRY2xlYXIocmVzdWx0KTsKKyAJCQkJcmV0dXJuIE5VTEw7CisgCQkJfQorIAorIAkJ CXJlc3VsdC0+bkV2ZW50cyA9IGNvbm4tPm5FdmVudHM7CisgCQl9CisgCiAgCQkvKiBjb25z aWRlciBjb3B5aW5nIGNvbm4ncyBlcnJvck1lc3NhZ2UgKi8KICAJCXN3aXRjaCAoc3RhdHVz KQogIAkJewogIAkJCWNhc2UgUEdSRVNfRU1QVFlfUVVFUlk6CiAgCQkJY2FzZSBQR1JFU19D T01NQU5EX09LOgogIAkJCWNhc2UgUEdSRVNfVFVQTEVTX09LOgoqKioqKioqKioqKioqKioK KioqIDE5MiwyMDMgKioqKgotLS0gMjQzLDUwMSAtLS0tCiAgCQlyZXN1bHQtPmNsaWVudF9l bmNvZGluZyA9IFBHX1NRTF9BU0NJSTsKICAJfQogIAogIAlyZXR1cm4gcmVzdWx0OwogIH0K ICAKKyAvKiBQUXNldFJlc3VsdEF0dHJzCisgICogU2V0IHRoZSBhdHRyaWJ1dGVzIGZvciBh IGdpdmVuIHJlc3VsdC4gIFRoaXMgZnVuY3Rpb24gZmFpbHMgaWYgdGhlcmUgYXJlCisgICog YWxyZWFkeSBhdHRyaWJ1dGVzIGNvbnRhaW5lZCBpbiB0aGUgcHJvdmlkZWQgcmVzdWx0LiAg VGhlIGNhbGwgaXMKKyAgKiBpZ25vcmVkIGlmIG51bUF0dHJpYnV0ZXMgaXMgaXMgemVybyBv ciBhdHREZXNjcyBpcyBOVUxMLiAgSWYgdGhlCisgICogZnVuY3Rpb24gZmFpbHMsIGl0IHJl dHVybnMgemVyby4gIElmIHRoZSBmdW5jdGlvbiBzdWNjZWVkcywgaXQKKyAgKiByZXR1cm5z IGEgbm9uLXplcm8gdmFsdWUuCisgICovCisgaW50CisgUFFzZXRSZXN1bHRBdHRycyhQR3Jl c3VsdCAqcmVzLCBpbnQgbnVtQXR0cmlidXRlcywgUEdyZXNBdHREZXNjICphdHREZXNjcykK KyB7CisgCWludCBpOworIAorIAkvKiBJZiBhdHRycyBhbHJlYWR5IGV4aXN0LCB0aGV5IGNh bm5vdCBiZSBvdmVyd3JpdHRlbi4gKi8KKyAJaWYgKCFyZXMgfHwgcmVzLT5udW1BdHRyaWJ1 dGVzID4gMCkKKyAJCXJldHVybiBGQUxTRTsKKyAKKyAJLyogaWdub3JlIHJlcXVlc3QgKi8K KyAJaWYgKG51bUF0dHJpYnV0ZXMgPD0gMCB8fCAhYXR0RGVzY3MpCisgCQlyZXR1cm4gVFJV RTsKKyAKKyAJcmVzLT5hdHREZXNjcyA9IChQR3Jlc0F0dERlc2MgKikgUFFyZXN1bHRBbGxv YyhyZXMsCisgCQludW1BdHRyaWJ1dGVzICogc2l6ZW9mKFBHcmVzQXR0RGVzYykpOworIAor IAlpZiAoIXJlcy0+YXR0RGVzY3MpCisgCQlyZXR1cm4gRkFMU0U7CisgCisgCXJlcy0+bnVt QXR0cmlidXRlcyA9IG51bUF0dHJpYnV0ZXM7CisgCW1lbWNweShyZXMtPmF0dERlc2NzLCBh dHREZXNjcywKKyAJCW51bUF0dHJpYnV0ZXMgKiBzaXplb2YoUEdyZXNBdHREZXNjKSk7Cisg CisgCS8qIHJlc3VsdGFsbG9jIHRoZSBhdHRyaWJ1dGUgbmFtZXMuICBUaGUgYWJvdmUgbWVt Y3B5IGhhcyB0aGUgYXR0cgorIAkgKiBuYW1lcyBwb2ludGluZyBhdCB0aGUgY2FsbGVycyBw cm92aWRlZCBhdHREZXNjcyBtZW1vcnkuCisgCSAqLworIAlyZXMtPmJpbmFyeSA9IDE7Cisg CWZvciAoaSA9IDA7IGkgPCByZXMtPm51bUF0dHJpYnV0ZXM7IGkrKykKKyAJeworIAkJaWYg KHJlcy0+YXR0RGVzY3NbaV0ubmFtZSkKKyAJCQlyZXMtPmF0dERlc2NzW2ldLm5hbWUgPSBw cVJlc3VsdFN0cmR1cChyZXMsIHJlcy0+YXR0RGVzY3NbaV0ubmFtZSk7CisgCQllbHNlCisg CQkJcmVzLT5hdHREZXNjc1tpXS5uYW1lID0gcmVzLT5udWxsX2ZpZWxkOworIAorIAkJaWYg KCFyZXMtPmF0dERlc2NzW2ldLm5hbWUpCisgCQkJcmV0dXJuIEZBTFNFOworIAorIAkJLyog QWx0aG91Z2ggZGVwcmVjYXRlZCwgYmVjYXVzZSByZXN1bHRzIGNhbiBoYXZlIHRleHQrYmlu YXJ5IGNvbHVtbnMsCisgCQkgKiBpdHMgZWFzeSBlbm91Z2ggdG8gZGVkdWNlIHNvIHNldCBp dCBmb3IgY29tcGxldGVuZXNzLgorIAkJICovCisgCQlpZiAocmVzLT5hdHREZXNjc1tpXS5m b3JtYXQgPT0gMCkKKyAJCQlyZXMtPmJpbmFyeSA9IDA7CisgCX0KKyAKKyAJcmV0dXJuIFRS VUU7CisgfQorIAorIC8qCisgICogUFFjb3B5UmVzdWx0CisgICogUmV0dXJucyBhIGRlZXAg Y29weSBvZiB0aGUgcHJvdmlkZWQgJ3NyYycgUEdyZXN1bHQsIHdoaWNoIGNhbm5vdCBiZSBO VUxMLgorICAqIFRoZSAnZmxhZ3MnIGFyZ3VtZW50IGNvbnRyb2xzIHdoaWNoIHBvcnRpb25z IG9mIHRoZSByZXN1bHQgd2lsbCBvciB3aWxsCisgICogTk9UIGJlIGNvcGllZC4gIFRoZSBj cmVhdGVkIHJlc3VsdCBpcyBhbHdheXMgcHV0IGludG8gdGhlCisgICogUEdSRVNfVFVQTEVT X09LIHN0YXR1cy4gIFRoZSBzb3VyY2UgcmVzdWx0IGVycm9yIG1lc3NhZ2UgaXMgbm90IGNv cGllZCwKKyAgKiBhbHRob3VnaCBjbWRTdGF0dXMgaXMuCisgICoKKyAgKiBUbyBzZXQgY3Vz dG9tIGF0dHJpYnV0ZXMsIHNlZSBQUXNldFJlc3VsdEF0dHJzLiAgVGhhdCBmdW5jdGlvbiBy ZXF1aXJlcworICAqIHRoYXQgdGhlcmUgYXJlIG5vIGF0dHJzIGNvbnRhaW5lZCBpbiB0aGUg cmVzdWx0LCBzbyB0byB1c2UgdGhhdAorICAqIGZ1bmN0aW9uIHlvdSBjYW5ub3QgdXNlIHRo ZSBQR19DT1BZUkVTX0FUVFJTIG9yIFBHX0NPUFlSRVNfVFVQTEVTCisgICogb3B0aW9ucyB3 aXRoIHRoaXMgZnVuY3Rpb24uCisgICoKKyAgKiBPcHRpb25zOgorICAqICAgUEdfQ09QWVJF U19BVFRSUyAtIENvcHkgdGhlIHNvdXJjZSByZXN1bHQncyBhdHRyaWJ1dGVzCisgICoKKyAg KiAgIFBHX0NPUFlSRVNfVFVQTEVTIC0gQ29weSB0aGUgc291cmNlIHJlc3VsdCdzIHR1cGxl cy4gIFRoaXMgaW1wbGllcworICAqICAgY29weWluZyB0aGUgYXR0cnMsIGJlaW5nIGhvdyB0 aGUgYXR0cnMgYXJlIG5lZWRlZCBieSB0aGUgdHVwbGVzLgorICAqCisgICogICBQR19DT1BZ UkVTX0VWRU5UUyAtIENvcHkgdGhlIHNvdXJjZSByZXN1bHQncyBldmVudHMuCisgICoKKyAg KiAgIFBHX0NPUFlSRVNfTk9USUNFSE9PS1MgLSBDb3B5IHRoZSBzb3VyY2UgcmVzdWx0J3Mg bm90aWNlIGhvb2tzLgorICAqLworIAorIFBHcmVzdWx0ICoKKyBQUWNvcHlSZXN1bHQoY29u c3QgUEdyZXN1bHQgKnNyYywgaW50IGZsYWdzKQorIHsKKyAJaW50IGk7CisgCVBHcmVzdWx0 ICpkZXN0OworIAlQR0V2ZW50UmVzdWx0Q29weSBldnQ7CisgCisgCWlmICghc3JjKQorIAkJ cmV0dXJuIE5VTEw7CisgCisgCS8qIEF1dG9tYXRpY2FsbHkgdHVybiBvbiBhdHRycyBmbGFn cyBiZWNhdXNlIHlvdSBjYW4ndCBjb3B5IHR1cGxlcworIAkgKiB3aXRob3V0IGNvcHlpbmcg dGhlIGF0dHJzLiAgX1RVUExFUyBpbXBsaWVzIF9BVFRSUy4KKyAJICovCisgCWlmIChmbGFn cyAmIFBHX0NPUFlSRVNfVFVQTEVTKQorIAkJZmxhZ3MgfD0gUEdfQ09QWVJFU19BVFRSUzsK KyAKKyAJZGVzdCA9IFBRbWFrZUVtcHR5UEdyZXN1bHQoKFBHY29ubiAqKU5VTEwsIFBHUkVT X1RVUExFU19PSyk7CisgCWlmICghZGVzdCkKKyAJCXJldHVybiBOVUxMOworIAorIAkvKiBh bHdheXMgY29weSB0aGVzZSBvdmVyLiAgSXMgY21kU3RhdHVzIHVzZWZ1bCBoZXJlPyAqLwor IAlkZXN0LT5jbGllbnRfZW5jb2RpbmcgPSBzcmMtPmNsaWVudF9lbmNvZGluZzsKKyAJc3Ry Y3B5KGRlc3QtPmNtZFN0YXR1cywgc3JjLT5jbWRTdGF0dXMpOworIAorIAkvKiBXYW50cyB0 byBjb3B5IG5vdGljZSBob29rcyAqLworIAlpZiAoZmxhZ3MgJiBQR19DT1BZUkVTX05PVElD RUhPT0tTKQorIAkJZGVzdC0+bm90aWNlSG9va3MgPSBzcmMtPm5vdGljZUhvb2tzOworIAor IAkvKiBXYW50cyBhdHRycyAqLworIAlpZiAoKGZsYWdzICYgUEdfQ09QWVJFU19BVFRSUykg JiYKKyAJCSAhUFFzZXRSZXN1bHRBdHRycyhkZXN0LCBzcmMtPm51bUF0dHJpYnV0ZXMsIHNy Yy0+YXR0RGVzY3MpKQorIAl7CisgCQlQUWNsZWFyKGRlc3QpOworIAkJcmV0dXJuIE5VTEw7 CisgCX0KKyAKKyAJLyogV2FudHMgdG8gY29weSByZXN1bHQgdHVwbGVzOiB1c2UgUFFzZXR2 YWx1ZSgpLiAqLworIAlpZiAoKGZsYWdzICYgUEdfQ09QWVJFU19UVVBMRVMpICYmIHNyYy0+ bnR1cHMgPiAwKQorIAl7CisgCQlpbnQgdHVwLCBmaWVsZDsKKyAJCWZvciAodHVwID0gMDsg dHVwIDwgc3JjLT5udHVwczsgdHVwKyspCisgCQkJZm9yIChmaWVsZCA9IDA7IGZpZWxkIDwg c3JjLT5udW1BdHRyaWJ1dGVzOyBmaWVsZCsrKQorIAkJCQlQUXNldHZhbHVlKGRlc3QsIHR1 cCwgZmllbGQsIHNyYy0+dHVwbGVzW3R1cF1bZmllbGRdLnZhbHVlLAorIAkJCQkJc3JjLT50 dXBsZXNbdHVwXVtmaWVsZF0ubGVuKTsKKyAJfQorIAorIAkvKiBXYW50cyB0byBjb3B5IFBH RXZlbnRzLiAqLworIAlpZiAoKGZsYWdzICYgUEdfQ09QWVJFU19FVkVOVFMpICYmIHNyYy0+ bkV2ZW50cyA+IDApCisgCXsKKyAJCWRlc3QtPmV2ZW50cyA9IGR1cEV2ZW50cyhzcmMtPmV2 ZW50cywgc3JjLT5uRXZlbnRzKTsKKyAJCWlmICghZGVzdC0+ZXZlbnRzKQorIAkJeworIAkJ CVBRY2xlYXIoZGVzdCk7CisgCQkJcmV0dXJuIE5VTEw7CisgCQl9CisgCisgCQlkZXN0LT5u RXZlbnRzID0gc3JjLT5uRXZlbnRzOworIAl9CisgCisgCS8qIFRyaWdnZXIgUEdFVlRfUkVT VUxUQ09QWSBldmVudCAqLworIAlmb3IgKGkgPSAwOyBpIDwgZGVzdC0+bkV2ZW50czsgaSsr KQorIAl7CisgCQlldnQuc3JjID0gc3JjOworIAkJZXZ0LmRlc3QgPSBkZXN0OworIAkJaWYg KCFkZXN0LT5ldmVudHNbaV0ucHJvYyhQR0VWVF9SRVNVTFRDT1BZLCAmZXZ0LCBkZXN0LT5l dmVudHNbaV0ucGFzc1Rocm91Z2gpKQorIAkJeworIAkJCVBRY2xlYXIoZGVzdCk7CisgCQkJ cmV0dXJuIE5VTEw7CisgCQl9CisgCX0KKyAKKyAJcmV0dXJuIGRlc3Q7CisgfQorIAorIGlu dAorIFBRc2V0dmFsdWUoUEdyZXN1bHQgKnJlcywgaW50IHR1cF9udW0sIGludCBmaWVsZF9u dW0sCisgCWNoYXIgKnZhbHVlLCBpbnQgbGVuKQorIHsKKyAJUEdyZXNBdHRWYWx1ZSAqYXR0 dmFsOworIAorIAlpZiAoIWNoZWNrX2ZpZWxkX251bWJlcihyZXMsIGZpZWxkX251bSkpCisg CQlyZXR1cm4gRkFMU0U7CisgCisgCS8qIEludmFsaWQgdHVwX251bSwgbXVzdCBiZSA8PSBu dHVwcyAqLworIAlpZiAodHVwX251bSA+IHJlcy0+bnR1cHMpCisgCQlyZXR1cm4gRkFMU0U7 CisgCisgCS8qIG5lZWQgdG8gZ3JvdyB0aGUgdHVwbGUgdGFibGUgKi8KKyAJaWYgKHJlcy0+ bnR1cHMgPj0gcmVzLT50dXBBcnJTaXplKQorIAl7CisgCQlpbnQgbiA9IHJlcy0+dHVwQXJy U2l6ZSA/IHJlcy0+dHVwQXJyU2l6ZSAqIDIgOiAxMjg7CisgCQlQR3Jlc0F0dFZhbHVlICoq dHVwczsKKyAKKyAJCWlmIChyZXMtPnR1cGxlcykKKyAJCQl0dXBzID0gKFBHcmVzQXR0VmFs dWUgKiopIHJlYWxsb2MocmVzLT50dXBsZXMsIG4gKiBzaXplb2YoUEdyZXNBdHRWYWx1ZSAq KSk7CisgCQllbHNlCisgCQkJdHVwcyA9IChQR3Jlc0F0dFZhbHVlICoqKSBtYWxsb2MobiAq IHNpemVvZihQR3Jlc0F0dFZhbHVlICopKTsKKyAKKyAJCWlmICghdHVwcykKKyAJCQlyZXR1 cm4gRkFMU0U7CisgCisgCQltZW1zZXQodHVwcyArIHJlcy0+dHVwQXJyU2l6ZSwgMCwKKyAJ CQkobiAtIHJlcy0+dHVwQXJyU2l6ZSkgKiBzaXplb2YoUEdyZXNBdHRWYWx1ZSAqKSk7Cisg CQlyZXMtPnR1cGxlcyA9IHR1cHM7CisgCQlyZXMtPnR1cEFyclNpemUgPSBuOworIAl9Cisg CisgCS8qIG5lZWQgdG8gYWxsb2NhdGUgYSBuZXcgdHVwbGUgKi8KKyAJaWYgKHR1cF9udW0g PT0gcmVzLT5udHVwcyAmJiAhcmVzLT50dXBsZXNbdHVwX251bV0pCisgCXsKKyAJCWludCBp OworIAkJUEdyZXNBdHRWYWx1ZSAqdHVwOworIAorIAkJdHVwID0gKFBHcmVzQXR0VmFsdWUg KikgcHFSZXN1bHRBbGxvYyhyZXMsCisgCQkJcmVzLT5udW1BdHRyaWJ1dGVzICogc2l6ZW9m KFBHcmVzQXR0VmFsdWUpLCBUUlVFKTsKKyAKKyAJCWlmICghdHVwKQorIAkJCXJldHVybiBG QUxTRTsKKyAKKyAJCS8qIGluaXRpYWxpemUgZWFjaCBjb2x1bW4gdG8gTlVMTCAqLworIAkJ Zm9yIChpID0gMDsgaSA8IHJlcy0+bnVtQXR0cmlidXRlczsgaSsrKQorIAkJeworIAkJCXR1 cFtpXS5sZW4gPSBOVUxMX0xFTjsKKyAJCQl0dXBbaV0udmFsdWUgPSByZXMtPm51bGxfZmll bGQ7CisgCQl9CisgCisgCQlyZXMtPnR1cGxlc1t0dXBfbnVtXSA9IHR1cDsKKyAJCXJlcy0+ bnR1cHMrKzsKKyAJfQorIAorIAlhdHR2YWwgPSAmcmVzLT50dXBsZXNbdHVwX251bV1bZmll bGRfbnVtXTsKKyAKKyAJLyogT24gdG9wIG9mIE5VTExfTEVOLCB0cmVhdCBhIE5VTEwgdmFs dWUgYXMgYSBOVUxMIGZpZWxkICovCisgCWlmIChsZW4gPT0gTlVMTF9MRU4gfHwgdmFsdWUg PT0gTlVMTCkKKyAJeworIAkJYXR0dmFsLT5sZW4gPSBOVUxMX0xFTjsKKyAJCWF0dHZhbC0+ dmFsdWUgPSByZXMtPm51bGxfZmllbGQ7CisgCX0KKyAJZWxzZQorIAl7CisgCQlpZiAobGVu IDwgMCkKKyAJCQlsZW4gPSAwOworIAorIAkJaWYgKGxlbiA9PSAwKQorIAkJeworIAkJCWF0 dHZhbC0+bGVuID0gMDsKKyAJCQlhdHR2YWwtPnZhbHVlID0gcmVzLT5udWxsX2ZpZWxkOwor IAkJfQorIAkJZWxzZQorIAkJeworIAkJCWF0dHZhbC0+dmFsdWUgPSAoY2hhciAqKSBQUXJl c3VsdEFsbG9jKHJlcywgbGVuICsgMSk7CisgCQkJaWYgKCFhdHR2YWwtPnZhbHVlKQorIAkJ CQlyZXR1cm4gRkFMU0U7CisgCisgCQkJYXR0dmFsLT5sZW4gPSBsZW47CisgCQkJbWVtY3B5 KGF0dHZhbC0+dmFsdWUsIHZhbHVlLCBsZW4pOworIAkJCWF0dHZhbC0+dmFsdWVbbGVuXSA9 ICdcMCc7CisgCQl9CisgCX0KKyAKKyAJcmV0dXJuIFRSVUU7CisgfQorIAorIHZvaWQgKgor IFBRcmVzdWx0QWxsb2MoUEdyZXN1bHQgKnJlcywgc2l6ZV90IG5CeXRlcykKKyB7CisgCXJl dHVybiBwcVJlc3VsdEFsbG9jKHJlcywgbkJ5dGVzLCBUUlVFKTsKKyB9CisgCiAgLyoKICAg KiBwcVJlc3VsdEFsbG9jIC0KICAgKgkJQWxsb2NhdGUgc3Vic2lkaWFyeSBzdG9yYWdlIGZv ciBhIFBHcmVzdWx0LgogICAqCiAgICogbkJ5dGVzIGlzIHRoZSBhbW91bnQgb2Ygc3BhY2Ug bmVlZGVkIGZvciB0aGUgb2JqZWN0LgogICAqIElmIGlzQmluYXJ5IGlzIHRydWUsIHdlIGFz c3VtZSB0aGF0IHdlIG5lZWQgdG8gYWxpZ24gdGhlIG9iamVjdCBvbgoqKioqKioqKioqKioq KioKKioqIDM0OSwzNjUgKioqKgotLS0gNjQ3LDY3OSAtLS0tCiAgICogUFFjbGVhciAtCiAg ICoJICBmcmVlJ3MgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggYSBQR3Jlc3VsdAogICAq LwogIHZvaWQKICBQUWNsZWFyKFBHcmVzdWx0ICpyZXMpCiAgeworIAlpbnQgaTsKICAJUEdy ZXN1bHRfZGF0YSAqYmxvY2s7CisgCVBHRXZlbnRSZXN1bHREZXN0cm95IGV2dDsKICAKICAJ aWYgKCFyZXMpCiAgCQlyZXR1cm47CiAgCisgCWZvciAoaSA9IDA7IGkgPCByZXMtPm5FdmVu dHM7IGkrKykKKyAJeworIAkJZXZ0LnJlc3VsdCA9IHJlczsKKyAJCSh2b2lkKXJlcy0+ZXZl bnRzW2ldLnByb2MoUEdFVlRfUkVTVUxUREVTVFJPWSwgJmV2dCwgcmVzLT5ldmVudHNbaV0u cGFzc1Rocm91Z2gpOworIAkJZnJlZShyZXMtPmV2ZW50c1tpXS5uYW1lKTsKKyAJfQorIAor IAlpZiAocmVzLT5ldmVudHMpCisgCXsKKyAJCWZyZWUocmVzLT5ldmVudHMpOworIAkJcmVz LT5ldmVudHMgPSBOVUxMOworIAkJcmVzLT5uRXZlbnRzID0gMDsKKyAJfQorIAogIAkvKiBG cmVlIGFsbCB0aGUgc3Vic2lkaWFyeSBibG9ja3MgKi8KICAJd2hpbGUgKChibG9jayA9IHJl cy0+Y3VyQmxvY2spICE9IE5VTEwpCiAgCXsKICAJCXJlcy0+Y3VyQmxvY2sgPSBibG9jay0+ bmV4dDsKICAJCWZyZWUoYmxvY2spOwogIAl9CioqKioqKioqKioqKioqKgoqKiogMTE5Miwx MjA0ICoqKioKICAgKgkgIG1lbW9yeSkuCiAgICovCiAgCiAgUEdyZXN1bHQgKgogIFBRZ2V0 UmVzdWx0KFBHY29ubiAqY29ubikKICB7CiEgCVBHcmVzdWx0ICAgKnJlczsKICAKICAJaWYg KCFjb25uKQogIAkJcmV0dXJuIE5VTEw7CiAgCiAgCS8qIFBhcnNlIGFueSBhdmFpbGFibGUg ZGF0YSwgaWYgb3VyIHN0YXRlIHBlcm1pdHMuICovCiAgCXBhcnNlSW5wdXQoY29ubik7Ci0t LSAxNTA2LDE1MTggLS0tLQogICAqCSAgbWVtb3J5KS4KICAgKi8KICAKICBQR3Jlc3VsdCAq CiAgUFFnZXRSZXN1bHQoUEdjb25uICpjb25uKQogIHsKISAJUEdyZXN1bHQgICAqcmVzPU5V TEw7CiAgCiAgCWlmICghY29ubikKICAJCXJldHVybiBOVUxMOwogIAogIAkvKiBQYXJzZSBh bnkgYXZhaWxhYmxlIGRhdGEsIGlmIG91ciBzdGF0ZSBwZXJtaXRzLiAqLwogIAlwYXJzZUlu cHV0KGNvbm4pOwoqKioqKioqKioqKioqKioKKioqIDEyNjcsMTI3OCAqKioqCi0tLSAxNTgx LDE2MTcgLS0tLQogIAkJCQkJCQkgIGxpYnBxX2dldHRleHQoInVuZXhwZWN0ZWQgYXN5bmNT dGF0dXM6ICVkXG4iKSwKICAJCQkJCQkJICAoaW50KSBjb25uLT5hc3luY1N0YXR1cyk7CiAg CQkJcmVzID0gUFFtYWtlRW1wdHlQR3Jlc3VsdChjb25uLCBQR1JFU19GQVRBTF9FUlJPUik7 CiAgCQkJYnJlYWs7CiAgCX0KICAKKyAJaWYgKHJlcykKKyAJeworIAkJaW50IGk7CisgCQlQ R0V2ZW50UmVzdWx0Q3JlYXRlIGV2dDsKKyAKKyAJCWZvciAoaSA9IDA7IGkgPCByZXMtPm5F dmVudHM7IGkrKykKKyAJCXsKKyAJCQlldnQuY29ubiA9IGNvbm47CisgCQkJZXZ0LnJlc3Vs dCA9IHJlczsKKyAKKyAJCQlpZiAoIXJlcy0+ZXZlbnRzW2ldLnByb2MoUEdFVlRfUkVTVUxU Q1JFQVRFLCAmZXZ0LCByZXMtPmV2ZW50c1tpXS5wYXNzVGhyb3VnaCkpCisgCQkJeworIAkJ CQljaGFyIG1zZ1syNTZdOworIAorIAkJCQlzcHJpbnRmKG1zZywKKyAJCQkJCSJQR0V2ZW50 UHJvYyBcIiVzXCIgZmFpbGVkIGR1cmluZyBQR0VWVF9SRVNVTFRDUkVBVEUgZXZlbnQiLAor IAkJCQkJcmVzLT5ldmVudHNbaV0ubmFtZSk7CisgCisgCQkJCXBxU2V0UmVzdWx0RXJyb3Io cmVzLCBtc2cpOworIAkJCQlyZXMtPnJlc3VsdFN0YXR1cyA9IFBHUkVTX0ZBVEFMX0VSUk9S OworIAkJCQlicmVhazsKKyAJCQl9CisgCQl9CisgCX0KKyAKICAJcmV0dXJuIHJlczsKICB9 CiAgCiAgCiAgLyoKICAgKiBQUWV4ZWMKSW5kZXg6IHNyYy9pbnRlcmZhY2VzL2xpYnBxL2xp YnBxLWZlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL3Byb2plY3RzL2N2c3Jvb3QvcGdz cWwvc3JjL2ludGVyZmFjZXMvbGlicHEvbGlicHEtZmUuaCx2CnJldHJpZXZpbmcgcmV2aXNp b24gMS4xNDIKZGlmZiAtQzYgLXIxLjE0MiBsaWJwcS1mZS5oCioqKiBzcmMvaW50ZXJmYWNl cy9saWJwcS9saWJwcS1mZS5oCTE5IE1hciAyMDA4IDAwOjM5OjMzIC0wMDAwCTEuMTQyCi0t LSBzcmMvaW50ZXJmYWNlcy9saWJwcS9saWJwcS1mZS5oCTE3IFNlcCAyMDA4IDAzOjU0OjIw IC0wMDAwCioqKioqKioqKioqKioqKgoqKiogMjUsMzYgKioqKgotLS0gMjUsNDUgLS0tLQog IC8qCiAgICogcG9zdGdyZXNfZXh0LmggZGVmaW5lcyB0aGUgYmFja2VuZCdzIGV4dGVybmFs bHkgdmlzaWJsZSB0eXBlcywKICAgKiBzdWNoIGFzIE9pZC4KICAgKi8KICAjaW5jbHVkZSAi cG9zdGdyZXNfZXh0LmgiCiAgCisgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgKiBP cHRpb25zIGZvciBQUWNvcHlSZXN1bHQKKyAgKi8KKyAKKyAjZGVmaW5lIFBHX0NPUFlSRVNf QVRUUlMgICAgICAgICAgMHgwMQorICNkZWZpbmUgUEdfQ09QWVJFU19UVVBMRVMgICAgICAg ICAweDAyIC8qIEltcGxpZXMgUEdfQ09QWVJFU19BVFRSUyAqLworICNkZWZpbmUgUEdfQ09Q WVJFU19FVkVOVFMgICAgICAgICAweDA0CisgI2RlZmluZSBQR19DT1BZUkVTX05PVElDRUhP T0tTICAgIDB4MDgKKyAKICAvKiBBcHBsaWNhdGlvbi12aXNpYmxlIGVudW0gdHlwZXMgKi8K ICAKICB0eXBlZGVmIGVudW0KICB7CiAgCS8qCiAgCSAqIEFsdGhvdWdoIGl0IGlzIG9rYXkg dG8gYWRkIHRvIHRoaXMgbGlzdCwgdmFsdWVzIHdoaWNoIGJlY29tZSB1bnVzZWQKKioqKioq KioqKioqKioqCioqKiAxOTAsMjAxICoqKioKLS0tIDE5OSwyMjUgLS0tLQogIAkJaW50CQkg ICAqcHRyOwkJLyogY2FuJ3QgdXNlIHZvaWQgKGRlYyBjb21waWxlciBiYXJmcykJICovCiAg CQlpbnQJCQlpbnRlZ2VyOwogIAl9CQkJdTsKICB9IFBRQXJnQmxvY2s7CiAgCiAgLyogLS0t LS0tLS0tLS0tLS0tLQorICAqIFBHcmVzQXR0RGVzYyAtLSBEYXRhIGFib3V0IGEgc2luZ2xl IGF0dHJpYnV0ZSAoY29sdW1uKSBvZiBhIHF1ZXJ5IHJlc3VsdAorICAqIC0tLS0tLS0tLS0t LS0tLS0KKyAgKi8KKyB0eXBlZGVmIHN0cnVjdCBwZ3Jlc0F0dERlc2MKKyB7CisgCWNoYXIJ ICAgKm5hbWU7CQkJLyogY29sdW1uIG5hbWUgKi8KKyAJT2lkCQkJdGFibGVpZDsJCS8qIHNv dXJjZSB0YWJsZSwgaWYga25vd24gKi8KKyAJaW50CQkJY29sdW1uaWQ7CQkvKiBzb3VyY2Ug Y29sdW1uLCBpZiBrbm93biAqLworIAlpbnQJCQlmb3JtYXQ7CQkJLyogZm9ybWF0IGNvZGUg Zm9yIHZhbHVlICh0ZXh0L2JpbmFyeSkgKi8KKyAJT2lkCQkJdHlwaWQ7CQkJLyogdHlwZSBp ZCAqLworIAlpbnQJCQl0eXBsZW47CQkJLyogdHlwZSBzaXplICovCisgCWludAkJCWF0dHR5 cG1vZDsgIC8qIHR5cGUtc3BlY2lmaWMgbW9kaWZpZXIgaW5mbyAqLworIH0gUEdyZXNBdHRE ZXNjOworIAorIC8qIC0tLS0tLS0tLS0tLS0tLS0KICAgKiBFeHBvcnRlZCBmdW5jdGlvbnMg b2YgbGlicHEKICAgKiAtLS0tLS0tLS0tLS0tLS0tCiAgICovCiAgCiAgLyogPT09CWluIGZl LWNvbm5lY3QuYyA9PT0gKi8KICAKKioqKioqKioqKioqKioqCioqKiA0MzQsNDQ1ICoqKioK LS0tIDQ1OCw0ODcgLS0tLQogICAqIE1ha2UgYW4gZW1wdHkgUEdyZXN1bHQgd2l0aCBnaXZl biBzdGF0dXMgKHNvbWUgYXBwcyBmaW5kIHRoaXMKICAgKiB1c2VmdWwpLiBJZiBjb25uIGlz IG5vdCBOVUxMIGFuZCBzdGF0dXMgaW5kaWNhdGVzIGFuIGVycm9yLCB0aGUKICAgKiBjb25u J3MgZXJyb3JNZXNzYWdlIGlzIGNvcGllZC4KICAgKi8KICBleHRlcm4gUEdyZXN1bHQgKlBR bWFrZUVtcHR5UEdyZXN1bHQoUEdjb25uICpjb25uLCBFeGVjU3RhdHVzVHlwZSBzdGF0dXMp OwogIAorIC8qIG1ha2VzIGEgY29weSBvZiBhIHJlc3VsdCAqLworIGV4dGVybiBQR3Jlc3Vs dCAqUFFjb3B5UmVzdWx0KGNvbnN0IFBHcmVzdWx0ICpzcmMsIGludCBmbGFncyk7CisgCisg LyogU2V0cyB0aGUgYXR0cmlidXRlcyBvZiBhIHJlc3VsdCwgbm8gYXR0cmlidXRlcyBjYW4g YWxyZWFkeSBleGlzdC4gKi8KKyBleHRlcm4gaW50IFBRc2V0UmVzdWx0QXR0cnMoUEdyZXN1 bHQgKnJlcywgaW50IG51bUF0dHJpYnV0ZXMsIFBHcmVzQXR0RGVzYyAqYXR0RGVzY3MpOwor IAorIC8qIEFsbG9jYXRlIHN1YnNpZGlhcnkgc3RvcmFnZSBmb3IgYSBQR3Jlc3VsdC4gKi8K KyBleHRlcm4gdm9pZCAqUFFyZXN1bHRBbGxvYyhQR3Jlc3VsdCAqcmVzLCBzaXplX3QgbkJ5 dGVzKTsKKyAKKyAvKgorICAqIFNldHMgdGhlIHZhbHVlIGZvciBhIHR1cGxlIGZpZWxkLiAg VGhlIHR1cF9udW0gbXVzdCBiZSBsZXNzIHRoYW4gb3IKKyAgKiBlcXVhbCB0byBQUW50dXBs ZXMocmVzKS4gIFRoaXMgZnVuY3Rpb24gd2lsbCBnZW5lcmF0ZSB0dXBsZXMgYXMgbmVlZGVk LgorICAqIEEgbmV3IHR1cGxlIGlzIGdlbmVyYXRlZCB3aGVuIHR1cF9udW0gZXF1YWxzIFBR bnR1cGxlcyhyZXMpIGFuZCB0aGVyZQorICAqIGFyZSBubyBmaWVsZHMgZGVmaW5lZCBmb3Ig dGhhdCB0dXBsZS4KKyAgKgorICAqIFJldHVybnMgYSBub24temVybyB2YWx1ZSBmb3Igc3Vj Y2VzcyBhbmQgemVybyBmb3IgZmFpbHVyZS4KKyAgKi8KKyBleHRlcm4gaW50IFBRc2V0dmFs dWUoUEdyZXN1bHQgKnJlcywgaW50IHR1cF9udW0sIGludCBmaWVsZF9udW0sIGNoYXIgKnZh bHVlLCBpbnQgbGVuKTsKICAKICAvKiBRdW90aW5nIHN0cmluZ3MgYmVmb3JlIGluY2x1c2lv biBpbiBxdWVyaWVzLiAqLwogIGV4dGVybiBzaXplX3QgUFFlc2NhcGVTdHJpbmdDb25uKFBH Y29ubiAqY29ubiwKICAJCQkJICAgY2hhciAqdG8sIGNvbnN0IGNoYXIgKmZyb20sIHNpemVf dCBsZW5ndGgsCiAgCQkJCSAgIGludCAqZXJyb3IpOwogIGV4dGVybiB1bnNpZ25lZCBjaGFy ICpQUWVzY2FwZUJ5dGVhQ29ubihQR2Nvbm4gKmNvbm4sCkluZGV4OiBzcmMvaW50ZXJmYWNl cy9saWJwcS9saWJwcS1pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvcHJvamVjdHMv Y3Zzcm9vdC9wZ3NxbC9zcmMvaW50ZXJmYWNlcy9saWJwcS9saWJwcS1pbnQuaCx2CnJldHJp ZXZpbmcgcmV2aXNpb24gMS4xMzEKZGlmZiAtQzYgLXIxLjEzMSBsaWJwcS1pbnQuaAoqKiog c3JjL2ludGVyZmFjZXMvbGlicHEvbGlicHEtaW50LmgJMjkgTWF5IDIwMDggMjI6MDI6NDQg LTAwMDAJMS4xMzEKLS0tIHNyYy9pbnRlcmZhY2VzL2xpYnBxL2xpYnBxLWludC5oCTE3IFNl cCAyMDA4IDAzOjU0OjIwIC0wMDAwCioqKioqKioqKioqKioqKgoqKiogMTksMzAgKioqKgot LS0gMTksMzEgLS0tLQogIAogICNpZm5kZWYgTElCUFFfSU5UX0gKICAjZGVmaW5lIExJQlBR X0lOVF9ICiAgCiAgLyogV2UgYXNzdW1lIGxpYnBxLWZlLmggaGFzIGFscmVhZHkgYmVlbiBp bmNsdWRlZC4gKi8KICAjaW5jbHVkZSAicG9zdGdyZXNfZmUuaCIKKyAjaW5jbHVkZSAibGli cHEtZXZlbnRzLmgiCiAgCiAgI2luY2x1ZGUgPHRpbWUuaD4KICAjaW5jbHVkZSA8c3lzL3R5 cGVzLmg+CiAgI2lmbmRlZiBXSU4zMgogICNpbmNsdWRlIDxzeXMvdGltZS5oPgogICNlbmRp ZgoqKioqKioqKioqKioqKioKKioqIDk3LDEyMSAqKioqCiAgdW5pb24gcGdyZXN1bHRfZGF0 YQogIHsKICAJUEdyZXN1bHRfZGF0YSAqbmV4dDsJCS8qIGxpbmsgdG8gbmV4dCBibG9jaywg b3IgTlVMTCAqLwogIAljaGFyCQlzcGFjZVsxXTsJCS8qIGR1bW15IGZvciBhY2Nlc3Npbmcg YmxvY2sgYXMgYnl0ZXMgKi8KICB9OwogIAotIC8qIERhdGEgYWJvdXQgYSBzaW5nbGUgYXR0 cmlidXRlIChjb2x1bW4pIG9mIGEgcXVlcnkgcmVzdWx0ICovCi0gCi0gdHlwZWRlZiBzdHJ1 Y3QgcGdyZXNBdHREZXNjCi0gewotIAljaGFyCSAgICpuYW1lOwkJCS8qIGNvbHVtbiBuYW1l ICovCi0gCU9pZAkJCXRhYmxlaWQ7CQkvKiBzb3VyY2UgdGFibGUsIGlmIGtub3duICovCi0g CWludAkJCWNvbHVtbmlkOwkJLyogc291cmNlIGNvbHVtbiwgaWYga25vd24gKi8KLSAJaW50 CQkJZm9ybWF0OwkJCS8qIGZvcm1hdCBjb2RlIGZvciB2YWx1ZSAodGV4dC9iaW5hcnkpICov Ci0gCU9pZAkJCXR5cGlkOwkJCS8qIHR5cGUgaWQgKi8KLSAJaW50CQkJdHlwbGVuOwkJCS8q IHR5cGUgc2l6ZSAqLwotIAlpbnQJCQlhdHR0eXBtb2Q7CQkvKiB0eXBlLXNwZWNpZmljIG1v ZGlmaWVyIGluZm8gKi8KLSB9IFBHcmVzQXR0RGVzYzsKLSAKICAvKiBEYXRhIGFib3V0IGEg c2luZ2xlIHBhcmFtZXRlciBvZiBhIHByZXBhcmVkIHN0YXRlbWVudCAqLwogIHR5cGVkZWYg c3RydWN0IHBncmVzUGFyYW1EZXNjCiAgewogIAlPaWQJCQl0eXBpZDsJCQkvKiB0eXBlIGlk ICovCiAgfSBQR3Jlc1BhcmFtRGVzYzsKICAKLS0tIDk4LDEwOSAtLS0tCioqKioqKioqKioq KioqKgoqKiogMTU5LDE3MCAqKioqCi0tLSAxNDcsMTY2IC0tLS0KICAJUFFub3RpY2VSZWNl aXZlciBub3RpY2VSZWM7IC8qIG5vdGljZSBtZXNzYWdlIHJlY2VpdmVyICovCiAgCXZvaWQJ ICAgKm5vdGljZVJlY0FyZzsKICAJUFFub3RpY2VQcm9jZXNzb3Igbm90aWNlUHJvYzsJCS8q IG5vdGljZSBtZXNzYWdlIHByb2Nlc3NvciAqLwogIAl2b2lkCSAgICpub3RpY2VQcm9jQXJn OwogIH0gUEdOb3RpY2VIb29rczsKICAKKyB0eXBlZGVmIHN0cnVjdAorIHsKKyAJY2hhcgkg ICAqbmFtZTsJLyogZm9yIGVycm9yIG1lc3NhZ2VzICovCisgCXZvaWQJICAgKnBhc3NUaHJv dWdoOyAvKiBwb2ludGVyIHN1cHBsaWVkIGJ5IHVzZXIgKi8KKyAJdm9pZAkgICAqZGF0YTsg Lyogc3RhdGUgKGluc3RhbmNlKSBkYXRhLCBvcHRpb25hbGx5IGdlbmVyYXRlZCBieSBldmVu dCBwcm9jICovCisgCVBHRXZlbnRQcm9jIHByb2M7IC8qIHRoZSBmdW5jdGlvbiB0byBjYWxs IG9uIGV2ZW50cyAqLworIH0gUEdFdmVudDsKKyAKICBzdHJ1Y3QgcGdfcmVzdWx0CiAgewog IAlpbnQJCQludHVwczsKICAJaW50CQkJbnVtQXR0cmlidXRlczsKICAJUEdyZXNBdHREZXNj ICphdHREZXNjczsKICAJUEdyZXNBdHRWYWx1ZSAqKnR1cGxlczsJCS8qIGVhY2ggUEdyZXNU dXBsZSBpcyBhbiBhcnJheSBvZgoqKioqKioqKioqKioqKioKKioqIDE4MSwxOTIgKioqKgot LS0gMTc3LDE5MiAtLS0tCiAgCSAqIFRoZXNlIGZpZWxkcyBhcmUgY29waWVkIGZyb20gdGhl IG9yaWdpbmF0aW5nIFBHY29ubiwgc28gdGhhdCBvcGVyYXRpb25zCiAgCSAqIG9uIHRoZSBQ R3Jlc3VsdCBkb24ndCBoYXZlIHRvIHJlZmVyZW5jZSB0aGUgUEdjb25uLgogIAkgKi8KICAJ UEdOb3RpY2VIb29rcyBub3RpY2VIb29rczsKICAJaW50CQkJY2xpZW50X2VuY29kaW5nOwkv KiBlbmNvZGluZyBpZCAqLwogIAorIAkvKiByZWdpc3RlcmVkIGV2ZW50cywgY29waWVkIGZy b20gY29ubiAqLworIAlpbnQgbkV2ZW50czsKKyAJUEdFdmVudCAqZXZlbnRzOworIAogIAkv KgogIAkgKiBFcnJvciBpbmZvcm1hdGlvbiAoYWxsIE5VTEwgaWYgbm90IGFuIGVycm9yIHJl c3VsdCkuICBlcnJNc2cgaXMgdGhlCiAgCSAqICJvdmVyYWxsIiBlcnJvciBtZXNzYWdlIHJl dHVybmVkIGJ5IFBRcmVzdWx0RXJyb3JNZXNzYWdlLiAgSWYgd2UgaGF2ZQogIAkgKiBwZXIt ZmllbGQgaW5mbyB0aGVuIGl0IGlzIHN0b3JlZCBpbiBhIGxpbmtlZCBsaXN0LgogIAkgKi8K ICAJY2hhcgkgICAqZXJyTXNnOwkJCS8qIGVycm9yIG1lc3NhZ2UsIG9yIE5VTEwgaWYgbm8g ZXJyb3IgKi8KKioqKioqKioqKioqKioqCioqKiAzMDAsMzExICoqKioKLS0tIDMwMCwzMTYg LS0tLQogIAkvKiBPcHRpb25hbCBmaWxlIHRvIHdyaXRlIHRyYWNlIGluZm8gdG8gKi8KICAJ RklMRQkgICAqUGZkZWJ1ZzsKICAKICAJLyogQ2FsbGJhY2sgcHJvY2VkdXJlcyBmb3Igbm90 aWNlIG1lc3NhZ2UgcHJvY2Vzc2luZyAqLwogIAlQR05vdGljZUhvb2tzIG5vdGljZUhvb2tz OwogIAorIAkvKiByZWdpc3RlcmVkIGV2ZW50cyB2aWEgUFFyZWdpc3RlckV2ZW50UHJvYyAq LworIAlpbnQgbkV2ZW50czsKKyAJaW50IGV2ZW50QXJyU2l6ZTsKKyAJUEdFdmVudCAqZXZl bnRzOworIAogIAkvKiBTdGF0dXMgaW5kaWNhdG9ycyAqLwogIAlDb25uU3RhdHVzVHlwZSBz dGF0dXM7CiAgCVBHQXN5bmNTdGF0dXNUeXBlIGFzeW5jU3RhdHVzOwogIAlQR1RyYW5zYWN0 aW9uU3RhdHVzVHlwZSB4YWN0U3RhdHVzOyAvKiBuZXZlciBjaGFuZ2VzIHRvIEFDVElWRSAq LwogIAlQR1F1ZXJ5Q2xhc3MgcXVlcnljbGFzczsKICAJY2hhcgkgICAqbGFzdF9xdWVyeTsJ CS8qIGxhc3QgU1FMIGNvbW1hbmQsIG9yIE5VTEwgaWYgdW5rbm93biAqLwo= --------------020105090504060809010008--