From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:44557) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1cOdg6-0007vf-2W for qemu-devel@nongnu.org; Wed, 04 Jan 2017 00:00:02 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1cOdg1-0003Qx-NG for qemu-devel@nongnu.org; Tue, 03 Jan 2017 23:59:58 -0500 Message-ID: <1483505971.22609.6.camel@aj.id.au> From: Andrew Jeffery Date: Wed, 04 Jan 2017 15:29:31 +1030 In-Reply-To: <20161215054812.12602-7-alastair@au1.ibm.com> References: <20161215054812.12602-1-alastair@au1.ibm.com> <20161215054812.12602-7-alastair@au1.ibm.com> Content-Type: multipart/signed; micalg="pgp-sha512"; protocol="application/pgp-signature"; boundary="=-TPUeesuTiSqgEe06YyZt" Mime-Version: 1.0 Subject: Re: [Qemu-devel] [PATCH v4 6/8] hw/timer: Add Epson RX8900 RTC support List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Alastair D'Silva , qemu-arm@nongnu.org Cc: qemu-devel@nongnu.org, Peter Maydell , =?ISO-8859-1?Q?C=E9dric?= Le Goater , Joel Stanley , Alastair D'Silva , Chris Smart --=-TPUeesuTiSqgEe06YyZt Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 SGkgQWxhc3RhaXIsCgpJIGhhdmUgc29tZSBtb3N0bHkgbWlub3IgY29tbWVudHMgYmVsb3cuCgpP biBUaHUsIDIwMTYtMTItMTUgYXQgMTY6NDggKzExMDAsIEFsYXN0YWlyIEQnU2lsdmEgd3JvdGU6 Cj4gPiBGcm9tOiBBbGFzdGFpciBEJ1NpbHZhIDxhbGFzdGFpckBkLXNpbHZhLm9yZz4KPiAKPiBU aGlzIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlIEVwc29uIFJYODkwMCBJMkMgUlRDLgo+IAo+ IFRoZSBmb2xsb3dpbmcgY2hpcCBmZWF0dXJlcyBhcmUgaW1wbGVtZW50ZWQ6Cj4gwqAtIFJUQyAo d2FsbGNsb2NrIGJhc2VkLCBwdGltZXIgMTB4IG92ZXJzYW1wbGluZyB0byBwaWNrIHVwCj4gwqDC oMKgwqDCoMKgwqDCoHdhbGxjbG9jayB0cmFuc2l0aW9ucykKPiDCoC0gVGltZSB1cGRhdGUgaW50 ZXJydXB0IChwZXIgc2Vjb25kL21pbnV0ZSwgd2FsbGNsb2NrIGJhc2VkKQo+IMKgLSBBbGFybXMg KHdhbGxjbG9jayBiYXNlZCkKPiDCoC0gVGVtcGVyYXR1cmUgKHNldCB2aWEgYSBwcm9wZXJ0eSkK PiDCoC0gQ291bnRkb3duIHRpbWVyIChlbXVsYXRlZCBjbG9jayB2aWEgcHRpbWVyKQo+IMKgLSBG T1VUIHZpYSBHUElPIChlbXVsYXRlZCBjbG9jayB2aWEgcHRpbWVyKQo+IAo+IFRoZSBmb2xsb3dp bmcgY2hpcCBmZWF0dXJlcyBhcmUgdW5pbXBsZW1lbnRlZDoKPiDCoC0gTG93IHZvbHRhZ2UgZGV0 ZWN0aW9uCj4gwqAtIGkyYyB0aW1lb3V0Cj4gCj4gVGhlIGltcGxlbWVudGF0aW9uIGV4cG9ydHMg dGhlIGZvbGxvd2luZyBuYW1lZCBHUElPczoKPiByeDg5MDAtaW50ZXJydXB0LW91dAo+IHJ4ODkw MC1mb3V0LWVuYWJsZQo+IHJ4ODkwMC1mb3V0Cj4gCj4gPiBTaWduZWQtb2ZmLWJ5OiBBbGFzdGFp ciBEJ1NpbHZhIDxhbGFzdGFpckBkLXNpbHZhLm9yZz4KPiA+IFNpZ25lZC1vZmYtYnk6IENocmlz IFNtYXJ0IDxjaHJpc0BkaXN0cm9ndXkuY29tPgo+IC0tLQo+IMKgZGVmYXVsdC1jb25maWdzL2Fy bS1zb2Z0bW11Lm1hayB8wqDCoMKgMSArCj4gwqBody90aW1lci9NYWtlZmlsZS5vYmpzwqDCoMKg wqDCoMKgwqDCoMKgwqB8wqDCoMKgMiArCj4gwqBody90aW1lci9yeDg5MDAuY8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHwgOTEyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysKPiDCoGh3L3RpbWVyL3J4ODkwMF9yZWdzLmjCoMKgwqDCoMKgwqDCoMKgwqDCoHwg MTQxICsrKysrKysKPiDCoGh3L3RpbWVyL3RyYWNlLWV2ZW50c8KgwqDCoMKgwqDCoMKgwqDCoMKg wqB8wqDCoDMxICsrCj4gwqA1IGZpbGVzIGNoYW5nZWQsIDEwODcgaW5zZXJ0aW9ucygrKQo+IMKg Y3JlYXRlIG1vZGUgMTAwNjQ0IGh3L3RpbWVyL3J4ODkwMC5jCj4gwqBjcmVhdGUgbW9kZSAxMDA2 NDQgaHcvdGltZXIvcng4OTAwX3JlZ3MuaAo+IAo+IGRpZmYgLS1naXQgYS9kZWZhdWx0LWNvbmZp Z3MvYXJtLXNvZnRtbXUubWFrIGIvZGVmYXVsdC1jb25maWdzL2FybS1zb2Z0bW11Lm1hawo+IGlu ZGV4IDZkZTNlMTYuLmFkYjYwMGUgMTAwNjQ0Cj4gLS0tIGEvZGVmYXVsdC1jb25maWdzL2FybS1z b2Z0bW11Lm1hawo+ICsrKyBiL2RlZmF1bHQtY29uZmlncy9hcm0tc29mdG1tdS5tYWsKPiBAQCAt MjksNiArMjksNyBAQCBDT05GSUdfU01DOTFDMTExPXkKPiDCoENPTkZJR19BTExXSU5ORVJfRU1B Qz15Cj4gwqBDT05GSUdfSU1YX0ZFQz15Cj4gwqBDT05GSUdfRFMxMzM4PXkKPiArQ09ORklHX1JY ODkwMD15Cj4gwqBDT05GSUdfUEZMQVNIX0NGSTAxPXkKPiDCoENPTkZJR19QRkxBU0hfQ0ZJMDI9 eQo+IMKgQ09ORklHX01JQ1JPRFJJVkU9eQo+IGRpZmYgLS1naXQgYS9ody90aW1lci9NYWtlZmls ZS5vYmpzIGIvaHcvdGltZXIvTWFrZWZpbGUub2Jqcwo+IGluZGV4IDdiYThjMjMuLmZhMDI4YWMg MTAwNjQ0Cj4gLS0tIGEvaHcvdGltZXIvTWFrZWZpbGUub2Jqcwo+ICsrKyBiL2h3L3RpbWVyL01h a2VmaWxlLm9ianMKPiBAQCAtMyw2ICszLDcgQEAgY29tbW9uLW9iai0kKENPTkZJR19BUk1fTVBU SU1FUikgKz0gYXJtX21wdGltZXIubwo+IMKgY29tbW9uLW9iai0kKENPTkZJR19BOV9HVElNRVIp ICs9IGE5Z3RpbWVyLm8KPiDCoGNvbW1vbi1vYmotJChDT05GSUdfQ0FERU5DRSkgKz0gY2FkZW5j ZV90dGMubwo+IMKgY29tbW9uLW9iai0kKENPTkZJR19EUzEzMzgpICs9IGRzMTMzOC5vCj4gK2Nv bW1vbi1vYmotJChDT05GSUdfUlg4OTAwKSArPSByeDg5MDAubwo+IMKgY29tbW9uLW9iai0kKENP TkZJR19IUEVUKSArPSBocGV0Lm8KPiDCoGNvbW1vbi1vYmotJChDT05GSUdfSTgyNTQpICs9IGk4 MjU0X2NvbW1vbi5vIGk4MjU0Lm8KPiDCoGNvbW1vbi1vYmotJChDT05GSUdfTTQ4VDU5KSArPSBt NDh0NTkubwo+IEBAIC0xNyw2ICsxOCw3IEBAIGNvbW1vbi1vYmotJChDT05GSUdfSU1YKSArPSBp bXhfZXBpdC5vCj4gwqBjb21tb24tb2JqLSQoQ09ORklHX0lNWCkgKz0gaW14X2dwdC5vCj4gwqBj b21tb24tb2JqLSQoQ09ORklHX0xNMzIpICs9IGxtMzJfdGltZXIubwo+IMKgY29tbW9uLW9iai0k KENPTkZJR19NSUxLWU1JU1QpICs9IG1pbGt5bWlzdC1zeXNjdGwubwo+ICtjb21tb24tb2JqLSQo Q09ORklHX1JYODkwMCkgKz0gcng4OTAwLm8KPiDCoAo+IMKgb2JqLSQoQ09ORklHX0VYWU5PUzQp ICs9IGV4eW5vczQyMTBfbWN0Lm8KPiDCoG9iai0kKENPTkZJR19FWFlOT1M0KSArPSBleHlub3M0 MjEwX3B3bS5vCj4gZGlmZiAtLWdpdCBhL2h3L3RpbWVyL3J4ODkwMC5jIGIvaHcvdGltZXIvcng4 OTAwLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLmNiMWEyYzgKPiAt LS0gL2Rldi9udWxsCj4gKysrIGIvaHcvdGltZXIvcng4OTAwLmMKPiBAQCAtMCwwICsxLDkxMiBA QAo+ICsvKgo+ICsgKiBFcHNvbiBSWDg5MDBTQS9DRSBSZWFsdGltZSBDbG9jayBNb2R1bGUKPiAr ICoKPiArICogQ29weXJpZ2h0IChjKSAyMDE2IElCTSBDb3Jwb3JhdGlvbgo+ICsgKiBBdXRob3Jz Ogo+ID4gKyAqwqDCoEFsYXN0YWlyIEQnU2lsdmEgPGFsYXN0YWlyQGQtc2lsdmEub3JnPgo+ID4g KyAqwqDCoENocmlzIFNtYXJ0IDxjaHJpc0BkaXN0cm9ndXkuY29tPgo+ICsgKgo+ICsgKiBUaGlz IGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdQTCB2ZXJzaW9uIDIgb3IgbGF0ZXIuwqDCoFNl ZQo+ICsgKiB0aGUgQ09QWUlORyBmaWxlIGluIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5Lgo+ICsg Kgo+ICsgKiBEYXRhc2hlZXQgYXZhaWxhYmxlIGF0Ogo+ICsgKsKgwqBodHRwczovL3N1cHBvcnQu ZXBzb24uYml6L3RkL2FwaS9kb2NfY2hlY2sucGhwP2RsPWFwcF9SWDg5MDBDRSZsYW5nPWVuCj4g KyAqCj4gKyAqIE5vdCBpbXBsZW1lbnRlZDoKPiArICrCoMKgSW1wbGVtZW50IGkyYyB0aW1lb3V0 Cj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgInFlbXUvb3NkZXAuaCIKPiArI2luY2x1ZGUgInFlbXUt Y29tbW9uLmgiCj4gKyNpbmNsdWRlICJody9pMmMvaTJjLmgiCj4gKyNpbmNsdWRlICJody90aW1l ci9yeDg5MDBfcmVncy5oIgo+ICsjaW5jbHVkZSAiaHcvcHRpbWVyLmgiCj4gKyNpbmNsdWRlICJx ZW11L21haW4tbG9vcC5oIgo+ICsjaW5jbHVkZSAicWVtdS9iY2QuaCIKPiArI2luY2x1ZGUgInFl bXUvbG9nLmgiCj4gKyNpbmNsdWRlICJxYXBpL2Vycm9yLmgiCj4gKyNpbmNsdWRlICJxYXBpL3Zp c2l0b3IuaCIKPiArI2luY2x1ZGUgInRyYWNlLmgiCj4gKwo+ICsjZGVmaW5lIFRZUEVfUlg4OTAw ICJyeDg5MDAiCj4gKyNkZWZpbmUgUlg4OTAwKG9iaikgT0JKRUNUX0NIRUNLKFJYODkwMFN0YXRl LCAob2JqKSwgVFlQRV9SWDg5MDApCj4gKwo+ICt0eXBlZGVmIHN0cnVjdCBSWDg5MDBTdGF0ZSB7 Cj4gK8KgwqDCoMKgSTJDU2xhdmUgcGFyZW50X29iajsKPiArCj4gK8KgwqDCoMKgcHRpbWVyX3N0 YXRlICpzZWNfdGltZXI7IC8qIHRyaWdnZXJlZCBvbmNlIHBlciBzZWNvbmQgKi8KPiArwqDCoMKg wqBwdGltZXJfc3RhdGUgKmZvdXRfdGltZXI7Cj4gK8KgwqDCoMKgcHRpbWVyX3N0YXRlICpjb3Vu dGRvd25fdGltZXI7Cj4gK8KgwqDCoMKgYm9vbCBmb3V0X3N0YXRlOwo+ICvCoMKgwqDCoGludDY0 X3Qgb2Zmc2V0Owo+ICvCoMKgwqDCoHVpbnQ4X3Qgd2Vla2RheTsgLyogU2F2ZWQgZm9yIGRlZmVy cmVkIG9mZnNldCBjYWxjdWxhdGlvbiwgMC02ICovCj4gK8KgwqDCoMKgdWludDhfdCB3ZGF5X29m ZnNldDsKPiArwqDCoMKgwqB1aW50OF90IG52cmFtW1JYODkwMF9OVlJBTV9TSVpFXTsKPiArwqDC oMKgwqBpbnQzMl90IG52cmFtX29mZnNldDsgLyogV3JhcHBlZCB0byBzdGF5IHdpdGhpbiBSWDg5 MDBfTlZSQU1fU0laRSAqLwo+ICvCoMKgwqDCoGJvb2wgYWRkcl9ieXRlOwo+ICvCoMKgwqDCoHVp bnQ4X3QgbGFzdF9pbnRlcnJ1cHRfc2Vjb25kczsgLyogVGhlIGxhc3QgdGltZSB0aGUgc2Vjb25k IHRpbWVyIHRpY2tlZCAqLwo+ICvCoMKgwqDCoC8qIHRoZSBsYXN0IG1pbnV0ZSB0aGUgdGltZXIg dXBkYXRlIGludGVycnVwdCB3YXMgdHJpZ2dlcmVkIChpZiBlbmFibGVkKSAqLwo+ICvCoMKgwqDC oHVpbnQ4X3QgbGFzdF91cGRhdGVfaW50ZXJydXB0X21pbnV0ZXM7Cj4gK8KgwqDCoMKgZG91Ymxl IHN1cHBseV92b2x0YWdlOwo+ICvCoMKgwqDCoHFlbXVfaXJxIGludGVycnVwdF9waW47Cj4gK8Kg wqDCoMKgcWVtdV9pcnEgZm91dF9waW47Cj4gK30gUlg4OTAwU3RhdGU7Cj4gKwo+ICtzdGF0aWMg Y29uc3QgVk1TdGF0ZURlc2NyaXB0aW9uIHZtc3RhdGVfcng4OTAwID0gewo+ICvCoMKgwqDCoC5u YW1lID0gInJ4ODkwMCIsCj4gK8KgwqDCoMKgLnZlcnNpb25faWQgPSAxLAo+ICvCoMKgwqDCoC5t aW5pbXVtX3ZlcnNpb25faWQgPSAxLAo+ICvCoMKgwqDCoC5maWVsZHMgPSAoVk1TdGF0ZUZpZWxk W10pIHsKPiArwqDCoMKgwqDCoMKgwqDCoFZNU1RBVEVfSTJDX1NMQVZFKHBhcmVudF9vYmosIFJY ODkwMFN0YXRlKSwKPiArwqDCoMKgwqDCoMKgwqDCoFZNU1RBVEVfUFRJTUVSKHNlY190aW1lciwg Ulg4OTAwU3RhdGUpLAo+ICvCoMKgwqDCoMKgwqDCoMKgVk1TVEFURV9QVElNRVIoZm91dF90aW1l ciwgUlg4OTAwU3RhdGUpLAo+ICvCoMKgwqDCoMKgwqDCoMKgVk1TVEFURV9QVElNRVIoY291bnRk b3duX3RpbWVyLCBSWDg5MDBTdGF0ZSksCj4gK8KgwqDCoMKgwqDCoMKgwqBWTVNUQVRFX0JPT0wo Zm91dF9zdGF0ZSwgUlg4OTAwU3RhdGUpLAo+ICvCoMKgwqDCoMKgwqDCoMKgVk1TVEFURV9JTlQ2 NChvZmZzZXQsIFJYODkwMFN0YXRlKSwKPiArwqDCoMKgwqDCoMKgwqDCoFZNU1RBVEVfVUlOVDgo d2Vla2RheSwgUlg4OTAwU3RhdGUpLAo+ICvCoMKgwqDCoMKgwqDCoMKgVk1TVEFURV9VSU5UOCh3 ZGF5X29mZnNldCwgUlg4OTAwU3RhdGUpLAo+ICvCoMKgwqDCoMKgwqDCoMKgVk1TVEFURV9VSU5U OF9BUlJBWShudnJhbSwgUlg4OTAwU3RhdGUsIFJYODkwMF9OVlJBTV9TSVpFKSwKPiArwqDCoMKg wqDCoMKgwqDCoFZNU1RBVEVfSU5UMzIobnZyYW1fb2Zmc2V0LCBSWDg5MDBTdGF0ZSksCj4gK8Kg wqDCoMKgwqDCoMKgwqBWTVNUQVRFX0JPT0woYWRkcl9ieXRlLCBSWDg5MDBTdGF0ZSksCj4gK8Kg wqDCoMKgwqDCoMKgwqBWTVNUQVRFX1VJTlQ4KGxhc3RfaW50ZXJydXB0X3NlY29uZHMsIFJYODkw MFN0YXRlKSwKPiArwqDCoMKgwqDCoMKgwqDCoFZNU1RBVEVfVUlOVDgobGFzdF91cGRhdGVfaW50 ZXJydXB0X21pbnV0ZXMsIFJYODkwMFN0YXRlKSwKPiArwqDCoMKgwqDCoMKgwqDCoFZNU1RBVEVf RU5EX09GX0xJU1QoKQo+ICvCoMKgwqDCoH0KPiArfTsKPiArCj4gK3N0YXRpYyB2b2lkIHJ4ODkw MF9yZXNldChEZXZpY2VTdGF0ZSAqZGV2KTsKPiArCj4gK3N0YXRpYyB2b2lkIGNhcHR1cmVfY3Vy cmVudF90aW1lKFJYODkwMFN0YXRlICpzKQo+ICt7Cj4gK8KgwqDCoMKgLyogQ2FwdHVyZSB0aGUg Y3VycmVudCB0aW1lIGludG8gdGhlIHNlY29uZGFyeSByZWdpc3RlcnMKPiArwqDCoMKgwqDCoCog d2hpY2ggd2lsbCBiZSBhY3R1YWxseSByZWFkIGJ5IHRoZSBkYXRhIHRyYW5zZmVyIG9wZXJhdGlv bi4KPiArwqDCoMKgwqDCoCovCj4gK8KgwqDCoMKgc3RydWN0IHRtIG5vdzsKPiArwqDCoMKgwqBx ZW11X2dldF90aW1lZGF0ZSgmbm93LCBzLT5vZmZzZXQpOwo+ICvCoMKgwqDCoHMtPm52cmFtW1NF Q09ORFNdID0gdG9fYmNkKG5vdy50bV9zZWMpOwo+ICvCoMKgwqDCoHMtPm52cmFtW01JTlVURVNd ID0gdG9fYmNkKG5vdy50bV9taW4pOwo+ICvCoMKgwqDCoHMtPm52cmFtW0hPVVJTXSA9IHRvX2Jj ZChub3cudG1faG91cik7Cj4gKwo+ICvCoMKgwqDCoHMtPm52cmFtW1dFRUtEQVldID0gMHgwMSA8 PCAoKG5vdy50bV93ZGF5ICsgcy0+d2RheV9vZmZzZXQpICUgNyk7Cj4gK8KgwqDCoMKgcy0+bnZy YW1bREFZXSA9IHRvX2JjZChub3cudG1fbWRheSk7Cj4gK8KgwqDCoMKgcy0+bnZyYW1bTU9OVEhd ID0gdG9fYmNkKG5vdy50bV9tb24gKyAxKTsKPiArwqDCoMKgwqBzLT5udnJhbVtZRUFSXSA9IHRv X2JjZChub3cudG1feWVhciAlIDEwMCk7Cj4gKwo+ICvCoMKgwqDCoHMtPm52cmFtW0VYVF9TRUNP TkRTXSA9IHMtPm52cmFtW1NFQ09ORFNdOwo+ICvCoMKgwqDCoHMtPm52cmFtW0VYVF9NSU5VVEVT XSA9IHMtPm52cmFtW01JTlVURVNdOwo+ICvCoMKgwqDCoHMtPm52cmFtW0VYVF9IT1VSU10gPSBz LT5udnJhbVtIT1VSU107Cj4gK8KgwqDCoMKgcy0+bnZyYW1bRVhUX1dFRUtEQVldID0gcy0+bnZy YW1bV0VFS0RBWV07Cj4gK8KgwqDCoMKgcy0+bnZyYW1bRVhUX0RBWV0gPSBzLT5udnJhbVtEQVld Owo+ICvCoMKgwqDCoHMtPm52cmFtW0VYVF9NT05USF0gPSBzLT5udnJhbVtNT05USF07Cj4gK8Kg wqDCoMKgcy0+bnZyYW1bRVhUX1lFQVJdID0gcy0+bnZyYW1bWUVBUl07CisKPiArwqDCoMKgwqB0 cmFjZV9yeDg5MDBfY2FwdHVyZV9jdXJyZW50X3RpbWUobm93LnRtX2hvdXIsIG5vdy50bV9taW4s IG5vdy50bV9zZWMsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoChub3cudG1fd2RheSArIHMt PndkYXlfb2Zmc2V0KSAlIDcsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG5vdy50bV9tZGF5 LCBub3cudG1fbW9uLCBub3cudG1feWVhciArIDE5MDAsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHMtPm52cmFtW0hPVVJTXSwgcy0+bnZyYW1bTUlOVVRFU10sIHMtPm52cmFtW1NFQ09ORFNd LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzLT5udnJhbVtXRUVLREFZXSwgcy0+bnZyYW1b REFZXSwgcy0+bnZyYW1bTU9OVEhdLCBzLT5udnJhbVtZRUFSXSk7Cj4gK30KPiArCj4gKy8qKgo+ ICsgKiBJbmNyZW1lbnQgdGhlIGludGVybmFsIHJlZ2lzdGVyIHBvaW50ZXIsIGRlYWxpbmcgd2l0 aCB3cmFwcGluZwo+ICsgKiBAcGFyYW0gcyB0aGUgUlRDIHRvIG9wZXJhdGUgb24KPiArICovCj4g K3N0YXRpYyB2b2lkIGluY19yZWdwdHIoUlg4OTAwU3RhdGUgKnMpCj4gK3sKPiArwqDCoMKgwqAv KiBUaGUgcmVnaXN0ZXIgcG9pbnRlciB3cmFwcyBhcm91bmQgYWZ0ZXIgMHgxRgo+ICvCoMKgwqDC oMKgKi8KPiArwqDCoMKgwqBzLT5udnJhbV9vZmZzZXQgPSAocy0+bnZyYW1fb2Zmc2V0ICsgMSkg JiAoUlg4OTAwX05WUkFNX1NJWkUgLSAxKTsKPiArwqDCoMKgwqB0cmFjZV9yeDg5MDBfcmVncHRy X3VwZGF0ZShzLT5udnJhbV9vZmZzZXQpOwo+ICsKPiArwqDCoMKgwqBpZiAocy0+bnZyYW1fb2Zm c2V0ID09IFNUQVJUX0FERFJFU1MpIHsKPiArwqDCoMKgwqDCoMKgwqDCoHRyYWNlX3J4ODkwMF9y ZWdwdHJfb3ZlcmZsb3coKTsKPiArwqDCoMKgwqDCoMKgwqDCoGNhcHR1cmVfY3VycmVudF90aW1l KHMpOwo+ICvCoMKgwqDCoH0KPiArfQo+ICsKPiArI2RlZmluZSBJTlZBTElEX1dFRUtEQVkgMHhm Zgo+ICsKPiArLyoqCj4gKyAqIFJlY2VpdmUgYW4gSTJDIEV2ZW50Cj4gKyAqIEBwYXJhbSBpMmMg dGhlIGkyYyBkZXZpY2UgaW5zdGFuY2UKPiArICogQHBhcmFtIGV2ZW50IHRoZSBldmVudCB0byBo YW5kbGUKPiArICovCj4gK3N0YXRpYyB2b2lkIHJ4ODkwMF9ldmVudChJMkNTbGF2ZSAqaTJjLCBl bnVtIGkyY19ldmVudCBldmVudCkKPiArewo+ICvCoMKgwqDCoFJYODkwMFN0YXRlICpzID0gUlg4 OTAwKGkyYyk7Cj4gKwo+ICvCoMKgwqDCoHN3aXRjaCAoZXZlbnQpIHsKPiArwqDCoMKgwqBjYXNl IEkyQ19TVEFSVF9SRUNWOgo+ICvCoMKgwqDCoMKgwqDCoMKgLyogSW4gaC93LCB0aW1lIGNhcHR1 cmUgaGFwcGVucyBvbiBhbnkgU1RBUlQgY29uZGl0aW9uLCBub3QganVzdCBhCj4gK8KgwqDCoMKg wqDCoMKgwqDCoCogU1RBUlRfUkVDVi4gRm9yIHRoZSBlbXVsYXRpb24sIGl0IGRvZXNuJ3QgYWN0 dWFsbHkgbWF0dGVyLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqAqIHNpbmNlIGEgU1RBUlRfUkVDViBo YXMgdG8gb2NjdXIgYmVmb3JlIHRoZSBkYXRhIGNhbiBiZSByZWFkLgo+ICvCoMKgwqDCoMKgwqDC oMKgwqAqLwo+ICvCoMKgwqDCoMKgwqDCoMKgY2FwdHVyZV9jdXJyZW50X3RpbWUocyk7Cj4gK8Kg wqDCoMKgwqDCoMKgwqBicmVhazsKPiArwqDCoMKgwqBjYXNlIEkyQ19TVEFSVF9TRU5EOgo+ICvC oMKgwqDCoMKgwqDCoMKgcy0+YWRkcl9ieXRlID0gdHJ1ZTsKPiArwqDCoMKgwqDCoMKgwqDCoGJy ZWFrOwo+ICvCoMKgwqDCoGNhc2UgSTJDX0ZJTklTSDoKPiArwqDCoMKgwqDCoMKgwqDCoGlmIChz LT53ZWVrZGF5IDwgNykgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKiBXZSBkZWZlciB0 aGUgd2Vla2RheSBjYWxjdWxhdGlvbiBhcyBpdCBpcyBoYW5kZWQgdG8gdXMgYmVmb3JlCj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKiB0aGUgZGF0ZSBoYXMgYmVlbiB1cGRhdGVkLiBJZiB3 ZSBjYWxjdWxhdGUgdGhlIHdlZWtkYXkgb2Zmc2V0Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgKiB3aGVuIGl0IGlzIHBhc3NlZCB0byB1cywgd2Ugd2lsbCBpbmNvcnJlY3RseSBkZXRlcm1p bmUgaXQKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAqIGJhc2VkIG9uIHRoZSBjdXJyZW50 IGVtdWxhdGVkIGRhdGUsIHJhdGhlciB0aGFuIHRoZSBkYXRlIHRoYXQKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAqIGhhcyBiZWVuIHdyaXR0ZW4uCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgKi8KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IHRtIG5vdzsKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgcWVtdV9nZXRfdGltZWRhdGUoJm5vdywgcy0+b2Zmc2V0KTsK PiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHMtPndkYXlfb2Zmc2V0ID0gKHMtPndlZWtk YXkgLSBub3cudG1fd2RheSArIDcpICUgNzsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHRyYWNlX3J4ODkwMF9ldmVudF93ZWVrZGF5KHMtPndlZWtkYXksIEJJVChzLT53ZWVrZGF5KSwK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHMtPndkYXlfb2Zmc2V0 KTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHMtPndlZWtkYXkgPSBJTlZBTElEX1dF RUtEQVk7Cj4gK8KgwqDCoMKgwqDCoMKgwqB9Cj4gK8KgwqDCoMKgwqDCoMKgwqBicmVhazsKPiAr Cj4gK8KgwqDCoMKgZGVmYXVsdDoKPiArwqDCoMKgwqDCoMKgwqDCoGJyZWFrOwo+ICvCoMKgwqDC oH0KPiArfQo+ICsKPiArLyoqCj4gKyAqIFBlcmZvcm0gYW4gaTJjIHJlY2VpdmUgYWN0aW9uCj4g KyAqIEBwYXJhbSBpMmMgdGhlIGkyYyBkZXZpY2UgaW5zdGFuY2UKPiArICogQHJldHVybiB0aGUg dmFsdWUgb2YgdGhlIGN1cnJlbnQgcmVnaXN0ZXIKPiArICogQHBvc3QgdGhlIGludGVybmFsIHJl Z2lzdGVyIHBvaW50ZXIgaXMgaW5jcmVtZW50ZWQKPiArICovCj4gK3N0YXRpYyBpbnQgcng4OTAw X3JlY3YoSTJDU2xhdmUgKmkyYykKPiArewo+ICvCoMKgwqDCoFJYODkwMFN0YXRlICpzID0gUlg4 OTAwKGkyYyk7Cj4gK8KgwqDCoMKgdWludDhfdCByZXMgPSBzLT5udnJhbVtzLT5udnJhbV9vZmZz ZXRdOwo+ICvCoMKgwqDCoHRyYWNlX3J4ODkwMF9yZWFkX3JlZ2lzdGVyKHMtPm52cmFtX29mZnNl dCwgcmVzKTsKPiArwqDCoMKgwqBpbmNfcmVncHRyKHMpOwo+ICvCoMKgwqDCoHJldHVybiByZXM7 Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBEaXNhYmxlIHRoZSBjb3VudGRvd24gdGltZXIKPiArICog QHBhcmFtIHMgdGhlIFJUQyB0byBvcGVyYXRlIG9uCj4gKyAqLwo+ICtzdGF0aWMgdm9pZCBkaXNh YmxlX2NvdW50ZG93bl90aW1lcihSWDg5MDBTdGF0ZSAqcykKPiArewo+ICvCoMKgwqDCoHRyYWNl X3J4ODkwMF9kaXNhYmxlX2NvdW50ZG93bl90aW1lcigpOwo+ICvCoMKgwqDCoHB0aW1lcl9zdG9w KHMtPmNvdW50ZG93bl90aW1lcik7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBFbmFibGUgdGhlIGNv dW50ZG93biB0aW1lcgo+ICsgKiBAcGFyYW0gcyB0aGUgUlRDIHRvIG9wZXJhdGUgb24KPiArICov Cj4gK3N0YXRpYyB2b2lkIGVuYWJsZV9jb3VudGRvd25fdGltZXIoUlg4OTAwU3RhdGUgKnMpCj4g K3sKPiArwqDCoMKgwqB0cmFjZV9yeDg5MDBfZW5hYmxlX2NvdW50ZG93bl90aW1lcigpOwo+ICvC oMKgwqDCoHB0aW1lcl9ydW4ocy0+Y291bnRkb3duX3RpbWVyLCAwKTsKPiArfQo+ICsKPiArLyoq Cj4gKyAqIFRpY2sgdGhlIGNvdW50ZG93biB0aW1lcgo+ICsgKiBAcGFyYW0gb3BhcXVlIHRoZSBk ZXZpY2UgaW5zdGFuY2UKPiArICovCj4gK3N0YXRpYyB2b2lkIHJ4ODkwMF9jb3VudGRvd25fdGlj ayh2b2lkICpvcGFxdWUpCj4gK3sKPiArwqDCoMKgwqBSWDg5MDBTdGF0ZSAqcyA9IChSWDg5MDBT dGF0ZSAqKW9wYXF1ZTsKPiArCj4gK8KgwqDCoMKgdWludDE2X3QgY291bnQgPSBzLT5udnJhbVtU SU1FUl9DT1VOVEVSXzBdIHwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKChzLT5udnJhbVtU SU1FUl9DT1VOVEVSXzFdICYgMHgwRikgPDwgOCk7Cj4gK8KgwqDCoMKgdHJhY2Vfcng4OTAwX2Nv dW50ZG93bl90aWNrKGNvdW50KTsKPiArwqDCoMKgwqBjb3VudC0tOwo+ICsKPiArwqDCoMKgwqBz LT5udnJhbVtUSU1FUl9DT1VOVEVSXzBdID0gKHVpbnQ4X3QpKGNvdW50ICYgMHgwMGZmKTsKPiAr wqDCoMKgwqBzLT5udnJhbVtUSU1FUl9DT1VOVEVSXzFdID0gKHVpbnQ4X3QpKChjb3VudCAmIDB4 MGYwMCkgPj4gOCk7Cj4gKwo+ICvCoMKgwqDCoGlmIChjb3VudCA9PSAwKSB7Cj4gK8KgwqDCoMKg wqDCoMKgwqB0cmFjZV9yeDg5MDBfY291bnRkb3duX2VsYXBzZWQoKTsKPiArCj4gK8KgwqDCoMKg wqDCoMKgwqBkaXNhYmxlX2NvdW50ZG93bl90aW1lcihzKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKg wqBzLT5udnJhbVtGTEFHX1JFR0lTVEVSXSB8PSBGTEFHX01BU0tfVEY7Cj4gKwo+ICvCoMKgwqDC oMKgwqDCoMKgaWYgKHMtPm52cmFtW0NPTlRST0xfUkVHSVNURVJdICYgQ1RSTF9NQVNLX1RJRSkg ewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB0cmFjZV9yeDg5MDBfZmlyZV9pbnRlcnJ1cHQo KTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcWVtdV9pcnFfcHVsc2Uocy0+aW50ZXJydXB0 X3Bpbik7Cj4gK8KgwqDCoMKgwqDCoMKgwqB9Cj4gK8KgwqDCoMKgfQo+ICt9Cj4gKwo+ICsvKioK PiArICogRGlzYWJsZSB0aGUgcGVyIHNlY29uZCB0aW1lcgo+ICsgKiBAcGFyYW0gcyB0aGUgUlRD IHRvIG9wZXJhdGUgb24KPiArICovCj4gK3N0YXRpYyB2b2lkIGRpc2FibGVfdGltZXIoUlg4OTAw U3RhdGUgKnMpCj4gK3sKPiArwqDCoMKgwqB0cmFjZV9yeDg5MDBfZGlzYWJsZV90aW1lcigpOwo+ ICvCoMKgwqDCoHB0aW1lcl9zdG9wKHMtPnNlY190aW1lcik7Cj4gK30KPiArCj4gKy8qKgo+ICsg KiBFbmFibGUgdGhlIHBlciBzZWNvbmQgdGltZXIKPiArICogQHBhcmFtIHMgdGhlIFJUQyB0byBv cGVyYXRlIG9uCj4gKyAqLwo+ICtzdGF0aWMgdm9pZCBlbmFibGVfdGltZXIoUlg4OTAwU3RhdGUg KnMpCj4gK3sKPiArwqDCoMKgwqB0cmFjZV9yeDg5MDBfZW5hYmxlX3RpbWVyKCk7Cj4gK8KgwqDC oMKgcHRpbWVyX3J1bihzLT5zZWNfdGltZXIsIDApOwo+ICt9Cj4gKwo+ICsvKioKPiArICogVGlj ayB0aGUgcGVyIHNlY29uZCB0aW1lciAoY2FuIGJlIGNhbGxlZCBtb3JlIGZyZXF1ZW50bHkgYXMg aXQgZWFybHkgZXhpdHMKPiArICogaWYgdGhlIHdhbGwgY2xvY2sgaGFzIG5vdCBwcm9ncmVzc2Vk KQo+ICsgKiBAcGFyYW0gb3BhcXVlIHRoZSBSVEMgdG8gdGljawo+ICsgKi8KPiArc3RhdGljIHZv aWQgcng4OTAwX3RpbWVyX3RpY2sodm9pZCAqb3BhcXVlKQo+ICt7Cj4gK8KgwqDCoMKgUlg4OTAw U3RhdGUgKnMgPSAoUlg4OTAwU3RhdGUgKilvcGFxdWU7Cj4gK8KgwqDCoMKgc3RydWN0IHRtIG5v dzsKPiArwqDCoMKgwqBib29sIGZpcmVfaW50ZXJydXB0ID0gZmFsc2U7Cj4gK8KgwqDCoMKgYm9v bCBhbGFybV93ZWVrX2RheV9tYXRjaGVzOwo+ICsKPiArwqDCoMKgwqBxZW11X2dldF90aW1lZGF0 ZSgmbm93LCBzLT5vZmZzZXQpOwo+ICsKPiArwqDCoMKgwqBpZiAobm93LnRtX3NlYyA9PSBzLT5s YXN0X2ludGVycnVwdF9zZWNvbmRzKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqByZXR1cm47Cj4gK8Kg wqDCoMKgfQo+ICsKPiArwqDCoMKgwqBzLT5sYXN0X2ludGVycnVwdF9zZWNvbmRzID0gbm93LnRt X3NlYzsKPiArCj4gK8KgwqDCoMKgdHJhY2Vfcng4OTAwX3RpY2soKTsKPiArCj4gK8KgwqDCoMKg LyogVXBkYXRlIHRpbWVyIGludGVycnVwdCAqLwo+ICvCoMKgwqDCoGlmIChzLT5udnJhbVtDT05U Uk9MX1JFR0lTVEVSXSAmIENUUkxfTUFTS19VSUUpIHsKPiArwqDCoMKgwqDCoMKgwqDCoGlmICgo cy0+bnZyYW1bRVhURU5TSU9OX1JFR0lTVEVSXSAmIEVYVF9NQVNLX1VTRUwpICYmCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbm93LnRtX21pbiAhPSBzLT5sYXN0X3VwZGF0ZV9p bnRlcnJ1cHRfbWludXRlcykgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzLT5sYXN0X3Vw ZGF0ZV9pbnRlcnJ1cHRfbWludXRlcyA9IG5vdy50bV9taW47Cj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHMtPm52cmFtW0ZMQUdfUkVHSVNURVJdIHw9IEZMQUdfTUFTS19VRjsKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgZmlyZV9pbnRlcnJ1cHQgPSB0cnVlOwo+ICvCoMKgwqDCoMKgwqDC oMKgfSBlbHNlIGlmICghKHMtPm52cmFtW0VYVEVOU0lPTl9SRUdJU1RFUl0gJiBFWFRfTUFTS19V U0VMKSkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKiBwZXIgc2Vjb25kIHVwZGF0ZSBp bnRlcnJ1cHQgKi8KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcy0+bnZyYW1bRkxBR19SRUdJ U1RFUl0gfD0gRkxBR19NQVNLX1VGOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBmaXJlX2lu dGVycnVwdCA9IHRydWU7Cj4gK8KgwqDCoMKgwqDCoMKgwqB9Cj4gK8KgwqDCoMKgfQo+ICsKPiAr wqDCoMKgwqAvKiBBbGFybSBpbnRlcnJ1cHQgKi8KPiArwqDCoMKgwqBpZiAoKHMtPm52cmFtW0VY VEVOU0lPTl9SRUdJU1RFUl0gJiBFWFRfTUFTS19XQURBKSkgewo+ICvCoMKgwqDCoMKgwqDCoMKg YWxhcm1fd2Vla19kYXlfbWF0Y2hlcyA9Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHMtPm52 cmFtW0FMQVJNX1dFRUtfREFZXSA9PSB0b19iY2Qobm93LnRtX21kYXkpOwo+ICvCoMKgwqDCoH0g ZWxzZSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqBhbGFybV93ZWVrX2RheV9tYXRjaGVzID0KPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgcy0+bnZyYW1bQUxBUk1fV0VFS19EQVldID09Cj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMHgwMSA8PCAoKG5vdy50bV93ZGF5ICsgcy0+d2Rh eV9vZmZzZXQpICUgNyk7Cj4gK8KgwqDCoMKgfQo+ICsKPiArwqDCoMKgwqBpZiAoKHMtPm52cmFt W0NPTlRST0xfUkVHSVNURVJdICYgQ1RSTF9NQVNLX0FJRSkgJiYgbm93LnRtX3NlYyA9PSAwICYm Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHMtPm52cmFtW0FMQVJNX01JTlVURV0gPT0gdG9f YmNkKG5vdy50bV9taW4pICYmCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHMtPm52cmFtW0FM QVJNX0hPVVJdID09IHRvX2JjZChub3cudG1faG91cikgJiYKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgYWxhcm1fd2Vla19kYXlfbWF0Y2hlcykgewo+ICvCoMKgwqDCoMKgwqDCoMKgdHJhY2Vf cng4OTAwX3RyaWdnZXJfYWxhcm0oKTsKPiArwqDCoMKgwqDCoMKgwqDCoHMtPm52cmFtW0ZMQUdf UkVHSVNURVJdIHw9IEZMQUdfTUFTS19BRjsKPiArwqDCoMKgwqDCoMKgwqDCoGZpcmVfaW50ZXJy dXB0ID0gdHJ1ZTsKPiArwqDCoMKgwqB9Cj4gKwo+ICvCoMKgwqDCoGlmIChmaXJlX2ludGVycnVw dCkgewo+ICvCoMKgwqDCoMKgwqDCoMKgdHJhY2Vfcng4OTAwX2ZpcmVfaW50ZXJydXB0KCk7Cj4g K8KgwqDCoMKgwqDCoMKgwqBxZW11X2lycV9wdWxzZShzLT5pbnRlcnJ1cHRfcGluKTsKPiArwqDC oMKgwqB9Cj4gK30KPiArCj4gKwo+ICsjZGVmaW5lIENPVU5URE9XTl9USU1FUl9GUkVRIDQwOTYK PiArCj4gKy8qKgo+ICsgKiBWYWxpZGF0ZSB0aGUgZXh0ZW5zaW9uIHJlZ2lzdGVyIGFuZCBwZXJm b3JtIGFjdGlvbnMgYmFzZWQgb24gdGhlIGJpdHMKPiArICogQHBhcmFtIHMgdGhlIFJUQyB0byBv cGVyYXRlIG9uCj4gKyAqIEBwYXJhbSBkYXRhIHRoZSBuZXcgZGF0YSBmb3IgdGhlIGV4dGVuc2lv biByZWdpc3Rlcgo+ICsgKi8KPiArc3RhdGljIHZvaWQgdXBkYXRlX2V4dGVuc2lvbl9yZWdpc3Rl cihSWDg5MDBTdGF0ZSAqcywgdWludDhfdCBkYXRhKQo+ICt7Cj4gK8KgwqDCoMKgaWYgKGRhdGEg JiBFWFRfTUFTS19URVNUKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqBxZW11X2xvZ19tYXNrKExPR19H VUVTVF9FUlJPUiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAiVGVzdCBiaXQg aXMgZW5hYmxlZCBidXQgaXMgZm9yYmlkZGVuIGJ5IHRoZSBtYW51ZmFjdHVyZXIiKTsKPiArwqDC oMKgwqB9Cj4gKwo+ICvCoMKgwqDCoGlmICgoZGF0YSBeIHMtPm52cmFtW0VYVEVOU0lPTl9SRUdJ U1RFUl0pICYKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKEVYVF9NQVNLX0ZTRUwwIHwgRVhU X01BU0tfRlNFTDEpKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqAvKiBGU0VMeCBoYXMgY2hhbmdlZCAq Lwo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoHN3aXRjaCAoZGF0YSAmIChFWFRfTUFTS19GU0VMMCB8 IEVYVF9NQVNLX0ZTRUwxKSkgewo+ICvCoMKgwqDCoMKgwqDCoMKgY2FzZSBFWFRfTUFTS19GU0VM MDoKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdHJhY2Vfcng4OTAwX3NldF9mb3V0KDEwMjQp Owo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwdGltZXJfc2V0X2xpbWl0KHMtPmZvdXRfdGlt ZXIsIDMyLCAxKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJlYWs7Cj4gK8KgwqDCoMKg wqDCoMKgwqBjYXNlIEVYVF9NQVNLX0ZTRUwxOgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB0 cmFjZV9yeDg5MDBfc2V0X2ZvdXQoMSk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHB0aW1l cl9zZXRfbGltaXQocy0+Zm91dF90aW1lciwgMzI3NjgsIDEpOwo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBicmVhazsKPiArwqDCoMKgwqDCoMKgwqDCoGNhc2UgMDoKPiArwqDCoMKgwqDCoMKg wqDCoGNhc2UgKEVYVF9NQVNLX0ZTRUwwIHwgRVhUX01BU0tfRlNFTDEpOgo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqB0cmFjZV9yeDg5MDBfc2V0X2ZvdXQoMzI3NjgpOwo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBwdGltZXJfc2V0X2xpbWl0KHMtPmZvdXRfdGltZXIsIDEsIDEpOwo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVhazsKPiArwqDCoMKgwqDCoMKgwqDCoH0KPiArwqDC oMKgwqB9Cj4gKwo+ICvCoMKgwqDCoGlmICgoZGF0YSBeIHMtPm52cmFtW0VYVEVOU0lPTl9SRUdJ U1RFUl0pICYKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKEVYVF9NQVNLX1RTRUwwIHwgRVhU X01BU0tfVFNFTDEpKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqAvKiBUU0VMeCBoYXMgY2hhbmdlZCAq Lwo+ICvCoMKgwqDCoMKgwqDCoMKgc3dpdGNoIChkYXRhICYgKEVYVF9NQVNLX1RTRUwwIHwgRVhU X01BU0tfVFNFTDEpKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqBjYXNlIDA6Cj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHRyYWNlX3J4ODkwMF9zZXRfY291bnRkb3duX3RpbWVyKDY0KTsKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgcHRpbWVyX3NldF9saW1pdChzLT5jb3VudGRvd25fdGltZXIs IENPVU5URE9XTl9USU1FUl9GUkVRIC8gNjQsIDEpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBicmVhazsKPiArwqDCoMKgwqDCoMKgwqDCoGNhc2UgRVhUX01BU0tfVFNFTDA6Cj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHRyYWNlX3J4ODkwMF9zZXRfY291bnRkb3duX3RpbWVyKDEpOwo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwdGltZXJfc2V0X2xpbWl0KHMtPmNvdW50ZG93bl90 aW1lciwgQ09VTlRET1dOX1RJTUVSX0ZSRVEsIDEpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBicmVhazsKPiArwqDCoMKgwqDCoMKgwqDCoGNhc2UgRVhUX01BU0tfVFNFTDE6Cj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHRyYWNlX3J4ODkwMF9zZXRfY291bnRkb3duX3RpbWVyX3Blcl9t aW51dGUoKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcHRpbWVyX3NldF9saW1pdChzLT5j b3VudGRvd25fdGltZXIsIENPVU5URE9XTl9USU1FUl9GUkVRICogNjAsIDEpOwo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBicmVhazsKPiArwqDCoMKgwqDCoMKgwqDCoGNhc2UgKEVYVF9NQVNL X1RTRUwwIHwgRVhUX01BU0tfVFNFTDEpOgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB0cmFj ZV9yeDg5MDBfc2V0X2NvdW50ZG93bl90aW1lcihDT1VOVERPV05fVElNRVJfRlJFUSk7Cj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHB0aW1lcl9zZXRfbGltaXQocy0+Y291bnRkb3duX3RpbWVy LCAxLCAxKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJlYWs7Cj4gK8KgwqDCoMKgwqDC oMKgwqB9Cj4gK8KgwqDCoMKgfQo+ICsKPiArwqDCoMKgwqBpZiAoZGF0YSAmIEVYVF9NQVNLX1RF KSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqBlbmFibGVfY291bnRkb3duX3RpbWVyKHMpOwo+ICvCoMKg wqDCoH0KPiArCj4gK8KgwqDCoMKgcy0+bnZyYW1bRVhURU5TSU9OX1JFR0lTVEVSXSA9IGRhdGE7 Cj4gK8KgwqDCoMKgcy0+bnZyYW1bRVhUX0VYVEVOU0lPTl9SRUdJU1RFUl0gPSBkYXRhOwo+ICsK PiArfQo+ICsvKioKPiArICogVmFsaWRhdGUgdGhlIGNvbnRyb2wgcmVnaXN0ZXIgYW5kIHBlcmZv cm0gYWN0aW9ucyBiYXNlZCBvbiB0aGUgYml0cwo+ICsgKiBAcGFyYW0gcyB0aGUgUlRDIHRvIG9w ZXJhdGUgb24KPiArICogQHBhcmFtIGRhdGEgdGhlIG5ldyB2YWx1ZSBmb3IgdGhlIGNvbnRyb2wg cmVnaXN0ZXIKPiArICovCj4gKwo+ICtzdGF0aWMgdm9pZCB1cGRhdGVfY29udHJvbF9yZWdpc3Rl cihSWDg5MDBTdGF0ZSAqcywgdWludDhfdCBkYXRhKQo+ICt7Cj4gK8KgwqDCoMKgdWludDhfdCBk aWZmbWFzayA9IH5zLT5udnJhbVtDT05UUk9MX1JFR0lTVEVSXSAmIGRhdGE7Cj4gKwo+ICvCoMKg wqDCoGlmIChkaWZmbWFzayAmIENUUkxfTUFTS19XUDApIHsKPiArwqDCoMKgwqDCoMKgwqDCoGRh dGEgJj0gfkNUUkxfTUFTS19XUDA7Cj4gK8KgwqDCoMKgwqDCoMKgwqBxZW11X2xvZ19tYXNrKExP R19HVUVTVF9FUlJPUiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIkF0dGVtcHQgdG8gd3Jp dGUgdG8gd3JpdGUgcHJvdGVjdGVkIGJpdCAlZCBpbiBjb250cm9sIHJlZ2lzdGVyIiwKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgQ1RSTF9SRUdfV1AwKTsKPiArwqDCoMKgwqB9Cj4gKwo+ICvC oMKgwqDCoGlmIChkaWZmbWFzayAmIENUUkxfTUFTS19XUDEpIHsKPiArwqDCoMKgwqDCoMKgwqDC oGRhdGEgJj0gfkNUUkxfTUFTS19XUDE7Cj4gK8KgwqDCoMKgwqDCoMKgwqBxZW11X2xvZ19tYXNr KExPR19HVUVTVF9FUlJPUiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIkF0dGVtcHQgdG8g d3JpdGUgdG8gd3JpdGUgcHJvdGVjdGVkIGJpdCAlZCBpbiBjb250cm9sIHJlZ2lzdGVyIiwKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgQ1RSTF9SRUdfV1AxKTsKPiArwqDCoMKgwqB9Cj4gKwo+ ICvCoMKgwqDCoGlmIChkYXRhICYgQ1RSTF9NQVNLX1JFU0VUKSB7Cj4gK8KgwqDCoMKgwqDCoMKg wqBkYXRhICY9IH5DVFJMX01BU0tfUkVTRVQ7Cj4gK8KgwqDCoMKgwqDCoMKgwqByeDg5MDBfcmVz ZXQoREVWSUNFKHMpKTsKPiArwqDCoMKgwqB9Cj4gKwo+ICvCoMKgwqDCoGlmIChkaWZmbWFzayAm IENUUkxfTUFTS19VSUUpIHsKPiArwqDCoMKgwqDCoMKgwqDCoC8qIFVwZGF0ZSBpbnRlcnJ1cHRz IHdlcmUgb2ZmIGFuZCBhcmUgbm93IG9uICovCj4gK8KgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgdG0g bm93Owo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoHRyYWNlX3J4ODkwMF9lbmFibGVfdXBkYXRlX3Rp bWVyKCk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgcWVtdV9nZXRfdGltZWRhdGUoJm5vdywgcy0+ b2Zmc2V0KTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqBzLT5sYXN0X3VwZGF0ZV9pbnRlcnJ1cHRf bWludXRlcyA9IG5vdy50bV9taW47Cj4gK8KgwqDCoMKgwqDCoMKgwqBzLT5sYXN0X2ludGVycnVw dF9zZWNvbmRzID0gbm93LnRtX3NlYzsKPiArwqDCoMKgwqDCoMKgwqDCoGVuYWJsZV90aW1lcihz KTsKPiArwqDCoMKgwqB9Cj4gKwo+ICvCoMKgwqDCoGlmIChkaWZmbWFzayAmIENUUkxfTUFTS19B SUUpIHsKPiArwqDCoMKgwqDCoMKgwqDCoC8qIEFsYXJtIGludGVycnVwdHMgd2VyZSBvZmYgYW5k IGFyZSBub3cgb24gKi8KPiArwqDCoMKgwqDCoMKgwqDCoHN0cnVjdCB0bSBub3c7Cj4gKwo+ICvC oMKgwqDCoMKgwqDCoMKgdHJhY2Vfcng4OTAwX2VuYWJsZV9hbGFybSgpOwo+ICsKPiArwqDCoMKg wqDCoMKgwqDCoHFlbXVfZ2V0X3RpbWVkYXRlKCZub3csIHMtPm9mZnNldCk7Cj4gKwo+ICvCoMKg wqDCoMKgwqDCoMKgcy0+bGFzdF9pbnRlcnJ1cHRfc2Vjb25kcyA9IG5vdy50bV9zZWM7Cj4gK8Kg wqDCoMKgwqDCoMKgwqBlbmFibGVfdGltZXIocyk7Cj4gK8KgwqDCoMKgfQo+ICsKPiArwqDCoMKg wqBpZiAoIShkYXRhICYgKENUUkxfTUFTS19VSUUgfCBDVFJMX01BU0tfQUlFKSkpIHsKPiArwqDC oMKgwqDCoMKgwqDCoGRpc2FibGVfdGltZXIocyk7Cj4gK8KgwqDCoMKgfQo+ICsKPiArwqDCoMKg wqBzLT5udnJhbVtDT05UUk9MX1JFR0lTVEVSXSA9IGRhdGE7Cj4gK8KgwqDCoMKgcy0+bnZyYW1b RVhUX0NPTlRST0xfUkVHSVNURVJdID0gZGF0YTsKPiArfQo+ICsKPiArLyoqCj4gKyAqIFZhbGlk YXRlIHRoZSBmbGFnIHJlZ2lzdGVyCj4gKyAqIEBwYXJhbSBzIHRoZSBSVEMgdG8gb3BlcmF0ZSBv bgo+ICsgKiBAcGFyYW0gZGF0YSB0aGUgbmV3IHZhbHVlIGZvciB0aGUgZmxhZyByZWdpc3Rlcgo+ ICsgKi8KPiArc3RhdGljIHZvaWQgdmFsaWRhdGVfZmxhZ19yZWdpc3RlcihSWDg5MDBTdGF0ZSAq cywgdWludDhfdCAqZGF0YSkKPiArewo+ICvCoMKgwqDCoHVpbnQ4X3QgZGlmZm1hc2sgPSB+cy0+ bnZyYW1bRkxBR19SRUdJU1RFUl0gJiAqZGF0YTsKPiArCj4gK8KgwqDCoMKgaWYgKGRpZmZtYXNr ICYgRkxBR19NQVNLX1ZERVQpIHsKPiArwqDCoMKgwqDCoMKgwqDCoCpkYXRhICY9IH5GTEFHX01B U0tfVkRFVDsKPiArwqDCoMKgwqDCoMKgwqDCoHFlbXVfbG9nX21hc2soTE9HX0dVRVNUX0VSUk9S LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAiT25seSAwIGNhbiBiZSB3cml0dGVuIHRvIFZE RVQgYml0ICVkIGluIHRoZSBmbGFnIHJlZ2lzdGVyIiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgRkxBR19SRUdfVkRFVCk7Cj4gK8KgwqDCoMKgfQo+ICsKPiArwqDCoMKgwqBpZiAoZGlmZm1h c2sgJiBGTEFHX01BU0tfVkxGKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqAqZGF0YSAmPSB+RkxBR19N QVNLX1ZMRjsKPiArwqDCoMKgwqDCoMKgwqDCoHFlbXVfbG9nX21hc2soTE9HX0dVRVNUX0VSUk9S LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAiT25seSAwIGNhbiBiZSB3cml0dGVuIHRvIFZM RiBiaXQgJWQgaW4gdGhlIGZsYWcgcmVnaXN0ZXIiLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBGTEFHX1JFR19WTEYpOwo+ICvCoMKgwqDCoH0KPiArCj4gK8KgwqDCoMKgaWYgKGRpZmZtYXNr ICYgRkxBR19NQVNLX1VOVVNFRF8yKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqAqZGF0YSAmPSB+RkxB R19NQVNLX1VOVVNFRF8yOwo+ICvCoMKgwqDCoMKgwqDCoMKgcWVtdV9sb2dfbWFzayhMT0dfR1VF U1RfRVJST1IsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCJPbmx5IDAgY2FuIGJlIHdyaXR0 ZW4gdG8gdW51c2VkIGJpdCAlZCBpbiB0aGUgZmxhZyByZWdpc3RlciIsCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoEZMQUdfUkVHX1VOVVNFRF8yKTsKPiArwqDCoMKgwqB9Cj4gKwo+ICvCoMKg wqDCoGlmIChkaWZmbWFzayAmIEZMQUdfTUFTS19VTlVTRURfNikgewo+ICvCoMKgwqDCoMKgwqDC oMKgKmRhdGEgJj0gfkZMQUdfTUFTS19VTlVTRURfNjsKPiArwqDCoMKgwqDCoMKgwqDCoHFlbXVf bG9nX21hc2soTE9HX0dVRVNUX0VSUk9SLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAiT25s eSAwIGNhbiBiZSB3cml0dGVuIHRvIHVudXNlZCBiaXQgJWQgaW4gdGhlIGZsYWcgcmVnaXN0ZXIi LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBGTEFHX1JFR19VTlVTRURfNik7Cj4gK8KgwqDC oMKgfQo+ICsKPiArwqDCoMKgwqBpZiAoZGlmZm1hc2sgJiBGTEFHX01BU0tfVU5VU0VEXzcpIHsK PiArwqDCoMKgwqDCoMKgwqDCoCpkYXRhICY9IH5GTEFHX01BU0tfVU5VU0VEXzc7Cj4gK8KgwqDC oMKgwqDCoMKgwqBxZW11X2xvZ19tYXNrKExPR19HVUVTVF9FUlJPUiwKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIk9ubHkgMCBjYW4gYmUgd3JpdHRlbiB0byB1bnVzZWQgYml0ICVkIGluIHRo ZSBmbGFnIHJlZ2lzdGVyIiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgRkxBR19SRUdfVU5V U0VEXzcpOwo+ICvCoMKgwqDCoH0KPiArfQo+ICsKPiArLyoqCj4gKyAqIEhhbmRsZSBGT1VUX0VO QUJMRSAoRk9FKSBsaW5lCj4gKyAqIEVuYWJsZXMvZGlzYWJsZXMgdGhlIEZPVVQgbGluZQo+ICsg KiBAcGFyYW0gb3BhcXVlIHRoZSBkZXZpY2UgaW5zdGFuY2UKPiArICogQHBhcmFtIG4gdGhlIElS USBudW1iZXIKPiArICogQHBhcmFtIGxldmVsIHRydWUgaWYgdGhlIGxpbmUgaGFzIGJlZW4gcmFp c2VkCj4gKyAqLwo+ICtzdGF0aWMgdm9pZCByeDg5MDBfZm91dF9lbmFibGVfaGFuZGxlcih2b2lk ICpvcGFxdWUsIGludCBuLCBpbnQgbGV2ZWwpCj4gK3sKPiArwqDCoMKgwqBSWDg5MDBTdGF0ZSAq cyA9IFJYODkwMChvcGFxdWUpOwo+ICsKPiArwqDCoMKgwqBpZiAobGV2ZWwpIHsKPiArwqDCoMKg wqDCoMKgwqDCoHRyYWNlX3J4ODkwMF9lbmFibGVfZm91dCgpOwo+ICvCoMKgwqDCoMKgwqDCoMKg cHRpbWVyX3J1bihzLT5mb3V0X3RpbWVyLCAwKTsKPiArwqDCoMKgwqB9IGVsc2Ugewo+ICvCoMKg wqDCoMKgwqDCoMKgLyogZGlzYWJsZSBmb3V0ICovCj4gK8KgwqDCoMKgwqDCoMKgwqB0cmFjZV9y eDg5MDBfZGlzYWJsZV9mb3V0KCk7Cj4gK8KgwqDCoMKgwqDCoMKgwqBwdGltZXJfc3RvcChzLT5m b3V0X3RpbWVyKTsKPiArwqDCoMKgwqB9Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBUaWNrIHRoZSBG T1VUIHRpbWVyCj4gKyAqIEBwYXJhbSBvcGFxdWUgdGhlIGRldmljZSBpbnN0YW5jZQo+ICsgKi8K PiArc3RhdGljIHZvaWQgcng4OTAwX2ZvdXRfdGljayh2b2lkICpvcGFxdWUpCj4gK3sKPiArwqDC oMKgwqBSWDg5MDBTdGF0ZSAqcyA9IChSWDg5MDBTdGF0ZSAqKW9wYXF1ZTsKPiArCj4gK8KgwqDC oMKgdHJhY2Vfcng4OTAwX2ZvdXRfdG9nZ2xlKCk7Cj4gK8KgwqDCoMKgcy0+Zm91dF9zdGF0ZSA9 ICFzLT5mb3V0X3N0YXRlOwo+ICsKPiArwqDCoMKgwqBpZiAocy0+Zm91dF9zdGF0ZSkgewo+ICvC oMKgwqDCoMKgwqDCoMKgcWVtdV9pcnFfcmFpc2Uocy0+Zm91dF9waW4pOwo+ICvCoMKgwqDCoH0g ZWxzZSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqBxZW11X2lycV9sb3dlcihzLT5mb3V0X3Bpbik7Cj4g K8KgwqDCoMKgfQoKV2UgY291bGQganVzdCB1c2UgcWVtdV9zZXRfaXJxKCkgaGVyZS4KCj4gK30K PiArCj4gKy8qKgo+ICsgKiBWZXJpZnkgdGhlIGN1cnJlbnQgdm9sdGFnZSBhbmQgcmFpc2UgZmxh Z3MgaWYgaXQgaXMgbG93Cj4gKyAqIEBwYXJhbSBzIHRoZSBSVEMgdG8gb3BlcmF0ZSBvbgo+ICsg Ki8KPiArc3RhdGljIHZvaWQgY2hlY2tfdm9sdGFnZShSWDg5MDBTdGF0ZSAqcykKPiArewo+ICvC oMKgwqDCoGlmICghKHMtPm52cmFtW0JBQ0tVUF9GVU5DVElPTl0gJiBCQUNLVVBfTUFTS19WREVU T0ZGKSkgewo+ICvCoMKgwqDCoMKgwqDCoMKgaWYgKHMtPnN1cHBseV92b2x0YWdlIDwgMi4wKSB7 Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHMtPm52cmFtW0ZMQUdfUkVHSVNURVJdIHw9IEZM QUdfTUFTS19WREVUOwo+ICvCoMKgwqDCoMKgwqDCoMKgfQo+ICsKPiArwqDCoMKgwqDCoMKgwqDC oGlmIChzLT5zdXBwbHlfdm9sdGFnZSA8IDEuNikgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBzLT5udnJhbVtGTEFHX1JFR0lTVEVSXSB8PSBGTEFHX01BU0tfVkxGOwo+ICvCoMKgwqDCoMKg wqDCoMKgfQo+ICvCoMKgwqDCoH0KPiArfQo+ICsKPiArLyoqCj4gKyAqIFJlY2VpdmUgYSBieXRl IG9mIGRhdGEgZnJvbSBpMmMKPiArICogQHBhcmFtIGkyYyB0aGUgaTJjIGRldmljZSB0aGF0IGlz IHJlY2VpdmluZyBkYXRhCj4gKyAqIEBwYXJhbSBkYXRhIHRoZSBkYXRhIHRoYXQgd2FzIHJlY2Vp dmVkCj4gKyAqLwo+ICtzdGF0aWMgaW50IHJ4ODkwMF9zZW5kKEkyQ1NsYXZlICppMmMsIHVpbnQ4 X3QgZGF0YSkKPiArewo+ICvCoMKgwqDCoFJYODkwMFN0YXRlICpzID0gUlg4OTAwKGkyYyk7Cj4g K8KgwqDCoMKgc3RydWN0IHRtIG5vdzsKPiArCj4gK8KgwqDCoMKgdHJhY2Vfcng4OTAwX2kyY19k YXRhX3JlY2VpdmUoZGF0YSk7Cj4gKwo+ICvCoMKgwqDCoGlmIChzLT5hZGRyX2J5dGUpIHsKPiAr wqDCoMKgwqDCoMKgwqDCoHMtPm52cmFtX29mZnNldCA9IGRhdGEgJiAoUlg4OTAwX05WUkFNX1NJ WkUgLSAxKTsKPiArwqDCoMKgwqDCoMKgwqDCoHRyYWNlX3J4ODkwMF9yZWdwdHJfdXBkYXRlKHMt Pm52cmFtX29mZnNldCk7Cj4gK8KgwqDCoMKgwqDCoMKgwqBzLT5hZGRyX2J5dGUgPSBmYWxzZTsK PiArwqDCoMKgwqDCoMKgwqDCoHJldHVybiAwOwo+ICvCoMKgwqDCoH0KPiArCj4gK8KgwqDCoMKg dHJhY2Vfcng4OTAwX3NldF9yZWdpc3RlcihzLT5udnJhbV9vZmZzZXQsIGRhdGEpOwo+ICsKPiAr wqDCoMKgwqBxZW11X2dldF90aW1lZGF0ZSgmbm93LCBzLT5vZmZzZXQpOwo+ICvCoMKgwqDCoHN3 aXRjaCAocy0+bnZyYW1fb2Zmc2V0KSB7Cj4gK8KgwqDCoMKgY2FzZSBTRUNPTkRTOgo+ICvCoMKg wqDCoGNhc2UgRVhUX1NFQ09ORFM6Cj4gK8KgwqDCoMKgwqDCoMKgwqBub3cudG1fc2VjID0gZnJv bV9iY2QoZGF0YSAmIDB4N2YpOwo+ICvCoMKgwqDCoMKgwqDCoMKgaWYgKG5vdy50bV9zZWMgPiA1 OSkgeyAvKiBSWDg5MDAgZG9lcyBub3Qgc3VwcG9ydCBsZWFwIHNlY29uZHMgKi8KPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgcWVtdV9sb2dfbWFzayhMT0dfR1VFU1RfRVJST1IsCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIlJYODkwMCAtIHNlY29uZCBkYXRhICcleCcgaXMg b3V0IG9mIHJhbmdlLCAiCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAidW5kZWZpbmVkIGJlaGF2aW9yIHdpbGwgcmVzdWx0IiwgZGF0YSk7Cj4gK8KgwqDCoMKgwqDC oMKgwqB9Cj4gK8KgwqDCoMKgwqDCoMKgwqBzLT5vZmZzZXQgPSBxZW11X3RpbWVkYXRlX2RpZmYo Jm5vdyk7Cj4gK8KgwqDCoMKgwqDCoMKgwqBicmVhazsKPiArCj4gK8KgwqDCoMKgY2FzZSBNSU5V VEVTOgo+ICvCoMKgwqDCoGNhc2UgRVhUX01JTlVURVM6Cj4gK8KgwqDCoMKgwqDCoMKgwqBub3cu dG1fbWluID0gZnJvbV9iY2QoZGF0YSAmIDB4N2YpOwo+ICvCoMKgwqDCoMKgwqDCoMKgaWYgKG5v dy50bV9taW4gPiA1OSkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBxZW11X2xvZ19tYXNr KExPR19HVUVTVF9FUlJPUiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAiUlg4 OTAwIC0gbWludXRlIGRhdGEgJyV4JyBpcyBvdXQgb2YgcmFuZ2UsICIKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCJ1bmRlZmluZWQgYmVoYXZpb3Igd2lsbCByZXN1 bHQiLCBkYXRhKTsKPiArwqDCoMKgwqDCoMKgwqDCoH0KPiArwqDCoMKgwqDCoMKgwqDCoHMtPm9m ZnNldCA9IHFlbXVfdGltZWRhdGVfZGlmZigmbm93KTsKPiArwqDCoMKgwqDCoMKgwqDCoGJyZWFr Owo+ICsKPiArwqDCoMKgwqBjYXNlIEhPVVJTOgo+ICvCoMKgwqDCoGNhc2UgRVhUX0hPVVJTOgo+ ICvCoMKgwqDCoMKgwqDCoMKgbm93LnRtX2hvdXIgPSBmcm9tX2JjZChkYXRhICYgMHgzZik7Cj4g K8KgwqDCoMKgwqDCoMKgwqBpZiAobm93LnRtX2hvdXIgPiAyNCkgewo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBxZW11X2xvZ19tYXNrKExPR19HVUVTVF9FUlJPUiwKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAiUlg4OTAwIC0gaG91ciBkYXRhICcleCcgaXMgb3V0IG9mIHJh bmdlLCAiCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAidW5kZWZp bmVkIGJlaGF2aW9yIHdpbGwgcmVzdWx0IiwgZGF0YSk7Cj4gK8KgwqDCoMKgwqDCoMKgwqB9Cj4g K8KgwqDCoMKgwqDCoMKgwqBzLT5vZmZzZXQgPSBxZW11X3RpbWVkYXRlX2RpZmYoJm5vdyk7Cj4g K8KgwqDCoMKgwqDCoMKgwqBicmVhazsKPiArCj4gK8KgwqDCoMKgY2FzZSBXRUVLREFZOgo+ICvC oMKgwqDCoGNhc2UgRVhUX1dFRUtEQVk6IHsKPiArwqDCoMKgwqDCoMKgwqDCoGludCB1c2VyX3dk YXkgPSBjdHozMihkYXRhKTsKPiArwqDCoMKgwqDCoMKgwqDCoC8qIFRoZSBkYXkgZmllbGQgaXMg c3VwcG9zZWQgdG8gY29udGFpbiBhIHZhbHVlIGluCj4gK8KgwqDCoMKgwqDCoMKgwqDCoCogd2l0 aCBvbmx5IDEgb2YgYml0cyAwLTYgc2V0LiBPdGhlcndpc2UgYmVoYXZpb3IgaXMgdW5kZWZpbmVk Lgo+ICvCoMKgwqDCoMKgwqDCoMKgwqAqLwo+ICvCoMKgwqDCoMKgwqDCoMKgc3dpdGNoIChkYXRh KSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqBjYXNlIDB4MDE6Cj4gK8KgwqDCoMKgwqDCoMKgwqBjYXNl IDB4MDI6Cj4gK8KgwqDCoMKgwqDCoMKgwqBjYXNlIDB4MDQ6Cj4gK8KgwqDCoMKgwqDCoMKgwqBj YXNlIDB4MDg6Cj4gK8KgwqDCoMKgwqDCoMKgwqBjYXNlIDB4MTA6Cj4gK8KgwqDCoMKgwqDCoMKg wqBjYXNlIDB4MjA6Cj4gK8KgwqDCoMKgwqDCoMKgwqBjYXNlIDB4NDA6Cj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGJyZWFrOwo+ICvCoMKgwqDCoMKgwqDCoMKgZGVmYXVsdDoKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgcWVtdV9sb2dfbWFzayhMT0dfR1VFU1RfRVJST1IsCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIlJYODkwMCAtIHdlZWtkYXkgZGF0YSAnJXgnIGlz IG91dCBvZiByYW5nZSwgIgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAidW5kZWZpbmVkIGJlaGF2aW9yIHdpbGwgcmVzdWx0IiwgZGF0YSk7Cj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJyZWFrOwo+ICvCoMKgwqDCoMKgwqDCoMKgfQoKSSB0aGlu ayBpdCBtaWdodCBiZSBjbGVhcmVyIHRvIGRvOgoKICAgIGlmIChkYXRhID09IDB4ODAgfHwgY3Rw b3A4KGRhdGEpICE9IDEpIHsKICAgICAgICBxZW11X2xvZ19tYXNrKC4uLik7CiAgICAgICAgYnJl YWs7CiAgICB9Cgo+ICvCoMKgwqDCoMKgwqDCoMKgcy0+d2Vla2RheSA9IHVzZXJfd2RheTsKPiAr wqDCoMKgwqDCoMKgwqDCoGJyZWFrOwo+ICvCoMKgwqDCoH0KPiArCj4gK8KgwqDCoMKgY2FzZSBE QVk6Cj4gK8KgwqDCoMKgY2FzZSBFWFRfREFZOgo+ICvCoMKgwqDCoMKgwqDCoMKgbm93LnRtX21k YXkgPSBmcm9tX2JjZChkYXRhICYgMHgzZik7Cj4gK8KgwqDCoMKgwqDCoMKgwqBzLT5vZmZzZXQg PSBxZW11X3RpbWVkYXRlX2RpZmYoJm5vdyk7Cj4gK8KgwqDCoMKgwqDCoMKgwqBicmVhazsKPiAr Cj4gK8KgwqDCoMKgY2FzZSBNT05USDoKPiArwqDCoMKgwqBjYXNlIEVYVF9NT05USDoKPiArwqDC oMKgwqDCoMKgwqDCoG5vdy50bV9tb24gPSBmcm9tX2JjZChkYXRhICYgMHgxZikgLSAxOwo+ICvC oMKgwqDCoMKgwqDCoMKgcy0+b2Zmc2V0ID0gcWVtdV90aW1lZGF0ZV9kaWZmKCZub3cpOwo+ICvC oMKgwqDCoMKgwqDCoMKgYnJlYWs7Cj4gKwo+ICvCoMKgwqDCoGNhc2UgWUVBUjoKPiArwqDCoMKg wqBjYXNlIEVYVF9ZRUFSOgo+ICvCoMKgwqDCoMKgwqDCoMKgbm93LnRtX3llYXIgPSBmcm9tX2Jj ZChkYXRhKSArIDEwMDsKPiArwqDCoMKgwqDCoMKgwqDCoHMtPm9mZnNldCA9IHFlbXVfdGltZWRh dGVfZGlmZigmbm93KTsKPiArwqDCoMKgwqDCoMKgwqDCoGJyZWFrOwo+ICsKPiArwqDCoMKgwqBj YXNlIEVYVEVOU0lPTl9SRUdJU1RFUjoKPiArwqDCoMKgwqBjYXNlIEVYVF9FWFRFTlNJT05fUkVH SVNURVI6Cj4gK8KgwqDCoMKgwqDCoMKgwqB1cGRhdGVfZXh0ZW5zaW9uX3JlZ2lzdGVyKHMsIGRh dGEpOwo+ICvCoMKgwqDCoMKgwqDCoMKgYnJlYWs7Cj4gKwo+ICvCoMKgwqDCoGNhc2UgRkxBR19S RUdJU1RFUjoKPiArwqDCoMKgwqBjYXNlIEVYVF9GTEFHX1JFR0lTVEVSOgo+ICvCoMKgwqDCoMKg wqDCoMKgdmFsaWRhdGVfZmxhZ19yZWdpc3RlcihzLCAmZGF0YSk7Cj4gKwo+ICvCoMKgwqDCoMKg wqDCoMKgcy0+bnZyYW1bRkxBR19SRUdJU1RFUl0gPSBkYXRhOwo+ICvCoMKgwqDCoMKgwqDCoMKg cy0+bnZyYW1bRVhUX0ZMQUdfUkVHSVNURVJdID0gZGF0YTsKPiArCj4gK8KgwqDCoMKgwqDCoMKg wqBjaGVja192b2x0YWdlKHMpOwo+ICvCoMKgwqDCoMKgwqDCoMKgYnJlYWs7Cj4gKwo+ICvCoMKg wqDCoGNhc2UgQ09OVFJPTF9SRUdJU1RFUjoKPiArwqDCoMKgwqBjYXNlIEVYVF9DT05UUk9MX1JF R0lTVEVSOgo+ICvCoMKgwqDCoMKgwqDCoMKgdXBkYXRlX2NvbnRyb2xfcmVnaXN0ZXIocywgZGF0 YSk7Cj4gK8KgwqDCoMKgwqDCoMKgwqBicmVhazsKPiArCj4gK8KgwqDCoMKgZGVmYXVsdDoKPiAr wqDCoMKgwqDCoMKgwqDCoHMtPm52cmFtW3MtPm52cmFtX29mZnNldF0gPSBkYXRhOwo+ICvCoMKg wqDCoH0KPiArCj4gK8KgwqDCoMKgaW5jX3JlZ3B0cihzKTsKPiArwqDCoMKgwqByZXR1cm4gMDsK PiArfQo+ICsKPiArLyoqCj4gKyAqIEdldCB0aGUgZGV2aWNlIHRlbXBlcmF0dXJlIGluIENlbHNp dXMgYXMgYSBwcm9wZXJ0eQo+ICsgKiBAcGFyYW0gb2JqIHRoZSBkZXZpY2UKPiArICogQHBhcmFt IHYKPiArICogQHBhcmFtIG5hbWUgdGhlIHByb3BlcnR5IG5hbWUKPiArICogQHBhcmFtIG9wYXF1 ZQo+ICsgKiBAcGFyYW0gZXJycCBhbiBlcnJvciBvYmplY3QgdG8gcG9wdWxhdGUgb24gZmFpbHVy ZQo+ICsgKi8KPiArc3RhdGljIHZvaWQgcng4OTAwX2dldF90ZW1wZXJhdHVyZShPYmplY3QgKm9i aiwgVmlzaXRvciAqdiwgY29uc3QgY2hhciAqbmFtZSwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHZvaWQgKm9w YXF1ZSwgRXJyb3IgKiplcnJwKQo+ICt7Cj4gK8KgwqDCoMKgUlg4OTAwU3RhdGUgKnMgPSBSWDg5 MDAob2JqKTsKPiArwqDCoMKgwqBkb3VibGUgdmFsdWUgPSAocy0+bnZyYW1bVEVNUEVSQVRVUkVd ICogMi4wIC0gMTg3LjEpIC8gMy4yMTg7CgpZb3UgaGF2ZSBlbmNvZGVfdGVtcGVyYXR1cmUoKSBi ZWxvdywgc2hvdWxkIHdlIG5vdCBoYXZlCmRlY29kZV90ZW1wZXJhdHVyZSgpPwoKPiArCj4gK8Kg wqDCoMKgdHJhY2Vfcng4OTAwX2dldF90ZW1wZXJhdHVyZShzLT5udnJhbVtURU1QRVJBVFVSRV0s IHZhbHVlKTsKPiArCj4gK8KgwqDCoMKgdmlzaXRfdHlwZV9udW1iZXIodiwgbmFtZSwgJnZhbHVl LCBlcnJwKTsKPiArfQo+ICsKPiArLyoqCj4gKyAqIEVuY29kZSBhIHRlbXBlcmF0dXJlIGluIENl bHNpdXMKPiArICogQHBhcmFtIGNlbHNpdXMgdGhlIHRlbXBlcmF0dXJlCj4gKyAqIEByZXR1cm4g dGhlIGVuY29kZWQgdGVtcGVyYXR1cmUKPiArICovCj4gK3N0YXRpYyBpbmxpbmUgdWludDhfdCBl bmNvZGVfdGVtcGVyYXR1cmUoZG91YmxlIGNlbHNpdXMpCj4gK3sKPiArwqDCoMKgwqByZXR1cm4g KHVpbnQ4X3QpICgoY2Vsc2l1cyAqIDMuMjE4ICsgMTg3LjE5KSAvIDIpOwo+ICt9Cj4gKwo+ICsv KioKPiArICogU2V0IHRoZSBkZXZpY2UgdGVtcGVyYXR1cmUgaW4gQ2Vsc2l1cyBhcyBhIHByb3Bl cnR5Cj4gKyAqIEBwYXJhbSBvYmogdGhlIGRldmljZQo+ICsgKiBAcGFyYW0gdgo+ICsgKiBAcGFy YW0gbmFtZSB0aGUgcHJvcGVydHkgbmFtZQo+ICsgKiBAcGFyYW0gb3BhcXVlCj4gKyAqIEBwYXJh bSBlcnJwIGFuIGVycm9yIG9iamVjdCB0byBwb3B1bGF0ZSBvbiBmYWlsdXJlCj4gKyAqLwo+ICtz dGF0aWMgdm9pZCByeDg5MDBfc2V0X3RlbXBlcmF0dXJlKE9iamVjdCAqb2JqLCBWaXNpdG9yICp2 LCBjb25zdCBjaGFyICpuYW1lLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdm9pZCAqb3BhcXVlLCBFcnJvciAq KmVycnApCj4gK3sKPiArwqDCoMKgwqBSWDg5MDBTdGF0ZSAqcyA9IFJYODkwMChvYmopOwo+ICvC oMKgwqDCoEVycm9yICpsb2NhbF9lcnIgPSBOVUxMOwo+ICvCoMKgwqDCoGRvdWJsZSB0ZW1wOyAv KiBkZWdyZWVzIENlbHNpdXMgKi8KPiArwqDCoMKgwqB2aXNpdF90eXBlX251bWJlcih2LCBuYW1l LCAmdGVtcCwgJmxvY2FsX2Vycik7Cj4gK8KgwqDCoMKgaWYgKGxvY2FsX2Vycikgewo+ICvCoMKg wqDCoMKgwqDCoMKgZXJyb3JfcHJvcGFnYXRlKGVycnAsIGxvY2FsX2Vycik7Cj4gK8KgwqDCoMKg wqDCoMKgwqByZXR1cm47Cj4gK8KgwqDCoMKgfQo+ICvCoMKgwqDCoGlmICh0ZW1wID49IDEwMCB8 fCB0ZW1wIDwgLTU4KSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqBlcnJvcl9zZXRnKGVycnAsICJ2YWx1 ZSAlZkMgaXMgb3V0IG9mIHJhbmdlIiwgdGVtcCk7Cj4gK8KgwqDCoMKgwqDCoMKgwqByZXR1cm47 Cj4gK8KgwqDCoMKgfQo+ICsKPiArwqDCoMKgwqBzLT5udnJhbVtURU1QRVJBVFVSRV0gPSBlbmNv ZGVfdGVtcGVyYXR1cmUodGVtcCk7Cj4gKwo+ICvCoMKgwqDCoHRyYWNlX3J4ODkwMF9zZXRfdGVt cGVyYXR1cmUocy0+bnZyYW1bVEVNUEVSQVRVUkVdLCB0ZW1wKTsKPiArfQo+ICsKPiArLyoqCj4g KyAqIEdldCB0aGUgZGV2aWNlIHN1cHBseSB2b2x0YWdlIGFzIGEgcHJvcGVydHkKPiArICogQHBh cmFtIG9iaiB0aGUgZGV2aWNlCj4gKyAqIEBwYXJhbSB2Cj4gKyAqIEBwYXJhbSBuYW1lIHRoZSBw cm9wZXJ0eSBuYW1lCj4gKyAqIEBwYXJhbSBvcGFxdWUKPiArICogQHBhcmFtIGVycnAgYW4gZXJy b3Igb2JqZWN0IHRvIHBvcHVsYXRlIG9uIGZhaWx1cmUKPiArICovCj4gK3N0YXRpYyB2b2lkIHJ4 ODkwMF9nZXRfdm9sdGFnZShPYmplY3QgKm9iaiwgVmlzaXRvciAqdiwgY29uc3QgY2hhciAqbmFt ZSwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHZvaWQgKm9wYXF1ZSwgRXJyb3IgKiplcnJwKQo+ICt7Cj4gK8Kg wqDCoMKgUlg4OTAwU3RhdGUgKnMgPSBSWDg5MDAob2JqKTsKPiArCj4gK8KgwqDCoMKgdmlzaXRf dHlwZV9udW1iZXIodiwgbmFtZSwgJnMtPnN1cHBseV92b2x0YWdlLCBlcnJwKTsKPiArfQo+ICsK PiArLyoqCj4gKyAqIFNldCB0aGUgZGV2aWNlIHN1cHBseSB2b2x0YWdlIGFzIGEgcHJvcGVydHkK PiArICogQHBhcmFtIG9iaiB0aGUgZGV2aWNlCj4gKyAqIEBwYXJhbSB2Cj4gKyAqIEBwYXJhbSBu YW1lIHRoZSBwcm9wZXJ0eSBuYW1lCj4gKyAqIEBwYXJhbSBvcGFxdWUKPiArICogQHBhcmFtIGVy cnAgYW4gZXJyb3Igb2JqZWN0IHRvIHBvcHVsYXRlIG9uIGZhaWx1cmUKPiArICovCj4gK3N0YXRp YyB2b2lkIHJ4ODkwMF9zZXRfdm9sdGFnZShPYmplY3QgKm9iaiwgVmlzaXRvciAqdiwgY29uc3Qg Y2hhciAqbmFtZSwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHZvaWQgKm9wYXF1ZSwgRXJyb3IgKiplcnJwKQo+ ICt7Cj4gK8KgwqDCoMKgUlg4OTAwU3RhdGUgKnMgPSBSWDg5MDAob2JqKTsKPiArwqDCoMKgwqBF cnJvciAqbG9jYWxfZXJyID0gTlVMTDsKPiArwqDCoMKgwqBkb3VibGUgdGVtcDsKCk1heWJlIHZv bHRhZ2U/IEl0J3MgYW1iaWd1b3VzIGFzIHRvIHdoZXRoZXIgaXQncyBhIGNvcHkvcGFzdGUgZXJy b3IKZnJvbSAndGVtcGVyYXR1cmUnIG9yIGlmIHlvdSBtZWFuICd0ZW1wb3JhcnknLi4uCgo+ICvC oMKgwqDCoHZpc2l0X3R5cGVfbnVtYmVyKHYsIG5hbWUsICZ0ZW1wLCAmbG9jYWxfZXJyKTsKPiAr wqDCoMKgwqBpZiAobG9jYWxfZXJyKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqBlcnJvcl9wcm9wYWdh dGUoZXJycCwgbG9jYWxfZXJyKTsKPiArwqDCoMKgwqDCoMKgwqDCoHJldHVybjsKPiArwqDCoMKg wqB9Cj4gKwo+ICvCoMKgwqDCoHMtPnN1cHBseV92b2x0YWdlID0gdGVtcDsKCi4uLiBhcyB0aGlz IGFsbW9zdCBsb29rcyBsaWtlIGEgYnVnLgoKPiArwqDCoMKgwqB0cmFjZV9yeDg5MDBfc2V0X3Zv bHRhZ2Uocy0+c3VwcGx5X3ZvbHRhZ2UpOwo+ICsKPiArwqDCoMKgwqBjaGVja192b2x0YWdlKHMp Owo+ICt9Cj4gKwo+ICsKPiArLyoqCj4gKyAqIENvbmZpZ3VyZSBkZXZpY2UgcHJvcGVydGllcwo+ ICsgKiBAcGFyYW0gb2JqIHRoZSBkZXZpY2UKPiArICovCj4gK3N0YXRpYyB2b2lkIHJ4ODkwMF9p bml0Zm4oT2JqZWN0ICpvYmopCj4gK3sKPiArwqDCoMKgwqBvYmplY3RfcHJvcGVydHlfYWRkKG9i aiwgInRlbXBlcmF0dXJlIiwgIm51bWJlciIsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJ4ODkwMF9nZXRfdGVtcGVyYXR1cmUsCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJ4ODkwMF9zZXRfdGVtcGVy YXR1cmUsIE5VTEwsIE5VTEwsIE5VTEwpOwo+ICsKPiArwqDCoMKgwqBvYmplY3RfcHJvcGVydHlf YWRkKG9iaiwgInZvbHRhZ2UiLCAibnVtYmVyIiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcng4OTAwX2dldF92b2x0YWdlLAo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByeDg5MDBfc2V0X3ZvbHRhZ2Us IE5VTEwsIE5VTEwsIE5VTEwpOwo+ICt9Cj4gKwo+ICsvKioKPiArICogUmVzZXQgdGhlIGRldmlj ZQo+ICsgKiBAcGFyYW0gZGV2IHRoZSBSWDg5MDAgZGV2aWNlIHRvIHJlc2V0Cj4gKyAqLwo+ICtz dGF0aWMgdm9pZCByeDg5MDBfcmVzZXQoRGV2aWNlU3RhdGUgKmRldikKCklzIHRoZXJlIGEgcmVh c29uIHdlIGNhbid0IGRlZmluZSByeDg5MDBfcmVzZXQoKSBmdXJ0aGVyIHVwIHRoZSBmaWxlIHRv CmF2b2lkIGZvcndhcmQtZGVjbGFyaW5nIGl0PwoKPiArewo+ICvCoMKgwqDCoFJYODkwMFN0YXRl ICpzID0gUlg4OTAwKGRldik7Cj4gKwo+ICvCoMKgwqDCoHRyYWNlX3J4ODkwMF9yZXNldCgpOwo+ ICsKPiArwqDCoMKgwqAvKiBUaGUgY2xvY2sgaXMgcnVubmluZyBhbmQgc3luY2hyb25pemVkIHdp dGggdGhlIGhvc3QgKi8KPiArwqDCoMKgwqBzLT5vZmZzZXQgPSAwOwo+ICvCoMKgwqDCoHMtPndl ZWtkYXkgPSA3OyAvKiBTZXQgdG8gYW4gaW52YWxpZCB2YWx1ZSAqLwoKQ2FuIHlvdSBleHBsYWlu IHdoeSB3ZSBkbyB0aGF0IHJhdGhlciB0aGFuIGp1c3Qgc3RhdGluZyB0aGF0IDcgaXMKaW52YWxp ZD8KCj4gKwo+ICvCoMKgwqDCoHMtPm52cmFtW0VYVEVOU0lPTl9SRUdJU1RFUl0gPSBFWFRfTUFT S19UU0VMMTsKPiArwqDCoMKgwqBzLT5udnJhbVtDT05UUk9MX1JFR0lTVEVSXSA9IENUUkxfTUFT S19DU0VMMDsKPiArwqDCoMKgwqBzLT5udnJhbVtGTEFHX1JFR0lTVEVSXSAmPSBGTEFHX01BU0tf VkRFVCB8IEZMQUdfTUFTS19WTEY7Cj4gKwo+ICvCoMKgwqDCoHMtPm52cmFtX29mZnNldCA9IDA7 Cj4gKwo+ICvCoMKgwqDCoHRyYWNlX3J4ODkwMF9yZWdwdHJfdXBkYXRlKHMtPm52cmFtX29mZnNl dCk7Cj4gKwo+ICvCoMKgwqDCoHMtPmFkZHJfYnl0ZSA9IGZhbHNlOwo+ICt9Cj4gKwo+ICsvKioK PiArICogUmVhbGl6ZSBhbiBSWDg5MDAgZGV2aWNlIGluc3RhbmNlCj4gKyAqIFNldCB1cCB0aW1l cnMKPiArICogQ29uZmlndXJlIEdQSU8gbGluZXMKPiArICogQHBhcmFtIGRldiB0aGUgZGV2aWNl IGluc3RhbmNlIHRvIHJlYWxpemUKPiArICogQHBhcmFtIGVycnAgYW4gZXJyb3Igb2JqZWN0IHRv IHBvcHVsYXRlIG9uIGVycm9yCj4gKyAqLwo+ICtzdGF0aWMgdm9pZCByeDg5MDBfcmVhbGl6ZShE ZXZpY2VTdGF0ZSAqZGV2LCBFcnJvciAqKmVycnApCj4gK3sKPiArwqDCoMKgwqBSWDg5MDBTdGF0 ZSAqcyA9IFJYODkwMChkZXYpOwo+ICvCoMKgwqDCoEkyQ1NsYXZlICppMmMgPSBJMkNfU0xBVkUo ZGV2KTsKPiArwqDCoMKgwqBRRU1VQkggKmJoOwo+ICvCoMKgwqDCoGNoYXIgbmFtZVs2NF07Cj4g Kwo+ICvCoMKgwqDCoHMtPmZvdXRfc3RhdGUgPSBmYWxzZTsKPiArCj4gK8KgwqDCoMKgbWVtc2V0 KHMtPm52cmFtLCAwLCBSWDg5MDBfTlZSQU1fU0laRSk7Cj4gK8KgwqDCoMKgLyogU2V0IHRoZSBp bml0aWFsIHN0YXRlIHRvIDI1IGRlZ3JlZXMgQ2Vsc2l1cyAqLwo+ICvCoMKgwqDCoHMtPm52cmFt W1RFTVBFUkFUVVJFXSA9IGVuY29kZV90ZW1wZXJhdHVyZSgyNS4wKTsKPiArCj4gK8KgwqDCoMKg LyogU2V0IHVwIHRpbWVycyAqLwo+ICvCoMKgwqDCoGJoID0gcWVtdV9iaF9uZXcocng4OTAwX3Rp bWVyX3RpY2ssIHMpOwo+ICvCoMKgwqDCoHMtPnNlY190aW1lciA9IHB0aW1lcl9pbml0KGJoLCBQ VElNRVJfUE9MSUNZX0RFRkFVTFQpOwo+ICvCoMKgwqDCoC8qIHdlIHRyaWdnZXIgdGhlIHRpbWVy IGF0IDEwSHogYW5kIGNoZWNrIGZvciByb2xsb3ZlciwgYXMgdGhlIHFlbXUKPiArwqDCoMKgwqDC oCogY2xvY2sgZG9lcyBub3QgYWR2YW5jZSBpbiByZWFsdGltZSBpbiB0aGUgdGVzdCBlbnZpcm9u bWVudCwKPiArwqDCoMKgwqDCoCogbGVhZGluZyB0byB1bnN0YWJsZSB0ZXN0IHJlc3VsdHMKPiAr wqDCoMKgwqDCoCovCgpJdCBzZWVtcyB1bmZvcnR1bmF0ZSB0aGF0IHNvbWUgb2YgdGhlIGNvZGUg c2VlbXMgZGVkaWNhdGVkIHRvIHdvcmtpbmcKYXJvdW5kIHRlc3Qgc3VpdGUgaXNzdWVzIChlLmcu IGVhcmx5IHJldHVybiBpbiBzb21lIGZ1bmN0aW9ucykuIEFoCndlbGwuCgo+ICvCoMKgwqDCoHB0 aW1lcl9zZXRfZnJlcShzLT5zZWNfdGltZXIsIDEwKTsKPiArwqDCoMKgwqBwdGltZXJfc2V0X2xp bWl0KHMtPnNlY190aW1lciwgMSwgMSk7Cj4gKwo+ICvCoMKgwqDCoGJoID0gcWVtdV9iaF9uZXco cng4OTAwX2ZvdXRfdGljaywgcyk7Cj4gK8KgwqDCoMKgcy0+Zm91dF90aW1lciA9IHB0aW1lcl9p bml0KGJoLCBQVElNRVJfUE9MSUNZX0RFRkFVTFQpOwo+ICvCoMKgwqDCoC8qIGZyZXF1ZW5jeSBk b3VibGVkIHRvIGdlbmVyYXRlIDUwJSBkdXR5IGN5Y2xlIHNxdWFyZSB3YXZlICovCj4gK8KgwqDC oMKgcHRpbWVyX3NldF9mcmVxKHMtPmZvdXRfdGltZXIsIDMyNzY4ICogMik7Cj4gK8KgwqDCoMKg cHRpbWVyX3NldF9saW1pdChzLT5mb3V0X3RpbWVyLCAxLCAxKTsKPiArCj4gK8KgwqDCoMKgYmgg PSBxZW11X2JoX25ldyhyeDg5MDBfY291bnRkb3duX3RpY2ssIHMpOwo+ICvCoMKgwqDCoHMtPmNv dW50ZG93bl90aW1lciA9IHB0aW1lcl9pbml0KGJoLCBQVElNRVJfUE9MSUNZX0RFRkFVTFQpOwo+ ICvCoMKgwqDCoHB0aW1lcl9zZXRfZnJlcShzLT5jb3VudGRvd25fdGltZXIsIENPVU5URE9XTl9U SU1FUl9GUkVRKTsKPiArwqDCoMKgwqBwdGltZXJfc2V0X2xpbWl0KHMtPmNvdW50ZG93bl90aW1l ciwgQ09VTlRET1dOX1RJTUVSX0ZSRVEsIDEpOwo+ICsKPiArCj4gK8KgwqDCoMKgLyogc2V0IHVw IEdQSU8gKi8KPiArwqDCoMKgwqBzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJyeDg5MDAt aW50ZXJydXB0LW91dCIpOwoKV2h5IHRoZSBzbnByaW50Zigpcz8KCj4gK8KgwqDCoMKgcWRldl9p bml0X2dwaW9fb3V0X25hbWVkKCZpMmMtPnFkZXYsICZzLT5pbnRlcnJ1cHRfcGluLCBuYW1lLCAx KTsKPiArwqDCoMKgwqB0cmFjZV9yeDg5MDBfcGluX25hbWUoIkludGVycnVwdCIsIG5hbWUpOwo+ ICsKPiArwqDCoMKgwqBzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJyeDg5MDAtZm91dC1l bmFibGUiKTsKPiArwqDCoMKgwqBxZGV2X2luaXRfZ3Bpb19pbl9uYW1lZCgmaTJjLT5xZGV2LCBy eDg5MDBfZm91dF9lbmFibGVfaGFuZGxlciwgbmFtZSwgMSk7Cj4gK8KgwqDCoMKgdHJhY2Vfcng4 OTAwX3Bpbl9uYW1lKCJGb3V0LWVuYWJsZSIsIG5hbWUpOwo+ICsKPiArwqDCoMKgwqBzbnByaW50 ZihuYW1lLCBzaXplb2YobmFtZSksICJyeDg5MDAtZm91dCIpOwo+ICvCoMKgwqDCoHFkZXZfaW5p dF9ncGlvX291dF9uYW1lZCgmaTJjLT5xZGV2LCAmcy0+Zm91dF9waW4sIG5hbWUsIDEpOwo+ICvC oMKgwqDCoHRyYWNlX3J4ODkwMF9waW5fbmFtZSgiRm91dCIsIG5hbWUpOwo+ICsKPiArwqDCoMKg wqAvKiBTZXQgdXAgZGVmYXVsdCB2b2x0YWdlICovCj4gK8KgwqDCoMKgcy0+c3VwcGx5X3ZvbHRh Z2UgPSAzLjNmOwo+ICvCoMKgwqDCoHRyYWNlX3J4ODkwMF9zZXRfdm9sdGFnZShzLT5zdXBwbHlf dm9sdGFnZSk7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBTZXQgdXAgdGhlIGRldmljZSBjYWxsYmFj a3MKPiArICogQHBhcmFtIGtsYXNzIHRoZSBkZXZpY2UgY2xhc3MKPiArICogQHBhcmFtIGRhdGEK PiArICovCj4gK3N0YXRpYyB2b2lkIHJ4ODkwMF9jbGFzc19pbml0KE9iamVjdENsYXNzICprbGFz cywgdm9pZCAqZGF0YSkKPiArewo+ICvCoMKgwqDCoERldmljZUNsYXNzICpkYyA9IERFVklDRV9D TEFTUyhrbGFzcyk7Cj4gK8KgwqDCoMKgSTJDU2xhdmVDbGFzcyAqayA9IEkyQ19TTEFWRV9DTEFT UyhrbGFzcyk7Cj4gKwo+ICvCoMKgwqDCoGstPmV2ZW50ID0gcng4OTAwX2V2ZW50Owo+ICvCoMKg wqDCoGstPnJlY3YgPSByeDg5MDBfcmVjdjsKPiArwqDCoMKgwqBrLT5zZW5kID0gcng4OTAwX3Nl bmQ7Cj4gK8KgwqDCoMKgZGMtPnJlYWxpemUgPSByeDg5MDBfcmVhbGl6ZTsKPiArwqDCoMKgwqBk Yy0+cmVzZXQgPSByeDg5MDBfcmVzZXQ7Cj4gK8KgwqDCoMKgZGMtPnZtc2QgPSAmdm1zdGF0ZV9y eDg5MDA7Cj4gK30KPiArCj4gK3N0YXRpYyBjb25zdCBUeXBlSW5mbyByeDg5MDBfaW5mbyA9IHsK PiArwqDCoMKgwqAubmFtZSA9IFRZUEVfUlg4OTAwLAo+ICvCoMKgwqDCoC5wYXJlbnQgPSBUWVBF X0kyQ19TTEFWRSwKPiArwqDCoMKgwqAuaW5zdGFuY2Vfc2l6ZSA9IHNpemVvZihSWDg5MDBTdGF0 ZSksCj4gK8KgwqDCoMKgLmluc3RhbmNlX2luaXQgPSByeDg5MDBfaW5pdGZuLAo+ICvCoMKgwqDC oC5jbGFzc19pbml0ID0gcng4OTAwX2NsYXNzX2luaXQsCj4gK307Cj4gKwo+ICsvKioKPiArICog UmVnaXN0ZXIgdGhlIGRldmljZSB3aXRoIFFFTVUKPiArICovCj4gK3N0YXRpYyB2b2lkIHJ4ODkw MF9yZWdpc3Rlcl90eXBlcyh2b2lkKQo+ICt7Cj4gK8KgwqDCoMKgdHlwZV9yZWdpc3Rlcl9zdGF0 aWMoJnJ4ODkwMF9pbmZvKTsKPiArfQo+ICsKPiArdHlwZV9pbml0KHJ4ODkwMF9yZWdpc3Rlcl90 eXBlcykKPiBkaWZmIC0tZ2l0IGEvaHcvdGltZXIvcng4OTAwX3JlZ3MuaCBiL2h3L3RpbWVyL3J4 ODkwMF9yZWdzLmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjBhYWE5 YTMKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvaHcvdGltZXIvcng4OTAwX3JlZ3MuaAo+IEBAIC0w LDAgKzEsMTQxIEBACj4gKy8qCj4gKyAqIEVwc29uIFJYODkwMFNBL0NFIFJlYWx0aW1lIENsb2Nr IE1vZHVsZQo+ICsgKgo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTYgSUJNIENvcnBvcmF0aW9uCj4g KyAqIEF1dGhvcnM6Cj4gPiArICrCoMKgQWxhc3RhaXIgRCdTaWx2YSA8YWxhc3RhaXJAZC1zaWx2 YS5vcmc+Cj4gKyAqCj4gKyAqIFRoaXMgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR1BMIHZl cnNpb24gMiBvciBsYXRlci7CoMKgU2VlCj4gKyAqIHRoZSBDT1BZSU5HIGZpbGUgaW4gdGhlIHRv cC1sZXZlbCBkaXJlY3RvcnkuCj4gKyAqCj4gKyAqIERhdGFzaGVldCBhdmFpbGFibGUgYXQ6Cj4g KyAqwqDCoGh0dHBzOi8vc3VwcG9ydC5lcHNvbi5iaXovdGQvYXBpL2RvY19jaGVjay5waHA/ZGw9 YXBwX1JYODkwMENFJmxhbmc9ZW4KPiArICoKPiArICovCj4gKwo+ICsjaWZuZGVmIFJYODkwMF9S RUdTX0gKPiArI2RlZmluZSBSWDg5MDBfUkVHU19ICj4gKwo+ICsjaW5jbHVkZSAicWVtdS9iaXRv cHMuaCIKPiArCj4gKyNkZWZpbmUgUlg4OTAwX05WUkFNX1NJWkUgMHgyMAoKRG8gYWxsIHRoZSBl bnVtcyBiZWxvdyBuZWVkIHRvIGJlIGRlZmluZWQgaW4gdGhlIGhlYWRlciBvciBhcmUgdGhleQpv bmx5IHJlbGV2YW50IHRvIHRoZSBpbXBsZW1lbnRhdGlvbj8gSWYgaXQncyB0aGUgbGF0dGVyLCB0 aGVuIHRoZXkKc2hvdWxkIGdvIGluIHRoZSAuYyBmaWxlLgoKQWxzbyBJIHdvdWxkJ3ZlIHJlYWNo ZWQgZm9yICNkZWZpbmUgZm9yIGFsbCB0aGVzZSB2YWx1ZXMsIG5vdCBlbnVtcywKYnV0IHRoYXQg bWlnaHQgYmUgYSBwZXJzb25hbCB0aGluZy4KCj4gKwo+ICt0eXBlZGVmIGVudW0gUlg4OTAwQWRk cmVzc2VzIHsKPiArwqDCoMKgwqBTVEFSVF9BRERSRVNTID0gMHgwMCwKPiArwqDCoMKgwqBTRUNP TkRTID0gMHgwMCwKPiArwqDCoMKgwqBNSU5VVEVTID0gMHgwMSwKPiArwqDCoMKgwqBIT1VSUyA9 IDB4MDIsCj4gK8KgwqDCoMKgV0VFS0RBWSA9IDB4MDMsIC8qIGEgd2Fsa2luZyBiaXQgd2l0aCBi aXQgMCBzZXQgZm9yIFN1bmRheSwgMSBmb3IgTW9uZGF5Li4uCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqA2IGZvciBTYXR1cmRheSwgc2VlIHRoZSBkYXRh c2hlZXQgZm9yIGRldGFpbHMgKi8KPiArwqDCoMKgwqBEQVkgPSAweDA0LAo+ICvCoMKgwqDCoE1P TlRIID0gMHgwNSwKPiArwqDCoMKgwqBZRUFSID0gMHgwNiwKPiArwqDCoMKgwqBSQU0gPSAweDA3 LAo+ICvCoMKgwqDCoEFMQVJNX01JTlVURSA9IDB4MDgsCj4gK8KgwqDCoMKgQUxBUk1fSE9VUiA9 IDB4MDksCj4gK8KgwqDCoMKgQUxBUk1fV0VFS19EQVkgPSAweDBBLAo+ICvCoMKgwqDCoFRJTUVS X0NPVU5URVJfMCA9IDB4MEIsCj4gK8KgwqDCoMKgVElNRVJfQ09VTlRFUl8xID0gMHgwQywKPiAr wqDCoMKgwqBFWFRFTlNJT05fUkVHSVNURVIgPSAweDBELAo+ICvCoMKgwqDCoEZMQUdfUkVHSVNU RVIgPSAwWDBFLAo+ICvCoMKgwqDCoENPTlRST0xfUkVHSVNURVIgPSAwWDBGLAo+ICvCoMKgwqDC oEVYVF9TRUNPTkRTID0gMHgwMTAsIC8qIEFsaWFzIG9mIFNFQ09ORFMgKi8KPiArwqDCoMKgwqBF WFRfTUlOVVRFUyA9IDB4MTEsIC8qIEFsaWFzIG9mIE1JTlVURVMgKi8KPiArwqDCoMKgwqBFWFRf SE9VUlMgPSAweDEyLCAvKiBBbGlhcyBvZiBIT1VSUyAqLwo+ICvCoMKgwqDCoEVYVF9XRUVLREFZ ID0gMHgxMywgLyogQWxpYXMgb2YgV0VFS0RBWSAqLwo+ICvCoMKgwqDCoEVYVF9EQVkgPSAweDE0 LCAvKiBBbGlhcyBvZiBEQVkgKi8KPiArwqDCoMKgwqBFWFRfTU9OVEggPSAweDE1LCAvKiBBbGlh cyBvZiBNT05USCAqLwo+ICvCoMKgwqDCoEVYVF9ZRUFSID0gMHgxNiwgLyogQWxpYXMgb2YgWUVB UiAqLwo+ICvCoMKgwqDCoFRFTVBFUkFUVVJFID0gMHgxNywKPiArwqDCoMKgwqBCQUNLVVBfRlVO Q1RJT04gPSAweDE4LAo+ICvCoMKgwqDCoE5PX1VTRV8xID0gMHgxOSwKPiArwqDCoMKgwqBOT19V U0VfMiA9IDB4MUEsCj4gK8KgwqDCoMKgRVhUX1RJTUVSX0NPVU5URVJfMCA9IDB4MUIsIC8qIEFs aWFzIG9mIFRJTUVSX0NPVU5URVJfMCAqLwo+ICvCoMKgwqDCoEVYVF9USU1FUl9DT1VOVEVSXzEg PSAweDFDLCAvKiBBbGlhcyBvZiBUSU1FUl9DT1VOVEVSXzEgKi8KPiArwqDCoMKgwqBFWFRfRVhU RU5TSU9OX1JFR0lTVEVSID0gMHgxRCwgLyogQWxpYXMgb2YgRVhURU5TSU9OX1JFR0lTVEVSICov Cj4gK8KgwqDCoMKgRVhUX0ZMQUdfUkVHSVNURVIgPSAwWDFFLCAvKiBBbGlhcyBvZiBGTEFHX1JF R0lTVEVSICovCj4gK8KgwqDCoMKgRVhUX0NPTlRST0xfUkVHSVNURVIgPSAwWDFGIC8qIEFsaWFz IG9mIENPTlRST0xfUkVHSVNURVIgKi8KPiArfSBSWDg5MDBBZGRyZXNzZXM7Cj4gKwo+ICt0eXBl ZGVmIGVudW0gRXh0UmVnQml0cyB7Cj4gK8KgwqDCoMKgRVhUX1JFR19UU0VMMCA9IDAsCj4gK8Kg wqDCoMKgRVhUX1JFR19UU0VMMSA9IDEsCj4gK8KgwqDCoMKgRVhUX1JFR19GU0VMMCA9IDIsCj4g K8KgwqDCoMKgRVhUX1JFR19GU0VMMSA9IDMsCj4gK8KgwqDCoMKgRVhUX1JFR19URSA9IDQsCj4g K8KgwqDCoMKgRVhUX1JFR19VU0VMID0gNSwKPiArwqDCoMKgwqBFWFRfUkVHX1dBREEgPSA2LAo+ ICvCoMKgwqDCoEVYVF9SRUdfVEVTVCA9IDcKPiArfSBFeHRSZWdCaXRzOwo+ICsKPiArdHlwZWRl ZiBlbnVtIEV4dFJlZ01hc2tzIHsKPiArwqDCoMKgwqBFWFRfTUFTS19UU0VMMCA9IEJJVCgwKSwK PiArwqDCoMKgwqBFWFRfTUFTS19UU0VMMSA9IEJJVCgxKSwKPiArwqDCoMKgwqBFWFRfTUFTS19G U0VMMCA9IEJJVCgyKSwKPiArwqDCoMKgwqBFWFRfTUFTS19GU0VMMSA9IEJJVCgzKSwKPiArwqDC oMKgwqBFWFRfTUFTS19URSA9IEJJVCg0KSwKPiArwqDCoMKgwqBFWFRfTUFTS19VU0VMID0gQklU KDUpLAo+ICvCoMKgwqDCoEVYVF9NQVNLX1dBREEgPSBCSVQoNiksCj4gK8KgwqDCoMKgRVhUX01B U0tfVEVTVCA9IEJJVCg3KQo+ICt9IEV4dFJlZ01hc2tzOwo+ICsKPiArdHlwZWRlZiBlbnVtIEN0 cmxSZWdCaXRzIHsKPiArwqDCoMKgwqBDVFJMX1JFR19SRVNFVCA9IDAsCj4gK8KgwqDCoMKgQ1RS TF9SRUdfV1AwID0gMSwKPiArwqDCoMKgwqBDVFJMX1JFR19XUDEgPSAyLAo+ICvCoMKgwqDCoENU UkxfUkVHX0FJRSA9IDMsCj4gK8KgwqDCoMKgQ1RSTF9SRUdfVElFID0gNCwKPiArwqDCoMKgwqBD VFJMX1JFR19VSUUgPSA1LAo+ICvCoMKgwqDCoENUUkxfUkVHX0NTRUwwID0gNiwKPiArwqDCoMKg wqBDVFJMX1JFR19DU0VMMSA9IDcKPiArfSBDdHJsUmVnQml0czsKPiArCj4gK3R5cGVkZWYgZW51 bSBDdHJsUmVnTWFzayB7Cj4gK8KgwqDCoMKgQ1RSTF9NQVNLX1JFU0VUID0gQklUKDApLAo+ICvC oMKgwqDCoENUUkxfTUFTS19XUDAgPSBCSVQoMSksCj4gK8KgwqDCoMKgQ1RSTF9NQVNLX1dQMSA9 IEJJVCgyKSwKPiArwqDCoMKgwqBDVFJMX01BU0tfQUlFID0gQklUKDMpLAo+ICvCoMKgwqDCoENU UkxfTUFTS19USUUgPSBCSVQoNCksCj4gK8KgwqDCoMKgQ1RSTF9NQVNLX1VJRSA9IEJJVCg1KSwK PiArwqDCoMKgwqBDVFJMX01BU0tfQ1NFTDAgPSBCSVQoNiksCj4gK8KgwqDCoMKgQ1RSTF9NQVNL X0NTRUwxID0gQklUKDcpCj4gK30gQ3RybFJlZ01hc2s7Cj4gKwo+ICt0eXBlZGVmIGVudW0gRmxh Z1JlZ0JpdHMgewo+ICvCoMKgwqDCoEZMQUdfUkVHX1ZERVQgPSAwLAo+ICvCoMKgwqDCoEZMQUdf UkVHX1ZMRiA9IDEsCj4gK8KgwqDCoMKgRkxBR19SRUdfVU5VU0VEXzIgPSAyLAo+ICvCoMKgwqDC oEZMQUdfUkVHX0FGID0gMywKPiArwqDCoMKgwqBGTEFHX1JFR19URiA9IDQsCj4gK8KgwqDCoMKg RkxBR19SRUdfVUYgPSA1LAo+ICvCoMKgwqDCoEZMQUdfUkVHX1VOVVNFRF82ID0gNiwKPiArwqDC oMKgwqBGTEFHX1JFR19VTlVTRURfNyA9IDcKPiArfSBGbGFnUmVnQml0czsKPiArCj4gKyNkZWZp bmUgUlg4OTAwX0lOVEVSUlVQVF9TT1VSQ0VTIDYKPiArdHlwZWRlZiBlbnVtIEZsYWdSZWdNYXNr IHsKPiArwqDCoMKgwqBGTEFHX01BU0tfVkRFVCA9IEJJVCgwKSwKPiArwqDCoMKgwqBGTEFHX01B U0tfVkxGID0gQklUKDEpLAo+ICvCoMKgwqDCoEZMQUdfTUFTS19VTlVTRURfMiA9IEJJVCgyKSwK PiArwqDCoMKgwqBGTEFHX01BU0tfQUYgPSBCSVQoMyksCj4gK8KgwqDCoMKgRkxBR19NQVNLX1RG ID0gQklUKDQpLAo+ICvCoMKgwqDCoEZMQUdfTUFTS19VRiA9IEJJVCg1KSwKPiArwqDCoMKgwqBG TEFHX01BU0tfVU5VU0VEXzYgPSBCSVQoNiksCj4gK8KgwqDCoMKgRkxBR19NQVNLX1VOVVNFRF83 ID0gQklUKDcpCj4gK30gRmxhZ1JlZ01hc2s7Cj4gKwo+ICt0eXBlZGVmIGVudW0gQmFja3VwUmVn Qml0cyB7Cj4gK8KgwqDCoMKgQkFDS1VQX1JFR19CS1NNUDAgPSAwLAo+ICvCoMKgwqDCoEJBQ0tV UF9SRUdfQktTTVAxID0gMSwKPiArwqDCoMKgwqBCQUNLVVBfUkVHX1NXT0ZGID0gMiwKPiArwqDC oMKgwqBCQUNLVVBfUkVHX1ZERVRPRkYgPSAzCj4gK30gQmFja3VwUmVnQml0czsKPiArCj4gK3R5 cGVkZWYgZW51bSBCYWNrdXBSZWdNYXNrIHsKPiArwqDCoMKgwqBCQUNLVVBfTUFTS19CS1NNUDAg PSBCSVQoMCksCj4gK8KgwqDCoMKgQkFDS1VQX01BU0tfQktTTVAxID0gQklUKDEpLAo+ICvCoMKg wqDCoEJBQ0tVUF9NQVNLX1NXT0ZGID0gQklUKDIpLAo+ICvCoMKgwqDCoEJBQ0tVUF9NQVNLX1ZE RVRPRkYgPSBCSVQoMykKPiArfSBCYWNrdXBSZWdNYXNrOwo+ICsKPiArI2VuZGlmCj4gZGlmZiAt LWdpdCBhL2h3L3RpbWVyL3RyYWNlLWV2ZW50cyBiL2h3L3RpbWVyL3RyYWNlLWV2ZW50cwo+IGlu ZGV4IDM0OTVjNDEuLjhmNDk2OWIgMTAwNjQ0Cj4gLS0tIGEvaHcvdGltZXIvdHJhY2UtZXZlbnRz Cj4gKysrIGIvaHcvdGltZXIvdHJhY2UtZXZlbnRzCj4gQEAgLTQ5LDMgKzQ5LDM0IEBAIGFzcGVl ZF90aW1lcl9jdHJsX3B1bHNlX2VuYWJsZSh1aW50OF90IGksIGJvb2wgZW5hYmxlKSAiVGltZXIg JSIgUFJJdTggIjogJWQiCj4gwqBhc3BlZWRfdGltZXJfc2V0X2N0cmwyKHVpbnQzMl90IHZhbHVl KSAiVmFsdWU6IDB4JSIgUFJJeDMyCj4gwqBhc3BlZWRfdGltZXJfc2V0X3ZhbHVlKGludCB0aW1l ciwgaW50IHJlZywgdWludDMyX3QgdmFsdWUpICJUaW1lciAlZCByZWdpc3RlciAlZDogMHglIiBQ Ukl4MzIKPiDCoGFzcGVlZF90aW1lcl9yZWFkKHVpbnQ2NF90IG9mZnNldCwgdW5zaWduZWQgc2l6 ZSwgdWludDY0X3QgdmFsdWUpICJGcm9tIDB4JSIgUFJJeDY0ICI6IG9mIHNpemUgJXU6IDB4JSIg UFJJeDY0Cj4gKwo+ICsjIGh3L3RpbWVyL3J4ODkwMC5jCj4gK3J4ODkwMF9jYXB0dXJlX2N1cnJl bnRfdGltZShpbnQgaG91ciwgaW50IG1pbnV0ZSwgaW50IHNlY29uZCwgaW50IHdlZWtkYXksIGlu dCBtZGF5LCBpbnQgbW9udGgsIGludCB5ZWFyLCBpbnQgcmF3X2hvdXJzLCBpbnQgcmF3X21pbnV0 ZXMsIGludCByYXdfc2Vjb25kcywgaW50IHJhd193ZWVrZGF5LCBpbnQgcmF3X2RheSwgaW50IHJh d19tb250aCwgaW50IHJhd195ZWFyKSAiVXBkYXRlIGN1cnJlbnQgdGltZSB0byAlMDJkOiUwMmQ6 JTAyZCAlZCAlZC8lZC8lZCAoMHglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4KSIKPiArcng4 OTAwX3JlZ3B0cl91cGRhdGUodWludDMyX3QgcHRyKSAiT3BlcmF0aW5nIG9uIHJlZ2lzdGVyIDB4 JTAyeCIKPiArcng4OTAwX3JlZ3B0cl9vdmVyZmxvdyh2b2lkKSAiUmVnaXN0ZXIgcG9pbnRlciBo YXMgb3ZlcmZsb3dlZCwgd3JhcHBpbmcgdG8gMCIKPiArcng4OTAwX2V2ZW50X3dlZWtkYXkoaW50 IHdlZWtkYXksIGludCB3ZWVrbWFzaywgaW50IHdlZWtkYXlfb2Zmc2V0KSAiU2V0IHdlZWtkYXkg dG8gJWQgKDB4JTAyeCksIHdkYXlfb2Zmc2V0PSVkIgo+ICtyeDg5MDBfcmVhZF9yZWdpc3Rlcihp bnQgYWRkcmVzcywgaW50IHZhbCkgIlJlYWQgcmVnaXN0ZXIgMHgleCA9IDB4JXgiCj4gK3J4ODkw MF9zZXRfZm91dChpbnQgaHopICJTZXR0aW5nIGZvdXQgdG8gJWRIeiIKPiArcng4OTAwX3NldF9j b3VudGRvd25fdGltZXIoaW50IGh6KSAiU2V0dGluZyBjb3VudGRvd24gdGltZXIgdG8gJWQgSHoi Cj4gK3J4ODkwMF9zZXRfY291bnRkb3duX3RpbWVyX3Blcl9taW51dGUodm9pZCkgIlNldHRpbmcg Y291bnRkb3duIHRpbWVyIHRvIHBlciBtaW51dGUgdXBkYXRlcyIKPiArcng4OTAwX2VuYWJsZV91 cGRhdGVfdGltZXIodm9pZCkgIiIKPiArcng4OTAwX2VuYWJsZV9hbGFybSh2b2lkKSAiIgo+ICty eDg5MDBfdHJpZ2dlcl9hbGFybSh2b2lkKSAiIgo+ICtyeDg5MDBfdGljayh2b2lkKSAiIgo+ICty eDg5MDBfZmlyZV9pbnRlcnJ1cHQodm9pZCkgIiIKPiArcng4OTAwX2Rpc2FibGVfdGltZXIodm9p ZCkgIiIKPiArcng4OTAwX2VuYWJsZV90aW1lcih2b2lkKSAiIgo+ICtyeDg5MDBfZGlzYWJsZV9m b3V0KHZvaWQpICIiCj4gK3J4ODkwMF9lbmFibGVfZm91dCh2b2lkKSAiIgo+ICtyeDg5MDBfZm91 dF90b2dnbGUodm9pZCkgIiIKPiArcng4OTAwX2Rpc2FibGVfY291bnRkb3duX3RpbWVyKHZvaWQp ICIiCj4gK3J4ODkwMF9lbmFibGVfY291bnRkb3duX3RpbWVyKHZvaWQpICIiCj4gK3J4ODkwMF9j b3VudGRvd25fdGljayhpbnQgY291bnQpICJDb3VudGRvd24gdGljaywgY291bnQ9JWQiCj4gK3J4 ODkwMF9jb3VudGRvd25fZWxhcHNlZCh2b2lkKSAiIgo+ICtyeDg5MDBfaTJjX2RhdGFfcmVjZWl2 ZSh1aW50OF90IGRhdGEpICJSZWNlaXZlZCBJMkMgZGF0YSAweCUwMngiCj4gK3J4ODkwMF9zZXRf cmVnaXN0ZXIodWludDMyX3QgYWRkciwgdWludDhfdCBkYXRhKSAiU2V0IGRhdGEgMHglMDJ4PTB4 JTAyeCIKPiArcng4OTAwX2dldF90ZW1wZXJhdHVyZSh1aW50OF90IHJhdywgZG91YmxlIHZhbCkg IjB4JXggPSAlZkMiCj4gK3J4ODkwMF9zZXRfdGVtcGVyYXR1cmUodWludDhfdCByYXcsIGRvdWJs ZSB2YWwpICIweCV4ID0gJWZDIgo+ICtyeDg5MDBfcmVzZXQodm9pZCkgIiIKPiArcng4OTAwX3Bp bl9uYW1lKGNvbnN0IGNoYXIgKnR5cGUsIGNvbnN0IGNoYXIgKm5hbWUpICInJXMnIHBpbiBpcyAn JXMnIgo+ICtyeDg5MDBfc2V0X3ZvbHRhZ2UoZG91YmxlIHZvbHRhZ2UpICJEZXZpY2Ugdm9sdGFn ZSBzZXQgdG8gJWYiCgpJcyB0aGVyZSBhIGp1c3RpZmljYXRpb24gZm9yIGFsbCB0aGUgZW1wdHkg dHJhY2VzP1== --=-TPUeesuTiSqgEe06YyZt Content-Type: application/pgp-signature; name="signature.asc" Content-Description: This is a digitally signed message part Content-Transfer-Encoding: 7bit -----BEGIN PGP SIGNATURE----- iQIcBAABCgAGBQJYbIEzAAoJEJ0dnzgO5LT5LywP/0OpfptgdovQmNYPKUgNmXQP H1DZ15xd4BsTf1ROjKqb6YKY8lxnInhp1PpgDSYfipJgO5JblD8bqjNrcsb+4XUm z4ZDzUFtm0xRDkrlAc+DkCrONtJ7HmiozXpLGh7N5L+8QjW+6cj/2COwZpatTpkw 8BsXZCzwf6cH/iiNs6cu+Mj98qHRR91ybftTyoHv/f1P2VU8n9sL39QkCndGuoiR 0HTr/BjEWSaWvNVL9pquFcD5z0h2InkHcigQ1P91AX+MQlVa/4g3DoGNAhgE9NuA MijsooKpTOPR1WAf+C/UQUul1R3U/gukIJirq2DDwdKtlaMvXN/U447F9sujPQle d+s9h0QyiCG33HPxS67DAwMXAvQPaHokpPZCKC9UJLy24ZEMIqsG/Q2udEXpPQAe 843PiQjG2yuIXxKudnTdic7593P7Z55HuaG9TzfFRD9GUHwen1f6sz900vlHokiH u+3zRPZ+FP+7YXEqXPIv/XjyxID5BGr48zE53r5/oMmTgTNH3q+aLhYt5zeJIQm/ fKO7T+K1k/FSeP+iXe5Wek2GAACQqxuqUu4v7xX+ETGj8al1M4Ws+QilEf8xjYqm HmkxwykwkeiBoi7x1iI4g7mi26w4mjX5ci/kpY2BIuWfgJQzvt9FTYmMdzjSMBcD OxgzvawbI1R37oAanMa9 =yvHi -----END PGP SIGNATURE----- --=-TPUeesuTiSqgEe06YyZt--