From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with archive (Exim 4.43) id 1KEamp-0002yg-Al for mharc-grub-devel@gnu.org; Thu, 03 Jul 2008 22:12:35 -0400 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1KEamn-0002yN-TY for grub-devel@gnu.org; Thu, 03 Jul 2008 22:12:33 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1KEamm-0002xw-CW for grub-devel@gnu.org; Thu, 03 Jul 2008 22:12:33 -0400 Received: from [199.232.76.173] (port=40325 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1KEamm-0002xs-94 for grub-devel@gnu.org; Thu, 03 Jul 2008 22:12:32 -0400 Received: from rv-out-0708.google.com ([209.85.198.243]:17831) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1KEaml-00043a-Ei for grub-devel@gnu.org; Thu, 03 Jul 2008 22:12:32 -0400 Received: by rv-out-0708.google.com with SMTP id k29so1234027rvb.6 for ; Thu, 03 Jul 2008 19:12:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:subject:from:to:content-type :date:message-id:mime-version:x-mailer; bh=LO2QGLjduZ5I6UGT+xItstf4WeLcmg5cABsLGUwIr/s=; b=UmgK9TROnIED7y5GR+1os0UCKdWg/QEp59ehxIeVI8ontisPx559D+FdUKIE4xubAf FTkrj/5JW1EVVjl2cJqAjrLOmgEdyEe3JRJuXbJtlkFKGMQ/YT1nuLqkzmhQuov1140o fgmv26GRmGXPW/snInEj1FZh8eVCkeQwmJrWo= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=subject:from:to:content-type:date:message-id:mime-version:x-mailer; b=G1kmamnbnQC2CRwXPJtpMkVHTnyhsRW4hFLkD4aF+2oScFG84CHXjtvESj4PIJYVkf JO02sQpcNksOedgyFChQGC7pXi9Sz5tWJqJy/8O/RS+kkxCyNB+TPCCZq9pyIz6btvya guC5UKcPXMHbHkyM5D7/5ZO0jG3y3qTZQNMOE= Received: by 10.115.88.12 with SMTP id q12mr63877wal.143.1215137550637; Thu, 03 Jul 2008 19:12:30 -0700 (PDT) Received: from ?192.168.1.100? ( [213.37.137.93]) by mx.google.com with ESMTPS id u14sm1630399gvf.6.2008.07.03.19.11.57 (version=SSLv3 cipher=RC4-MD5); Thu, 03 Jul 2008 19:12:29 -0700 (PDT) From: Javier =?ISO-8859-1?Q?Mart=EDn?= To: The development of GRUB 2 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="=-mMlnjJeTLOVcI4SRlguk" Date: Fri, 04 Jul 2008 04:12:08 +0200 Message-Id: <1215137528.26019.58.camel@localhost> Mime-Version: 1.0 X-Mailer: Evolution 2.22.2 X-detected-kernel: by monty-python.gnu.org: Linux 2.6 (newer, 2) Subject: [PATCH] Drivemap module X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: The development of GRUB 2 List-Id: The development of GRUB 2 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 04 Jul 2008 02:12:34 -0000 --=-mMlnjJeTLOVcI4SRlguk Content-Type: multipart/mixed; boundary="=-tRC6WPh3AAXXvnrVuGNR" --=-tRC6WPh3AAXXvnrVuGNR Content-Type: text/plain Content-Transfer-Encoding: quoted-printable Just an updated version of the patch that adds support for device-like names instead of raw BIOS disk numbers, i.e. this is now supported: grub> drivemap (hd0) (hd1) In addition to the already supported: grub> drivemap (hd0) 0x81 The effect is the same: the second BIOS hard drive will map to (hd0) through the installed int13h routine. The new syntax does not require the target device name to exist (hd1 need not exist in my example), and the parsing is very simple: it accepts names like (fdN) and (hdN) with and without parenthesis, and with N ranging from 0 to 127, thus allowing the full 0x00-0xFF range even though most BIOS-probing OSes don't bother going any further than fd7 and hd7 respectively. For newcomers, full info on the patch is available on the list archives - it was proposed on June and its discussion deferred for "two or three weeks" because the developers were busy. --=-tRC6WPh3AAXXvnrVuGNR Content-Disposition: attachment; filename=drivemap.patch Content-Type: text/x-patch; name=drivemap.patch; charset=UTF-8 Content-Transfer-Encoding: base64 SW5kZXg6IGNvbW1hbmRzL2kzODYvcGMvZHJpdmVtYXAuYw0KPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6 IGNvbW1hbmRzL2kzODYvcGMvZHJpdmVtYXAuYw0KZGlmZiAtTiBjb21tYW5kcy9pMzg2L3BjL2Ry aXZlbWFwLmMNCi0tLSAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMA0KKysrIGNv bW1hbmRzL2kzODYvcGMvZHJpdmVtYXAuYwkyIEp1bCAyMDA4IDAxOjEyOjM2IC0wMDAwDQpAQCAt MCwwICsxLDM5MSBAQA0KKy8qIGRyaXZlbWFwLmMgLSBjb21tYW5kIHRvIG1hbmFnZSB0aGUgQklP UyBkcml2ZSBtYXBwaW5ncy4gICovDQorLyoNCisgKiAgR1JVQiAgLS0gIEdSYW5kIFVuaWZpZWQg Qm9vdGxvYWRlcg0KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbiwgSW5jLg0KKyAqDQorICogIEdSVUIgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRp c3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQ0KKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQ0KKyAqICB0aGUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBv cg0KKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KKyAqDQorICogIEdS VUIgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCisg KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy cmFudHkgb2YNCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFLiAgU2VlIHRoZQ0KKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLg0KKyAqDQorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQorICogIGFsb25nIHdpdGggR1JVQi4g IElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4NCisgKi8NCisNCisj aW5jbHVkZSA8Z3J1Yi9ub3JtYWwuaD4NCisjaW5jbHVkZSA8Z3J1Yi9kbC5oPg0KKyNpbmNsdWRl IDxncnViL21tLmg+DQorI2luY2x1ZGUgPGdydWIvbWlzYy5oPg0KKyNpbmNsdWRlIDxncnViL2Rp c2suaD4NCisjaW5jbHVkZSA8Z3J1Yi9sb2FkZXIuaD4NCisjaW5jbHVkZSA8Z3J1Yi9tYWNoaW5l L2xvYWRlci5oPg0KKyNpbmNsdWRlIDxncnViL21hY2hpbmUvYmlvc2Rpc2suaD4NCisNCisvKiBV bmNvbW1lbnQgdGhlIGZvbGxvd2luZyBsaW5lIHRvIGVuYWJsZSBkZWJ1Z2dpbmcgb3V0cHV0ICov DQorLyogI2RlZmluZSBEUklWRU1BUF9ERUJVRyAqLw0KKw0KKyNpZmRlZiBEUklWRU1BUF9ERUJV Rw0KKyMgZGVmaW5lIERCR19QUklOVEYoLi4uKSBncnViX3ByaW50ZihfX1ZBX0FSR1NfXykNCisj ZWxzZQ0KKyMgZGVmaW5lIERCR19QUklOVEYoLi4uKQ0KKyNlbmRpZg0KKw0KK3N0YXRpYyBjb25z dCBzdHJ1Y3QgZ3J1Yl9hcmdfb3B0aW9uIG9wdGlvbnNbXSA9IHsNCisgIHsibGlzdCIsICdsJywg MCwgInNob3cgdGhlIGN1cnJlbnQgbWFwcGluZ3MiLCAwLCAwfSwNCisgIHsicmVzZXQiLCAncics IDAsICJyZXNldCBhbGwgbWFwcGluZ3MgdG8gdGhlIGRlZmF1bHQgdmFsdWVzIiwgMCwgMH0sDQor ICB7MCwgMCwgMCwgMCwgMCwgMH0NCit9Ow0KKw0KKy8qIEFTU0VNQkxZIFNZTUJPTFMvVkFSUy9G VU5DUyAtIHN0YXJ0ICovDQorDQorLyogcmVhbG1vZGUgZmFyIHB0ciA9IDIgKiAxNmIgKi8NCitl eHRlcm4gZ3J1Yl91aW50MzJfdCBFWFBPUlRfVkFSIChncnViX2RyaXZlbWFwX2ludDEzX29sZGhh bmRsZXIpOw0KKy8qIFNpemUgb2YgdGhlIHNlY3Rpb24gdG8gYmUgY29waWVkICovDQorZXh0ZXJu IGdydWJfdWludDE2X3QgRVhQT1JUX1ZBUiAoZ3J1Yl9kcml2ZW1hcF9pbnQxM19zaXplKTsNCisN CisvKiBOT1QgYSB0eXBvIC0ganVzdCBuZWVkIHRoZSBzeW1ib2wncyBhZGRyZXNzIHdpdGggJnN5 bWJvbCAqLw0KK3R5cGVkZWYgdm9pZCBncnViX3N5bWJvbF90Ow0KK2V4dGVybiBncnViX3N5bWJv bF90IEVYUE9SVF9WQVIgKGdydWJfZHJpdmVtYXBfaW50MTNfaGFuZGxlcl9iYXNlKTsNCitleHRl cm4gZ3J1Yl9zeW1ib2xfdCBFWFBPUlRfVkFSIChncnViX2RyaXZlbWFwX2ludDEzX21hcHN0YXJ0 KTsNCisNCit2b2lkIEVYUE9SVF9GVU5DIChncnViX2RyaXZlbWFwX2ludDEzX2hhbmRsZXIpICh2 b2lkKTsNCisNCisvKiBBU1NFTUJMWSBTWU1CT0xTL1ZBUlMvRlVOQ1MgLSBlbmQgKi8NCisNCitz dGF0aWMgZ3J1Yl9wcmVib290X2hvb2tpZCBpbnN0aGFuZGxlcl9ob29rID0gMDsNCisNCit0eXBl ZGVmIHN0cnVjdCBkcml2ZW1hcF9ub2RlDQorew0KKyAgZ3J1Yl91aW50OF90IG5ld2RyaXZlOw0K KyAgZ3J1Yl91aW50OF90IHJlZGlydG87DQorICBzdHJ1Y3QgZHJpdmVtYXBfbm9kZSAqbmV4dDsN Cit9IGRyaXZlbWFwX25vZGVfdDsNCisNCitzdGF0aWMgZHJpdmVtYXBfbm9kZV90ICpkcml2ZW1h cCA9IDA7DQorc3RhdGljIGdydWJfZXJyX3QgaW5zdGFsbF9pbnQxM19oYW5kbGVyICh2b2lkKTsN CisNCitzdGF0aWMgZ3J1Yl9lcnJfdA0KK2RyaXZlbWFwX3NldCAoZ3J1Yl91aW50OF90IG5ld2Ry aXZlLCBncnViX3VpbnQ4X3QgcmVkaXJ0bykNCisgIC8qIFB1dHMgdGhlIHNwZWNpZmllZCBtYXBw aW5nIGludG8gdGhlIHRhYmxlLCByZXBsYWNpbmcgYW4gZXhpc3RpbmcgbWFwcGluZw0KKyAgICog Zm9yIG5ld2RyaXZlIG9yIGFkZGluZyBhIG5ldyBvbmUgaWYgcmVxdWlyZWQuICovDQorew0KKyAg ZHJpdmVtYXBfbm9kZV90ICptYXBwaW5nID0gMCwgKnNlYXJjaCA9IGRyaXZlbWFwOw0KKyAgd2hp bGUgKHNlYXJjaCkNCisgICAgew0KKyAgICAgIGlmIChzZWFyY2gtPm5ld2RyaXZlID09IG5ld2Ry aXZlKQ0KKyAgICAgICAgew0KKyAgICAgICAgICBtYXBwaW5nID0gc2VhcmNoOw0KKyAgICAgICAg ICBicmVhazsNCisgICAgICAgIH0NCisgICAgICBzZWFyY2ggPSBzZWFyY2gtPm5leHQ7DQorICAg IH0NCisNCisgIGlmIChtYXBwaW5nKSAgLyogVGhlcmUgd2FzIGEgbWFwcGluZyBhbHJlYWR5IGlu IHBsYWNlLCBtb2RpZnkgaXQgKi8NCisgICAgbWFwcGluZy0+cmVkaXJ0byA9IHJlZGlydG87DQor ICBlbHNlICAvKiBDcmVhdGUgYSBuZXcgbWFwcGluZyBhbmQgYWRkIGl0IHRvIHRoZSBoZWFkIG9m IHRoZSBsaXN0ICovDQorICAgIHsNCisgICAgICBtYXBwaW5nID0gZ3J1Yl9tYWxsb2MgKHNpemVv ZiAoZHJpdmVtYXBfbm9kZV90KSk7DQorICAgICAgaWYgKCFtYXBwaW5nKQ0KKyAgICAgICAgcmV0 dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX09VVF9PRl9NRU1PUlksDQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgImNhbm5vdCBhbGxvY2F0ZSBtYXAgZW50cnksIG5vdCBlbm91Z2ggbWVtb3J5 Iik7DQorICAgICAgbWFwcGluZy0+bmV3ZHJpdmUgPSBuZXdkcml2ZTsNCisgICAgICBtYXBwaW5n LT5yZWRpcnRvID0gcmVkaXJ0bzsNCisgICAgICBtYXBwaW5nLT5uZXh0ID0gZHJpdmVtYXA7DQor ICAgICAgZHJpdmVtYXAgPSBtYXBwaW5nOw0KKyAgICB9DQorICByZXR1cm4gR1JVQl9FUlJfTk9O RTsNCit9DQorDQorc3RhdGljIHZvaWQNCitkcml2ZW1hcF9yZW1vdmUgKGdydWJfdWludDhfdCBu ZXdkcml2ZSkNCisgIC8qIFJlbW92ZXMgdGhlIG1hcHBpbmcgZm9yIG5ld2RyaXZlIGZyb20gdGhl IHRhYmxlLiBJZiB0aGVyZSBpcyBubyBtYXBwaW5nLA0KKyAgICogdGhlbiB0aGlzIGZ1bmN0aW9u IGJlaGF2ZXMgbGlrZSBhIG5vLW9wIG9uIHRoZSBtYXAuICovDQorew0KKyAgZHJpdmVtYXBfbm9k ZV90ICptYXBwaW5nID0gMCwgKnNlYXJjaCA9IGRyaXZlbWFwLCAqcHJldmlvdXMgPSAwOw0KKyAg d2hpbGUgKHNlYXJjaCkNCisgICAgew0KKyAgICAgIGlmIChzZWFyY2gtPm5ld2RyaXZlID09IG5l d2RyaXZlKQ0KKyAgICAgICAgew0KKyAgICAgICAgICBtYXBwaW5nID0gc2VhcmNoOw0KKyAgICAg ICAgICBicmVhazsNCisgICAgICAgIH0NCisgICAgICBwcmV2aW91cyA9IHNlYXJjaDsNCisgICAg ICBzZWFyY2ggPSBzZWFyY2gtPm5leHQ7DQorICAgIH0NCisgIGlmIChtYXBwaW5nKSAvKiBGb3Vu ZCAqLw0KKyAgICB7DQorICAgICAgaWYgKHByZXZpb3VzKQ0KKyAgICAgICAgcHJldmlvdXMtPm5l eHQgPSBtYXBwaW5nLT5uZXh0Ow0KKyAgICAgIGVsc2UgZHJpdmVtYXAgPSBtYXBwaW5nLT5uZXh0 OyAvKiBFbnRyeSB3YXMgaGVhZCBvZiBsaXN0ICovDQorICAgICAgZ3J1Yl9mcmVlIChtYXBwaW5n KTsNCisgICAgfQ0KK30NCisNCitzdGF0aWMgZ3J1Yl9lcnJfdA0KK3BhcnNlX2Jpb3NkaXNrIChj b25zdCBjaGFyICpuYW1lLCBncnViX3VpbnQ4X3QgKmRpc2tudW0pDQorew0KKyAgaWYgKCFuYW1l KSByZXR1cm4gR1JVQl9FUlJfQkFEX0FSR1VNRU5UOw0KKyAgaWYgKCpuYW1lID09ICcoJykNCisg ICAgbmFtZSsrOyAvKiBTa2lwIHRoZSBmaXJzdCAoIGluIChoZDApIC0gZGlza19vcGVuIHdhbnRz IGp1c3QgdGhlIG5hbWUhICovDQorICBncnViX2Rpc2tfdCBkaXNrID0gZ3J1Yl9kaXNrX29wZW4g KG5hbWUpOw0KKyAgaWYgKCFkaXNrKQ0KKyAgICByZXR1cm4gR1JVQl9FUlJfVU5LTk9XTl9ERVZJ Q0U7DQorICBlbHNlDQorICAgIHsNCisgICAgICBlbnVtIGdydWJfZGlza19kZXZfaWQgaWQgPSBk aXNrLT5kZXYtPmlkOw0KKyAgICAgIGlmIChkaXNrbnVtKQ0KKyAgICAgICAgKmRpc2tudW0gPSBk aXNrLT5pZDsgICAvKiBPbmx5IHZhbGlkLCBvZiBjb3Vyc2UgaWYgaXQncyBhIGJpb3NkaXNrICov DQorICAgICAgZ3J1Yl9kaXNrX2Nsb3NlIChkaXNrKTsNCisgICAgICByZXR1cm4gKEdSVUJfRElT S19ERVZJQ0VfQklPU0RJU0tfSUQgIT0gaWQpID8NCisgICAgICAgICAgR1JVQl9FUlJfQkFEX0RF VklDRSA6IEdSVUJfRVJSX05PTkU7DQorICAgIH0NCit9DQorDQorc3RhdGljIGdydWJfZXJyX3QN CityZXZwYXJzZV9iaW9zZGlzayhjb25zdCBncnViX3VpbnQ4X3QgZG51bSwgY29uc3QgY2hhciAq Km91dHB1dCkNCit7DQorICBncnViX2Vycl90IHJldCA9IEdSVUJfRVJSX1VOS05PV05fREVWSUNF Ow0KKyAgYXV0byBpbnQgZmluZCAoY29uc3QgY2hhciAqbmFtZSk7DQorICBpbnQgZmluZCAoY29u c3QgY2hhciAqbmFtZSkNCisgIHsNCisgICAgZ3J1Yl9kaXNrX3QgZGlzayA9IGdydWJfZGlza19v cGVuIChuYW1lKTsNCisgICAgaWYgKCFkaXNrKQ0KKyAgICAgIHJldHVybiAwOw0KKyAgICBlbHNl DQorICAgICAgew0KKyAgICAgICAgaW50IGZvdW5kID0gMDsNCisgICAgICAgIGlmIChkbnVtID09 IGRpc2stPmlkICYmIEdSVUJfRElTS19ERVZJQ0VfQklPU0RJU0tfSUQgPT0gZGlzay0+ZGV2LT5p ZCkNCisgICAgICAgICAgew0KKyAgICAgICAgICAgIGZvdW5kID0gMTsNCisgICAgICAgICAgICBp ZiAob3V0cHV0KQ0KKyAgICAgICAgICAgICAgKm91dHB1dCA9IG5hbWU7DQorICAgICAgICAgICAg cmV0ID0gR1JVQl9FUlJfTk9ORTsNCisgICAgICAgICAgfQ0KKyAgICAgICAgZ3J1Yl9kaXNrX2Ns b3NlIChkaXNrKTsNCisgICAgICAgIHJldHVybiBmb3VuZDsNCisgICAgICB9DQorICB9DQorDQor ICBncnViX2Rpc2tfZGV2X2l0ZXJhdGUgKCZmaW5kKTsNCisgIHJldHVybiByZXQ7DQorfQ0KKw0K K3N0YXRpYyBncnViX2Vycl90DQordHJ5cGFyc2VfZGlza3N0cmluZyAoY29uc3QgY2hhciAqc3Ry LCBncnViX3VpbnQ4X3QgKm91dHB1dCkNCit7DQorICBpZiAoIXN0cikgcmV0dXJuIEdSVUJfRVJS X0JBRF9BUkdVTUVOVDsNCisgIGlmICgqc3RyID09ICcoJykNCisgICAgc3RyKys7ICAvKiBTa2lw IG9wZW5pbmcgcGFyZW4gaW4gb3JkZXIgdG8gYWxsb3cgYm90aCAoaGQwKSBhbmQgaGQwICovDQor ICBpZiAoKHN0clswXSA9PSAnZicgfHwgc3RyWzBdID09ICdoJykgJiYgc3RyWzFdID09ICdkJykN CisgICAgew0KKyAgICAgIGdydWJfdWludDhfdCBiaW9zX251bSA9IChzdHJbMF0gPT0gJ2gnKT8g MHg4MCA6IDB4MDA7DQorICAgICAgZ3J1Yl9lcnJubyA9IEdSVUJfRVJSX05PTkU7DQorICAgICAg dW5zaWduZWQgbG9uZyBkcml2ZW51bSA9IGdydWJfc3RydG91bCAoc3RyICsgMiwgJnN0ciwgMCk7 DQorICAgICAgaWYgKGdydWJfZXJybm8gIT0gR1JVQl9FUlJfTk9ORSB8fCBkcml2ZW51bSA+IDEy NykNCisgICAgICAgIHJldHVybiBHUlVCX0VSUl9CQURfQVJHVU1FTlQ7IC8qIENvdWxkIG5vdCBj b252ZXJ0LCBvciBudW0gdG9vIGhpZ2ggZm9yIEJJT1MgKi8NCisgICAgICBlbHNlDQorICAgICAg IHsNCisgICAgICAgICAgYmlvc19udW0gfD0gZHJpdmVudW07DQorICAgICAgICAgIGlmIChvdXRw dXQpDQorICAgICAgICAgICAgKm91dHB1dCA9IGJpb3NfbnVtOw0KKyAgICAgICAgICByZXR1cm4g R1JVQl9FUlJfTk9ORTsNCisgICAgICAgIH0NCisgICAgfQ0KKyAgZWxzZSByZXR1cm4gR1JVQl9F UlJfQkFEX0FSR1VNRU5UOw0KK30NCisNCitzdGF0aWMgZ3J1Yl9lcnJfdA0KK2dydWJfY21kX2Ry aXZlbWFwIChzdHJ1Y3QgZ3J1Yl9hcmdfbGlzdCAqc3RhdGUsIGludCBhcmdjLCBjaGFyICoqYXJn cykNCit7DQorICBpZiAoc3RhdGVbMF0uc2V0KSAvKiBTaG93OiBsaXN0IG1hcHBpbmdzICovDQor ICAgIHsNCisgICAgICBpZiAoIWRyaXZlbWFwKQ0KKyAgICAgICAgZ3J1Yl9wcmludGYgKCJObyBk cml2ZXMgaGF2ZSBiZWVuIHJlbWFwcGVkIik7DQorICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAg ICAgICAgICBncnViX3ByaW50ZiAoIlNob3dpbmcgb25seSByZW1hcHBlZCBkcml2ZXMuIERyaXZl cyB0aGF0IGhhdmUgaGFkICINCisgICAgICAgICAgICAgICAgICAgICAgICJ0aGVpciBzbG90IGFz c2lnbmVkIHRvIGFub3RoZXIgb25lIGFuZCBoYXZlIG5vdCBiZWVuICINCisgICAgICAgICAgICAg ICAgICAgICAgICJ0aGVtc2VsdmVzIHJlbWFwcGVkIHdpbGwgYmVjb21lIGluYWNjZXNzaWJsZSB0 aHJvdWdoICINCisgICAgICAgICAgICAgICAgICAgICAgICJ0aGUgQklPUyByb3V0aW5lcyB0byB0 aGUgYm9vdGVkIE9TLlxuXG4iKTsNCisgICAgICAgICAgZ3J1Yl9wcmludGYgKCJNYXBwZWRcdEdS VUJcbiIpOw0KKyAgICAgICAgICBkcml2ZW1hcF9ub2RlX3QgKmN1cm5vZGUgPSBkcml2ZW1hcDsN CisgICAgICAgICAgd2hpbGUgKGN1cm5vZGUpDQorICAgICAgICAgICAgew0KKyAgICAgICAgICAg ICAgY29uc3QgY2hhciAqZG5hbWUgPSAwOw0KKyAgICAgICAgICAgICAgZ3J1Yl9lcnJfdCBlcnIg PSByZXZwYXJzZV9iaW9zZGlzayAoY3Vybm9kZS0+cmVkaXJ0bywgJmRuYW1lKTsNCisgICAgICAg ICAgICAgIGlmIChlcnIgIT0gR1JVQl9FUlJfTk9ORSkNCisgICAgICAgICAgICAgICAgcmV0dXJu IGdydWJfZXJyb3IgKGVyciwgImludmFsaWQgbWFwcGluZzogbm9uLWV4aXN0ZW50IGRpc2siDQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvciBub3QgbWFuYWdlZCBi eSB0aGUgQklPUyIpOw0KKyAgICAgICAgICAgICAgZ3J1Yl9wcmludGYoIjB4JTAyeFx0JTRzXG4i LCBjdXJub2RlLT5uZXdkcml2ZSwgZG5hbWUpOw0KKyAgICAgICAgICAgICAgY3Vybm9kZSA9IGN1 cm5vZGUtPm5leHQ7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICB9DQorICBlbHNl IGlmIChzdGF0ZVsxXS5zZXQpIC8qIFJlc2V0OiBqdXN0IGRlbGV0ZSBhbGwgbWFwcGluZ3MgKi8N CisgICAgew0KKyAgICAgIGlmIChkcml2ZW1hcCkNCisgICAgICAgIHsNCisgICAgICAgICAgZHJp dmVtYXBfbm9kZV90ICpjdXJub2RlID0gZHJpdmVtYXAsICpwcmV2bm9kZSA9IDA7DQorICAgICAg ICAgIHdoaWxlIChjdXJub2RlKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgIHByZXZu b2RlID0gY3Vybm9kZTsNCisgICAgICAgICAgICAgIGN1cm5vZGUgPSBjdXJub2RlLT5uZXh0Ow0K KyAgICAgICAgICAgICAgZ3J1Yl9mcmVlIChwcmV2bm9kZSk7DQorICAgICAgICAgICAgfQ0KKyAg ICAgICAgICBkcml2ZW1hcCA9IDA7DQorICAgICAgICB9DQorICAgIH0NCisgIGVsc2UNCisgICAg ew0KKyAgICAgIGlmIChhcmdjICE9IDIpDQorICAgICAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JV Ql9FUlJfQkFEX0FSR1VNRU5ULCAidHdvIGFyZ3VtZW50cyByZXF1aXJlZCIpOw0KKyAgICAgIGdy dWJfdWludDhfdCBtYXBmcm9tID0gMDsNCisgICAgICBncnViX2Vycl90IGVyciA9IHBhcnNlX2Jp b3NkaXNrIChhcmdzWzBdLCAmbWFwZnJvbSk7DQorICAgICAgaWYgKGVyciAhPSBHUlVCX0VSUl9O T05FKQ0KKyAgICAgICAgcmV0dXJuIGdydWJfZXJyb3IgKGVyciwgImludmFsaWQgZGlzayBvciBu b3QgbWFuYWdlZCBieSB0aGUgQklPUyIpOw0KKw0KKyAgICAgIGdydWJfdWludDhfdCBtYXB0byA9 IDB4RkY7DQorICAgICAgZXJyID0gdHJ5cGFyc2VfZGlza3N0cmluZyAoYXJnc1sxXSwgJm1hcHRv KTsNCisgICAgICBpZiAoZXJyICE9IEdSVUJfRVJSX05PTkUpIC8qIE5vdCBhIGRpc2sgc3RyaW5n LiBNYXliZSBhIHJhdyBudW0gdGhlbj8gKi8NCisgICAgICAgIHsgICAgDQorICAgICAgICAgIGdy dWJfZXJybm8gPSBHUlVCX0VSUl9OT05FOw0KKyAgICAgICAgICB1bnNpZ25lZCBsb25nIG51bSA9 IGdydWJfc3RydG91bCAoYXJnc1sxXSwgMCwgMCk7DQorICAgICAgICAgIGlmIChncnViX2Vycm5v ICE9IEdSVUJfRVJSX05PTkUgfHwgbnVtID4gMHhGRikgIC8qIE5vdCBhIHJhdyBudW0gb3IgdG9v IGhpZ2ggKi8NCisgICAgICAgICAgICByZXR1cm4gZ3J1Yl9lcnJvciAoZ3J1Yl9lcnJubywNCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGFyZ2V0IHNwZWNpZmllciBtdXN0IGJlIG9m IHRoZSBmb3JtIChmZE4pIG9yICINCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKGhk TiksIHdpdGggMCA8PSBOIDwgMTI4OyBvciBhIHBsYWluIGRlYy9oZXggIg0KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJudW1iZXIgYmV0d2VlbiAwIGFuZCAyNTUiKTsNCisgICAgICAg ICAgZWxzZSBtYXB0byA9IChncnViX3VpbnQ4X3QpbnVtOw0KKyAgICAgICAgfQ0KKyAgICAgIA0K KyAgICAgIGlmIChtYXB0byA9PSBtYXBmcm9tKSAgLyogUmVzZXQgdG8gZGVmYXVsdCAqLw0KKyAg ICAgICAgew0KKyAgICAgICAgICBEQkdfUFJJTlRGICgiUmVtb3ZpbmcgdGhlIG1hcHBpbmcgZm9y ICVzICglMDJ4KSIsIGFyZ3NbMF0sIG1hcGZyb20pOw0KKyAgICAgICAgICBkcml2ZW1hcF9yZW1v dmUgKG1hcGZyb20pOw0KKyAgICAgICAgfQ0KKyAgICAgIGVsc2UgIC8qIE1hcCAqLw0KKyAgICAg ICAgew0KKyAgICAgICAgICBEQkdfUFJJTlRGICgiTWFwcGluZyAlcyAoJTAyeCkgdG8gJTAyeFxu IiwgYXJnc1swXSwgbWFwZnJvbSwgbWFwdG8pOw0KKyAgICAgICAgICByZXR1cm4gZHJpdmVtYXBf c2V0ICgoZ3J1Yl91aW50OF90KW1hcHRvLCBtYXBmcm9tKTsNCisgICAgICAgIH0NCisgICAgfQ0K Kw0KKyAgcmV0dXJuIEdSVUJfRVJSX05PTkU7DQorfQ0KKw0KK3R5cGVkZWYgc3RydWN0IF9fYXR0 cmlidXRlX18gKChwYWNrZWQpKSBpbnQxM21hcF9ub2RlDQorew0KKyAgZ3J1Yl91aW50OF90IGRp c2tudW07DQorICBncnViX3VpbnQ4X3QgbWFwdG87DQorfSBpbnQxM21hcF9ub2RlX3Q7DQorDQor LyogVGhlIG1pbiBhbW91bnQgb2YgbWVtIHRoYXQgbXVzdCByZW1haW4gZnJlZSBhZnRlciBpbnN0 YWxsaW5nIHRoZSBoYW5kbGVyLg0KKyAqIDMyIEtpQiBpcyBqdXN0IGFib3ZlIDB4N0MwMC0weDdF MDAsIHdoZXJlIHRoZSBib290c2VjdG9yIGlzIGxvYWRlZC4gICovDQorI2RlZmluZSBNSU5fRlJF RV9NRU1fS0IgMzINCisjZGVmaW5lIElOVDEzSF9PRkZTRVQoeCkgKCAoKGdydWJfdWludDhfdCop KHgpKSAtICgoZ3J1Yl91aW50OF90KikmZ3J1Yl9kcml2ZW1hcF9pbnQxM19oYW5kbGVyX2Jhc2Up ICkNCisjZGVmaW5lIElOVDEzSF9SRUJBU0UoeCkgKCAodm9pZCopICgoKGdydWJfdWludDhfdCop aGFuZGxlcl9iYXNlKSArICh4KSkgKQ0KKyNkZWZpbmUgSU5UMTNIX1RPTkVXQUREUih4KSBJTlQx M0hfUkVCQVNFKCBJTlQxM0hfT0ZGU0VUKCB4ICkgKQ0KKy8qIEludDEzaCBoYW5kbGVyIGluc3Rh bGxlciAtIHJlc2VydmVzIGNvbnZlbnRpb25hbCBtZW1vcnkgZm9yIHRoZSBoYW5kbGVyLA0KKyAq IGNvcGllcyBpdCBvdmVyIGFuZCBzZXRzIHRoZSBJVlQgZW50cnkgZm9yIGludDEzaC4NCisgKiBU aGlzIGNvZGUgcmVzdHMgb24gdGhlIGFzc3VtcHRpb24gdGhhdCBHUlVCIGRvZXMgbm90IGFjdGl2 YXRlIGFueSBraW5kIG9mDQorICogbWVtb3J5IG1hcHBpbmcsIHNpbmNlIGl0IGFjY2Vzc2VzIHJl YWxtb2RlIHN0cnVjdHVyZXMgYnkgdGhlaXIgYWJzb2x1dGUNCisgKiBhZGRyZXNzZXMsIGxpa2Ug dGhlIElWVCBhdCAwIG9yIHRoZSBCREEgYXQgMHg0MDAgKi8NCitzdGF0aWMgZ3J1Yl9lcnJfdA0K K2luc3RhbGxfaW50MTNfaGFuZGxlciAodm9pZCkNCit7DQorICBncnViX3NpemVfdCBlbnRyaWVz ID0gMDsNCisgIGRyaXZlbWFwX25vZGVfdCAqY3VyZW50cnkgPSBkcml2ZW1hcDsNCisgIHdoaWxl IChjdXJlbnRyeSkgIC8qIENvdW50IGVudHJpZXMgdG8gcHJlcGFyZSBhIGNvbnRpZ3VvdXMgbWFw IGJsb2NrICovDQorICAgIHsNCisgICAgICBlbnRyaWVzKys7DQorICAgICAgY3VyZW50cnkgPSBj dXJlbnRyeS0+bmV4dDsNCisgICAgfQ0KKyAgaWYgKDAgPT0gZW50cmllcykNCisgICAgew0KKyAg ICAgIERCR19QUklOVEYgKCJkcml2ZW1hcDogTm8gZHJpdmVzIG1hcmtlZCBhcyByZW1hcHBlZCwg aW5zdGFsbGF0aW9uIG9mIg0KKyAgICAgICAgICAgICAgICAgICJhbiBpbnQxM2ggaGFuZGxlciBp cyBub3QgcmVxdWlyZWQuIik7DQorICAgICAgcmV0dXJuIEdSVUJfRVJSX05PTkU7ICAvKiBObyBu ZWVkIHRvIGluc3RhbGwgdGhlIGludDEzaCBoYW5kbGVyICovDQorICAgIH0NCisgIGVsc2UNCisg ICAgew0KKyAgICAgIERCR19QUklOVEYgKCJkcml2ZW1hcDogSW5zdGFsbGluZyBpbnQxM2ggaGFu ZGxlci4uLlxuIik7DQorICAgICAgZ3J1Yl91aW50MzJfdCAqaXZ0c2xvdCA9IChncnViX3VpbnQz Ml90KikweDAwMDAwMDRjOw0KKyAgICAgIA0KKyAgICAgIC8qIFNhdmUgdGhlIHBvaW50ZXIgdG8g dGhlIG9sZCBpbnQxM2ggaGFuZGxlciAqLw0KKyAgICAgIGdydWJfZHJpdmVtYXBfaW50MTNfb2xk aGFuZGxlciA9ICppdnRzbG90Ow0KKyAgICAgIERCR19QUklOVEYgKCJPbGQgaW50MTMgaGFuZGxl ciBhdCAlMDR4OiUwNHhcbiIsDQorICAgICAgICAgICAgICAgICAgKGdydWJfZHJpdmVtYXBfaW50 MTNfb2xkaGFuZGxlciA+PiAxNikgJiAweDBmZmZmLA0KKyAgICAgICAgICAgICAgICAgIGdydWJf ZHJpdmVtYXBfaW50MTNfb2xkaGFuZGxlciAmIDB4MGZmZmYpOw0KKw0KKyAgICAgIC8qIFJlc2Vy dmUgYSBzZWN0aW9uIG9mIGNvbnZlbnRpb25hbCBtZW1vcnkgYXMgIkJJT1MgbWVtb3J5IiBmb3Ig aGFuZGxlcjoNCisgICAgICAgKiBCREEgb2Zmc2V0IDB4MTMgY29udGFpbnMgdGhlIHRvcCBvZiBz dWNoIG1lbW9yeSAqLw0KKyAgICAgIGdydWJfdWludDE2X3QgKmJwYV9mcmVla2IgPSAoZ3J1Yl91 aW50MTZfdCopMHgwMDAwMDQxMzsNCisgICAgICBEQkdfUFJJTlRGICgiVG9wIG9mIGNvbnZlbnRp b25hbCBtZW1vcnk6ICV1IEtpQlxuIiwgKmJwYV9mcmVla2IpOw0KKyAgICAgIGdydWJfc2l6ZV90 IHRvdGFsX3NpemUgPSBncnViX2RyaXZlbWFwX2ludDEzX3NpemUNCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKyAoZW50cmllcyArIDEpICogc2l6ZW9mKGludDEzbWFwX25vZGVfdCk7DQor ICAgICAgZ3J1Yl91aW50MTZfdCBwYXlsb2FkX3NpemVrYiA9ICh0b3RhbF9zaXplID4+IDEwKSAr DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgodG90YWxfc2l6ZSAlIDEw MjQpID09IDApID8gMCA6IDEpOw0KKyAgICAgIGlmICgoKmJwYV9mcmVla2IgLSBwYXlsb2FkX3Np emVrYikgPCBNSU5fRlJFRV9NRU1fS0IpDQorICAgICAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JV Ql9FUlJfT1VUX09GX01FTU9SWSwgInJlZnVzaW5nIHRvIGluc3RhbGwiDQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgImludDEzIGhhbmRsZXIsIG5vdCBlbm91Z2ggZnJlZSBtZW1vcnkgYWZ0 ZXIiKTsNCisgICAgICBEQkdfUFJJTlRGICgiUGF5bG9hZCBpcyAldSBiIGxvbmcsIHJlc2Vydmlu ZyAldSBLYlxuIiwgdG90YWxfc2l6ZSwNCisgICAgICAgICAgICAgICAgICBwYXlsb2FkX3NpemVr Yik7DQorICAgICAgKmJwYV9mcmVla2IgLT0gcGF5bG9hZF9zaXpla2I7DQorDQorICAgICAgLyog Q29weSBpbnQxM2ggaGFuZGxlciBjaHVuayB0byByZXNlcnZlZCBhcmVhICovDQorICAgICAgZ3J1 Yl91aW50OF90ICpoYW5kbGVyX2Jhc2UgPSAoZ3J1Yl91aW50OF90KikoKmJwYV9mcmVla2IgPDwg MTApOw0KKyAgICAgIERCR19QUklOVEYgKCJDb3B5aW5nIGludDEzIGhhbmRsZXIgdG86ICVwXG4i LCBoYW5kbGVyX2Jhc2UpOw0KKyAgICAgIGdydWJfbWVtY3B5IChoYW5kbGVyX2Jhc2UsICZncnVi X2RyaXZlbWFwX2ludDEzX2hhbmRsZXJfYmFzZSwNCisgICAgICAgICAgICAgICAgICAgZ3J1Yl9k cml2ZW1hcF9pbnQxM19zaXplKTsNCisNCisgICAgICAvKiBDb3B5IHRoZSBtYXBwaW5ncyB0byB0 aGUgcmVzZXJ2ZWQgYXJlYSAqLw0KKyAgICAgIGN1cmVudHJ5ID0gZHJpdmVtYXA7DQorICAgICAg Z3J1Yl9zaXplX3QgaTsNCisgICAgICBpbnQxM21hcF9ub2RlX3QgKmhhbmRsZXJfbWFwID0gKGlu dDEzbWFwX25vZGVfdCopDQorICAgICAgICAgICAgICAgICAgICAgIElOVDEzSF9UT05FV0FERFIg KCZncnViX2RyaXZlbWFwX2ludDEzX21hcHN0YXJ0KTsNCisgICAgICBEQkdfUFJJTlRGICgiVGFy Z2V0IG1hcCBhdCAlcCwgY29weWluZyBtYXBwaW5ncy4uLlxuIiwgaGFuZGxlcl9tYXApOw0KKyAg ICAgIGZvciAoaSA9IDA7IGkgPCBlbnRyaWVzICYmIGN1cmVudHJ5OyBpKyssIGN1cmVudHJ5ID0g Y3VyZW50cnktPm5leHQpDQorICAgICAgICB7DQorICAgICAgICAgIGhhbmRsZXJfbWFwW2ldLmRp c2tudW0gPSBjdXJlbnRyeS0+bmV3ZHJpdmU7DQorICAgICAgICAgIGhhbmRsZXJfbWFwW2ldLm1h cHRvID0gY3VyZW50cnktPnJlZGlydG87DQorICAgICAgICAgIERCR19QUklOVEYgKCJcdCMlZDog MHglMDJ4IDwtIDB4JTAyeFxuIiwgaSwgaGFuZGxlcl9tYXBbaV0uZGlza251bSwNCisgICAgICAg ICAgICAgICAgICAgICAgaGFuZGxlcl9tYXBbaV0ubWFwdG8pOw0KKyAgICAgICAgfQ0KKyAgICAg IC8qIFNpZ25hbCBlbmQtb2YtbWFwICovDQorICAgICAgaGFuZGxlcl9tYXBbaV0uZGlza251bSA9 IDA7DQorICAgICAgaGFuZGxlcl9tYXBbaV0ubWFwdG8gPSAwOw0KKyAgICAgIERCR19QUklOVEYg KCJcdCMlZDogMHglMDJ4IDwtIDB4JTAyeCAoZW5kKVxuIiwgaSwgaGFuZGxlcl9tYXBbaV0uZGlz a251bSwNCisgICAgICAgICAgICAgICAgICBoYW5kbGVyX21hcFtpXS5tYXB0byk7DQorDQorICAg ICAgLyogSW5zdGFsbCBvdXIgZnVuY3Rpb24gYXMgdGhlIGludDEzaCBoYW5kbGVyIGluIHRoZSBJ VlQgKi8NCisgICAgICBncnViX3VpbnQzMl90IGl2dGVudHJ5ID0gKChncnViX3VpbnQzMl90KWhh bmRsZXJfYmFzZSkgPDwgMTI7IC8qIFNlZ21lbnQgYWRkcmVzcyAqLw0KKyAgICAgIGl2dGVudHJ5 IHw9IChncnViX3VpbnQxNl90KSBJTlQxM0hfT0ZGU0VUKGdydWJfZHJpdmVtYXBfaW50MTNfaGFu ZGxlcik7DQorICAgICAgREJHX1BSSU5URiAoIk5ldyBpbnQxMyBoYW5kbGVyIElWVCBwb2ludGVy OiAlMDR4OiUwNHhcbiIsDQorICAgICAgICAgICAgICAgICAgKGl2dGVudHJ5ID4+IDE2KSAmIDB4 MGZmZmYsIGl2dGVudHJ5ICYgMHgwZmZmZik7DQorICAgICAgKml2dHNsb3QgPSBpdnRlbnRyeTsN CisgICAgICANCisgICAgICByZXR1cm4gR1JVQl9FUlJfTk9ORTsNCisgICAgfQ0KK30NCisNCitH UlVCX01PRF9JTklUIChkcml2ZW1hcCkNCit7DQorICAodm9pZCkgbW9kOwkJCS8qIFRvIHN0b3Ag d2FybmluZy4gKi8NCisgIGdydWJfcmVnaXN0ZXJfY29tbWFuZCAoImRyaXZlbWFwIiwgZ3J1Yl9j bWRfZHJpdmVtYXAsDQorICAgICAgICAgICAgICAgICAgICAgICAgIEdSVUJfQ09NTUFORF9GTEFH X0JPVEgsDQorCQkJICAgICAgICAgICAgICAgICAgICJkcml2ZW1hcCAtcyB8IC1yIHwgKGhkWCkg bmV3ZHJpdmVudW0iLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAiTWFuYWdlIHRoZSBCSU9T IGRyaXZlIG1hcHBpbmdzIiwgb3B0aW9ucyk7DQorICBpbnN0aGFuZGxlcl9ob29rID0gZ3J1Yl9s b2FkZXJfcmVnaXN0ZXJfcHJlYm9vdCAoJmluc3RhbGxfaW50MTNfaGFuZGxlciwgMSk7DQorfQ0K Kw0KK0dSVUJfTU9EX0ZJTkkgKGRyaXZlbWFwKQ0KK3sNCisgIGdydWJfbG9hZGVyX3VucmVnaXN0 ZXJfcHJlYm9vdCAoaW5zdGhhbmRsZXJfaG9vayk7DQorICBpbnN0aGFuZGxlcl9ob29rID0gMDsN CisgIGdydWJfdW5yZWdpc3Rlcl9jb21tYW5kICgiZHJpdmVtYXAiKTsNCit9DQpJbmRleDogY29t bWFuZHMvaTM4Ni9wYy9kcml2ZW1hcF9pbnQxM2guUw0KPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KUkNTIGZpbGU6IGNv bW1hbmRzL2kzODYvcGMvZHJpdmVtYXBfaW50MTNoLlMNCmRpZmYgLU4gY29tbWFuZHMvaTM4Ni9w Yy9kcml2ZW1hcF9pbnQxM2guUw0KLS0tIC9kZXYvbnVsbAkxIEphbiAxOTcwIDAwOjAwOjAwIC0w MDAwDQorKysgY29tbWFuZHMvaTM4Ni9wYy9kcml2ZW1hcF9pbnQxM2guUwkyIEp1bCAyMDA4IDAx OjEyOjM2IC0wMDAwDQpAQCAtMCwwICsxLDEyMiBAQA0KKy8qDQorICogIEdSVUIgIC0tICBHUmFu ZCBVbmlmaWVkIEJvb3Rsb2FkZXINCisgKiAgQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAsMjAwMSwy MDAyLDIwMDMsMjAwNSwyMDA2LDIwMDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu Yy4NCisgKg0KKyAqICBHUlVCIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciBtb2RpZnkNCisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkNCisgKiAgdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3INCisgKiAg KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4NCisgKg0KKyAqICBHUlVCIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsDQorICogIGJ1dCBX SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m DQorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RS4gIFNlZSB0aGUNCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4NCisgKg0KKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQ0KKyAqICBhbG9uZyB3aXRoIEdSVUIuICBJZiBub3Qs IHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uDQorICovDQorDQorDQorLyoNCisg KiBOb3RlOiBUaGVzZSBmdW5jdGlvbnMgZGVmaW5lZCBpbiB0aGlzIGZpbGUgbWF5IGJlIGNhbGxl ZCBmcm9tIEMuDQorICogICAgICAgQmUgY2FyZWZ1bCBvZiB0aGF0IHlvdSBtdXN0IG5vdCBtb2Rp Znkgc29tZSByZWdpc3RlcnMuIFF1b3RlDQorICogICAgICAgZnJvbSBnY2MtMi45NS4yL2djYy9j b25maWcvaTM4Ni9pMzg2Lmg6DQorDQorICAgMSBmb3IgcmVnaXN0ZXJzIG5vdCBhdmFpbGFibGUg YWNyb3NzIGZ1bmN0aW9uIGNhbGxzLg0KKyAgIFRoZXNlIG11c3QgaW5jbHVkZSB0aGUgRklYRURf UkVHSVNURVJTIGFuZCBhbHNvIGFueQ0KKyAgIHJlZ2lzdGVycyB0aGF0IGNhbiBiZSB1c2VkIHdp dGhvdXQgYmVpbmcgc2F2ZWQuDQorICAgVGhlIGxhdHRlciBtdXN0IGluY2x1ZGUgdGhlIHJlZ2lz dGVycyB3aGVyZSB2YWx1ZXMgYXJlIHJldHVybmVkDQorICAgYW5kIHRoZSByZWdpc3RlciB3aGVy ZSBzdHJ1Y3R1cmUtdmFsdWUgYWRkcmVzc2VzIGFyZSBwYXNzZWQuDQorICAgQXNpZGUgZnJvbSB0 aGF0LCB5b3UgY2FuIGluY2x1ZGUgYXMgbWFueSBvdGhlciByZWdpc3RlcnMgYXMgeW91IGxpa2Uu DQorDQorICBheCxkeCxjeCxieCxzaSxkaSxicCxzcCxzdCxzdDEsc3QyLHN0MyxzdDQsc3Q1LHN0 NixzdDcsYXJnDQoreyAgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMSwgMSwgIDEsICAxLCAgMSwgIDEs ICAxLCAgMSwgIDEsICAxIH0NCisgKi8NCisNCisvKg0KKyAqIE5vdGU6IEdSVUIgaXMgY29tcGls ZWQgd2l0aCB0aGUgb3B0aW9ucyAtbXJ0ZCBhbmQgLW1yZWdwYXJtPTMuDQorICogICAgICAgU28g dGhlIGZpcnN0IHRocmVlIGFyZ3VtZW50cyBhcmUgcGFzc2VkIGluICVlYXgsICVlZHgsIGFuZCAl ZWN4LA0KKyAqICAgICAgIHJlc3BlY3RpdmVseSwgYW5kIGlmIGEgZnVuY3Rpb24gaGFzIGEgZml4 ZWQgbnVtYmVyIG9mIGFyZ3VtZW50cw0KKyAqICAgICAgIGFuZCB0aGUgbnVtYmVyIGlmIGdyZWF0 ZXIgdGhhbiB0aHJlZSwgdGhlIGZ1bmN0aW9uIG11c3QgcmV0dXJuDQorICogICAgICAgd2l0aCAi cmV0ICROIiB3aGVyZSBOIGlzICgodGhlIG51bWJlciBvZiBhcmd1bWVudHMpIC0gMykgKiA0Lg0K KyAqLw0KKw0KKy8qDQorICogIFRoaXMgaXMgdGhlIGFyZWEgZm9yIGFsbCBvZiB0aGUgc3BlY2lh bCB2YXJpYWJsZXMuDQorICovDQorDQorI2luY2x1ZGUgPGdydWIvc3ltYm9sLmg+DQorDQorI2Rl ZmluZSBHUlVCX0RSSVZFTUFQX0lOVDEzSF9PRkZTRVQoeCkgKCh4KSAtIGdydWJfZHJpdmVtYXBf aW50MTNfaGFuZGxlcl9iYXNlKQ0KKw0KKy8qIENvcHkgc3RhcnRzIGhlcmUuIFdoZW4gZGVwbG95 ZWQsIHRoaXMgbGFiZWwgbXVzdCBiZSBzZWdtZW50LWFsaWduZWQgKi8NCitWQVJJQUJMRShncnVi X2RyaXZlbWFwX2ludDEzX2hhbmRsZXJfYmFzZSkNCisNCitWQVJJQUJMRShncnViX2RyaXZlbWFw X2ludDEzX29sZGhhbmRsZXIpDQorICAud29yZCAweGRlYWQsIDB4YmVlZg0KKy8qIERyaXZlbWFw IG1vZHVsZSAtIElOVCAxM2ggaGFuZGxlciAtIEJJT1MgSEQgbWFwICovDQorLyogV2UgbmVlZCB0 byB1c2UgcmVsYXRpdmUgYWRkcmVzc2luZywgYW5kIHdpdGggQ1MgdG8gdG9wIGl0IGFsbCwgc2lu Y2Ugd2UNCisgKiBtdXN0IG1ha2UgYXMgZmV3IGNoYW5nZXMgdG8gdGhlIHJlZ2lzdGVycyBhcyBw b3NzaWJsZS4gUGl0eSB3ZSdyZSBub3Qgb24NCisgKiBhbWQ2NDogcklQLXJlbGF0aXZlIGFkZHJl c3Npbmcgd291bGQgbWFrZSBsaWZlIGVhc2llciBoZXJlLg0KKyAqLw0KKy5jb2RlMTYNCitGVU5D VElPTihncnViX2RyaXZlbWFwX2ludDEzX2hhbmRsZXIpDQorICBwdXNoICVicA0KKyAgbW92ICVz cCwgJWJwDQorICBwdXNoICVheCAgLyogV2UnbGwgbmVlZCBpdCBsYXRlciB0byBkZXRlcm1pbmUg dGhlIHVzZWQgQklPUyBmdW5jdGlvbiAqLw0KKw0KKyAgLyogTWFwIHRoZSBkcml2ZSBudW1iZXIg KGFsd2F5cyBpbiBETD8pICovDQorICBwdXNoICVheA0KKyAgcHVzaCAlYngNCisgIHB1c2ggJXNp DQorICBtb3YgJEdSVUJfRFJJVkVNQVBfSU5UMTNIX09GRlNFVChncnViX2RyaXZlbWFwX2ludDEz X21hcHN0YXJ0KSwgJWJ4DQorICB4b3IgJXNpLCAlc2kNCisxOm1vdncgJWNzOiglYngsJXNpKSwg JWF4DQorICBjbXAgJWFoLCAlYWwNCisgIGp6IDNmIC8qIERSVj1EU1QgPT4gbWFwIGVuZCAtIGRy aXZlIG5vdCByZW1hcHBlZCwgbGVhdmUgREwgYXMtaXMgKi8NCisgIGNtcCAlZGwsICVhbA0KKyAg anogMmYgLyogRm91bmQgLSBkcml2ZSByZW1hcHBlZCwgbW9kaWZ5IERMICovDQorICBhZGQgJDIs ICVzaQ0KKyAgam1wIDFiIC8qIE5vdCBmb3VuZCwgYnV0IG1vcmUgcmVtYWluaW5nLCBsb29wICAq Lw0KKzI6bW92ICVhaCwgJWRsDQorMzpwb3AgJXNpDQorICBwb3AgJWJ4DQorICB4Y2hndyAlYXgs IC00KCVicCkgLyogUmVjb3ZlciB0aGUgb2xkIEFYIGFuZCBzYXZlIHRoZSBtYXAgZW50cnkgZm9y IGxhdGVyICovDQorICANCisgIHB1c2ggJWJwDQorICAvKiBTaW11bGF0ZSBpbnRlcnJ1cHQgY2Fs bDogcHVzaCBmbGFncyBhbmQgZG8gYSBmYXIgY2FsbCBpbiBvcmRlciB0byBzZXQNCisgICAqIHRo ZSBzdGFjayB0aGUgd2F5IHRoZSBvbGQgaGFuZGxlciBleHBlY3RzIGl0IHNvIHRoYXQgaXRzIGly ZXQgd29ya3MgKi8NCisgIHB1c2ggNiglYnApDQorICBtb3Z3ICglYnApLCAlYnAgIC8qIFJlc3Rv cmUgdGhlIGNhbGxlciBCUCAoaXMgdGhpcyBuZWVkZWQgYW5kL29yIHNlbnNpYmxlPykgKi8NCisg IGxjYWxsIColY3M6R1JVQl9EUklWRU1BUF9JTlQxM0hfT0ZGU0VUKGdydWJfZHJpdmVtYXBfaW50 MTNfb2xkaGFuZGxlcikNCisgIHBvcCAlYnAgLyogVGhlIHB1c2hlZCBmbGFncyB3ZXJlIHJlbW92 ZWQgYnkgaXJldCAqLw0KKyAgLyogU2V0IHRoZSBzYXZlZCBmbGFncyB0byB3aGF0IHRoZSBpbnQx M2ggaGFuZGxlciByZXR1cm5lZCAqLw0KKyAgcHVzaCAlYXgNCisgIHB1c2hmDQorICBwb3AgJWF4 DQorICBtb3Z3ICVheCwgNiglYnApDQorICBwb3AgJWF4DQorDQorICAvKiBSZXZlcnNlIG1hcCBh bnkgcmV0dXJuZWQgZHJpdmUgbnVtYmVyIGlmIHRoZSBkYXRhIHJldHVybmVkIGluY2x1ZGVzIGl0 Lg0KKyAgICogVGhlIG9ubHkgZnVuYyB0aGF0IGRvZXMgdGhpcyBzZWVtcyB0byBiZSBvcmlnQUgg PSAweDA4LCBidXQgbWFueSBCSU9TDQorICAgKiByZWZzIHNheSByZXRETCA9ICMgb2YgZHJpdmVz IGNvbm5lY3RlZC4gSG93ZXZlciwgdGhlIEdSVUIgTGVnYWN5IGNvZGUNCisgICAqIHRyZWF0cyB0 aGlzIGFzIHRoZSBfZHJpdmUgbnVtYmVyXyBhbmQgInVuZG9lcyIgdGhlIHJlbWFwcGluZy4gVGh1 cywNCisgICAqIHRoaXMgc2VjdGlvbiBoYXMgYmVlbiBkaXNhYmxlZCBmb3IgdGVzdGluZyBpZiBp dCdzIHJlcXVpcmVkICovDQorIyAgY21wYiAkMHgwOCwgLTEoJWJwKSAvKiBDYWxsZXIncyBBSCAq Lw0KKyMgIGpuZSA0Zg0KKyMgIHhjaGd3ICVheCwgLTQoJWJwKSAvKiBNYXAgZW50cnkgdXNlZCAq Lw0KKyMgIGNtcCAlYWgsICVhbCAgLyogRFJWPURTVCA9PiBkcml2ZSBub3QgcmVtYXBwZWQgKi8N CisjICBqZSA0Zg0KKyMgIG1vdiAlYWgsICVkbCAgLyogVW5kbyByZW1hcCAqLw0KKw0KKzQ6bW92 ICVicCwgJXNwDQorICBwb3AgJWJwDQorICBpcmV0DQorLyogVGhpcyBsYWJlbCBNVVNUIGJlIGF0 IHRoZSBlbmQgb2YgdGhlIGNvcGllZCBibG9jaywgc2luY2UgdGhlIGluc3RhbGxlciBjb2RlDQor ICogcmVzZXJ2ZXMgYWRkaXRpb25hbCBzcGFjZSBmb3IgbWFwcGluZ3MgYXQgcnVudGltZSBhbmQg Y29waWVzIHRoZW0gb3ZlciBpdCAqLw0KKy5hbGlnbiAyDQorVkFSSUFCTEUoZ3J1Yl9kcml2ZW1h cF9pbnQxM19tYXBzdGFydCkNCisvKiBDb3B5IHN0b3BzIGhlcmUgKi8NCisuY29kZTMyDQorVkFS SUFCTEUoZ3J1Yl9kcml2ZW1hcF9pbnQxM19zaXplKQ0KKyAgLndvcmQgR1JVQl9EUklWRU1BUF9J TlQxM0hfT0ZGU0VUKGdydWJfZHJpdmVtYXBfaW50MTNfc2l6ZSkNCkluZGV4OiBjb25mL2kzODYt cGMucm1rDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL3NvdXJjZXMvZ3J1Yi9ncnViMi9jb25mL2kz ODYtcGMucm1rLHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMjANCmRpZmYgLXUgLXIxLjEyMCBp Mzg2LXBjLnJtaw0KLS0tIGNvbmYvaTM4Ni1wYy5ybWsJMTkgSnVuIDIwMDggMDU6MTQ6MTUgLTAw MDAJMS4xMjANCisrKyBjb25mL2kzODYtcGMucm1rCTIgSnVsIDIwMDggMDE6MTI6NDQgLTAwMDAN CkBAIC0xNTMsNyArMTUzLDcgQEANCiAJdmJlLm1vZCB2YmV0ZXN0Lm1vZCB2YmVpbmZvLm1vZCB2 aWRlby5tb2QgZ2Z4dGVybS5tb2QgXA0KIAl2aWRlb3Rlc3QubW9kIHBsYXkubW9kIGJpdG1hcC5t b2QgdGdhLm1vZCBjcHVpZC5tb2Qgc2VyaWFsLm1vZAlcDQogCWF0YS5tb2QgdmdhLm1vZCBtZW1k aXNrLm1vZCBqcGVnLm1vZCBwbmcubW9kIHBjaS5tb2QgbHNwY2kubW9kIFwNCi0JYW91dC5tb2Qg X2JzZC5tb2QgYnNkLm1vZA0KKwlhb3V0Lm1vZCBfYnNkLm1vZCBic2QubW9kIGRyaXZlbWFwLm1v ZA0KIA0KICMgRm9yIGJpb3NkaXNrLm1vZC4NCiBiaW9zZGlza19tb2RfU09VUkNFUyA9IGRpc2sv aTM4Ni9wYy9iaW9zZGlzay5jDQpAQCAtMzIwLDQgKzMyMCwxMSBAQA0KIGJzZF9tb2RfQ0ZMQUdT ID0gJChDT01NT05fQ0ZMQUdTKQ0KIGJzZF9tb2RfTERGTEFHUyA9ICQoQ09NTU9OX0xERkxBR1Mp DQogDQorIyBGb3IgZHJpdmVtYXAubW9kLg0KK2RyaXZlbWFwX21vZF9TT1VSQ0VTID0gY29tbWFu ZHMvaTM4Ni9wYy9kcml2ZW1hcC5jIFwNCisgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmRz L2kzODYvcGMvZHJpdmVtYXBfaW50MTNoLlMNCitkcml2ZW1hcF9tb2RfQVNGTEFHUyA9ICQoQ09N TU9OX0FTRkxBR1MpDQorZHJpdmVtYXBfbW9kX0NGTEFHUyA9ICQoQ09NTU9OX0NGTEFHUykNCitk cml2ZW1hcF9tb2RfTERGTEFHUyA9ICQoQ09NTU9OX0xERkxBR1MpDQorDQogaW5jbHVkZSAkKHNy Y2RpcikvY29uZi9jb21tb24ubWsNCkluZGV4OiBpbmNsdWRlL2dydWIvbG9hZGVyLmgNCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0NClJDUyBmaWxlOiAvc291cmNlcy9ncnViL2dydWIyL2luY2x1ZGUvZ3J1Yi9sb2FkZXIu aCx2DQpyZXRyaWV2aW5nIHJldmlzaW9uIDEuOQ0KZGlmZiAtdSAtcjEuOSBsb2FkZXIuaA0KLS0t IGluY2x1ZGUvZ3J1Yi9sb2FkZXIuaAkyMSBKdWwgMjAwNyAyMzozMjoyMiAtMDAwMAkxLjkNCisr KyBpbmNsdWRlL2dydWIvbG9hZGVyLmgJMiBKdWwgMjAwOCAwMToxMjo0NSAtMDAwMA0KQEAgLTM3 LDYgKzM3LDE5IEBADQogLyogVW5zZXQgY3VycmVudCBsb2FkZXIsIGlmIGFueS4gICovDQogdm9p ZCBFWFBPUlRfRlVOQyhncnViX2xvYWRlcl91bnNldCkgKHZvaWQpOw0KIA0KK3R5cGVkZWYgc3Ry dWN0IGhvb2tsaXN0X25vZGUgKmdydWJfcHJlYm9vdF9ob29raWQ7DQorDQorLyogUmVnaXN0ZXIg YSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgYmVmb3JlIHRoZSBib290IGhvb2suIFJldHVybnMgYW4g aWQgdGhhdA0KKyAgIGNhbiBiZSBsYXRlciB1c2VkIHRvIHVucmVnaXN0ZXIgdGhlIHByZWJvb3Qg KGkuZS4gaWYgbW9kdWxlIHVubG9hZGVkKS4gSWYNCisgICBhYm9ydF9vbl9lcnJvciBpcyBzZXQs IHRoZSBib290IHNlcXVlbmNlIHdpbGwgYWJvcnQgaWYgYW55IG9mIHRoZSByZWdpc3RlcmVkDQor ICAgZnVuY3Rpb25zIHJldHVybiBhbnl0aGluZyBlbHNlIHRoYW4gR1JVQl9FUlJfTk9ORSAqLw0K K2dydWJfcHJlYm9vdF9ob29raWQgRVhQT1JUX0ZVTkMoZ3J1Yl9sb2FkZXJfcmVnaXN0ZXJfcHJl Ym9vdCkNCisgICAgICAgICAgIChncnViX2Vycl90ICgqaG9vaykgKHZvaWQpLCBpbnQgYWJvcnRf b25fZXJyb3IpOw0KKw0KKy8qIFVucmVnaXN0ZXIgYSBwcmVib290IGhvb2sgYnkgdGhlIGlkIHJl dHVybmVkIGJ5IGxvYWRlcl9yZWdpc3Rlcl9wcmVib290Lg0KKyAgIFRoaXMgZnVuY3Rpb25zIGJl Y29tZXMgYSBuby1vcCBpZiBubyBzdWNoIGZ1bmN0aW9uIGlzIHJlZ2lzdGVyZWQgKi8NCit2b2lk IEVYUE9SVF9GVU5DKGdydWJfbG9hZGVyX3VucmVnaXN0ZXJfcHJlYm9vdCkgKGdydWJfcHJlYm9v dF9ob29raWQgaWQpOw0KKw0KIC8qIENhbGwgdGhlIGJvb3QgaG9vayBpbiBjdXJyZW50IGxvYWRl ci4gVGhpcyBtYXkgb3IgbWF5IG5vdCByZXR1cm4sDQogICAgZGVwZW5kaW5nIG9uIHRoZSBzZXR0 aW5nIGJ5IGdydWJfbG9hZGVyX3NldC4gICovDQogZ3J1Yl9lcnJfdCBFWFBPUlRfRlVOQyhncnVi X2xvYWRlcl9ib290KSAodm9pZCk7DQpJbmRleDoga2Vybi9sb2FkZXIuYw0KPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0K UkNTIGZpbGU6IC9zb3VyY2VzL2dydWIvZ3J1YjIva2Vybi9sb2FkZXIuYyx2DQpyZXRyaWV2aW5n IHJldmlzaW9uIDEuOQ0KZGlmZiAtdSAtcjEuOSBsb2FkZXIuYw0KLS0tIGtlcm4vbG9hZGVyLmMJ MjEgSnVsIDIwMDcgMjM6MzI6MjYgLTAwMDAJMS45DQorKysga2Vybi9sb2FkZXIuYwkyIEp1bCAy MDA4IDAxOjEyOjQ1IC0wMDAwDQpAQCAtNjEsMTEgKzYxLDc4IEBADQogICBncnViX2xvYWRlcl9s b2FkZWQgPSAwOw0KIH0NCiANCitzdHJ1Y3QgaG9va2xpc3Rfbm9kZQ0KK3sNCisgIGdydWJfZXJy X3QgKCpob29rKSAodm9pZCk7DQorICBpbnQgYWJvcnRfb25fZXJyb3I7DQorICBzdHJ1Y3QgaG9v a2xpc3Rfbm9kZSAqbmV4dDsNCit9Ow0KKw0KK3N0YXRpYyBzdHJ1Y3QgaG9va2xpc3Rfbm9kZSAq cHJlYm9vdF9ob29rcyA9IDA7DQorDQorZ3J1Yl9wcmVib290X2hvb2tpZA0KK2dydWJfbG9hZGVy X3JlZ2lzdGVyX3ByZWJvb3QoZ3J1Yl9lcnJfdCAoKmhvb2spICh2b2lkKSwgaW50IGFib3J0X29u X2Vycm9yKQ0KK3sNCisgIGlmICgwID09IGhvb2spDQorICAgIHsNCisgICAgICBncnViX2Vycm9y IChHUlVCX0VSUl9CQURfQVJHVU1FTlQsICJwcmVib290IGhvb29rIG11c3Qgbm90IGJlIG51bGwi KTsNCisgICAgICByZXR1cm4gMDsNCisgICAgfQ0KKyAgZ3J1Yl9wcmVib290X2hvb2tpZCBuZXdl bnRyeSA9IGdydWJfbWFsbG9jIChzaXplb2YgKHN0cnVjdCBob29rbGlzdF9ub2RlKSk7DQorICBp ZiAoIW5ld2VudHJ5KQ0KKyAgICB7DQorICAgICAgZ3J1Yl9lcnJvciAoR1JVQl9FUlJfT1VUX09G X01FTU9SWSwgImNhbm5vdCBhbGxvYyBhIGhvb2tpbmZvIHN0cnVjdHVyZSIpOw0KKyAgICAgIHJl dHVybiAwOw0KKyAgICB9DQorICBlbHNlDQorICAgIHsNCisgICAgICBuZXdlbnRyeS0+aG9vayA9 IGhvb2s7DQorICAgICAgbmV3ZW50cnktPmFib3J0X29uX2Vycm9yID0gYWJvcnRfb25fZXJyb3I7 DQorICAgICAgbmV3ZW50cnktPm5leHQgPSBwcmVib290X2hvb2tzOw0KKyAgICAgIHByZWJvb3Rf aG9va3MgPSBuZXdlbnRyeTsNCisgICAgICByZXR1cm4gbmV3ZW50cnk7DQorICAgIH0NCit9DQor DQordm9pZA0KK2dydWJfbG9hZGVyX3VucmVnaXN0ZXJfcHJlYm9vdChncnViX3ByZWJvb3RfaG9v a2lkIGlkKQ0KK3sNCisgIGlmICgwID09IGlkKQ0KKyAgICByZXR1cm47DQorICBncnViX3ByZWJv b3RfaG9va2lkIGVudHJ5ID0gMCwgc2VhcmNoID0gcHJlYm9vdF9ob29rcywgcHJldmlvdXMgPSAw Ow0KKyAgd2hpbGUgKHNlYXJjaCkNCisgICAgew0KKyAgICAgIGlmIChzZWFyY2ggPT0gaWQpDQor ICAgICAgICB7DQorICAgICAgICAgIGVudHJ5ID0gc2VhcmNoOw0KKyAgICAgICAgICBicmVhazsN CisgICAgICAgIH0NCisgICAgICBwcmV2aW91cyA9IHNlYXJjaDsNCisgICAgICBzZWFyY2ggPSBz ZWFyY2gtPm5leHQ7DQorICAgIH0NCisgIGlmIChlbnRyeSkgLyogRm91bmQgKi8NCisgICAgew0K KyAgICAgIGlmIChwcmV2aW91cykNCisgICAgICAgIHByZXZpb3VzLT5uZXh0ID0gZW50cnktPm5l eHQ7DQorICAgICAgZWxzZSBwcmVib290X2hvb2tzID0gZW50cnktPm5leHQ7IC8qIEVudHJ5IHdh cyBoZWFkIG9mIGxpc3QgKi8NCisgICAgICBncnViX2ZyZWUgKGVudHJ5KTsNCisgICAgfQ0KK30N CisNCiBncnViX2Vycl90DQogZ3J1Yl9sb2FkZXJfYm9vdCAodm9pZCkNCiB7DQogICBpZiAoISBn cnViX2xvYWRlcl9sb2FkZWQpDQogICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9OT19L RVJORUwsICJubyBsb2FkZWQga2VybmVsIik7DQorICANCisgIGdydWJfcHJlYm9vdF9ob29raWQg ZW50cnkgPSBwcmVib290X2hvb2tzOw0KKyAgd2hpbGUgKGVudHJ5KQ0KKyAgICB7DQorICAgICAg Z3J1Yl9lcnJfdCBwb3NzaWJsZV9lcnJvciA9IGVudHJ5LT5ob29rKCk7DQorICAgICAgaWYgKHBv c3NpYmxlX2Vycm9yICE9IEdSVUJfRVJSX05PTkUgJiYgZW50cnktPmFib3J0X29uX2Vycm9yKQ0K KyAgICAgICAgcmV0dXJuIHBvc3NpYmxlX2Vycm9yOw0KKyAgICAgIGVudHJ5ID0gZW50cnktPm5l eHQ7DQorICAgIH0NCiANCiAgIGlmIChncnViX2xvYWRlcl9ub3JldHVybikNCiAgICAgZ3J1Yl9t YWNoaW5lX2ZpbmkgKCk7DQo= --=-tRC6WPh3AAXXvnrVuGNR-- --=-mMlnjJeTLOVcI4SRlguk Content-Type: application/pgp-signature; name=signature.asc Content-Description: Esta parte del mensaje =?ISO-8859-1?Q?est=E1?= firmada digitalmente -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.6 (GNU/Linux) iQIVAwUASG2G96Sl+Fbdeo72AQJVJA/9E3PuO5j3lmgRr/hodrHu75UM2MLHpKOX W5DS3Mmx4n3udou75+ak80LFYBLwsu542HRe/xTI3KHrycVCwe1VIF4JmBECKFyn xIH0rogqvcHP4tOGRreau6aDUWr0IwzVj8N0Jxp61+pIxXaKnRLvcmAYvtYFg5ME MzjIsRzbTyf5EaoZcGiE/Btm4eAN+EHz7PV1yoMUATQSwd8lbrR/UaDtfr8+R2JA PTa9NEW0iggIrZdr+QjiBvlOXLcTjZEZDjdzd6zRRRz4fcP3ElV3UBDP5JDT35xk JdjYJHdKPurB8/ivHvxsKUmC3Jancf0cgXUg/5gzcgGEaEMqscuSXQ8S0lzeue6U KnB9xXgv+QcW6kTaXde+xn7Hfg10bqVSUM7O17F4JirlNwc7lv3YBnSuW5Nkgmdg FnSdv+Xv2t9s5QQHuOuYzXZ/F7Nm6nBcqXYZLPkJLThxJtg3WboxNZTna8BwCN9E fMwtkmaREqkR0kbkgjrZjZSgH6nM34sZ+KKbWt9sROv1b6KAoX5xHFcEUwhI7O72 Qj8NrZ5/GtJocx3g30EWb0vbMEOK1cCcxXkpdUq6av/3ItCYXnGvO7IhFX/3PwRB 4WrG+nF50mMAzu73RmM9rEEL8uB2B1VniFElzl4AgAIb4MgxGbC6Z8putvKhZoOC kvStQmOV054= =C4qD -----END PGP SIGNATURE----- --=-mMlnjJeTLOVcI4SRlguk--