From mboxrd@z Thu Jan 1 00:00:00 1970 From: Shannon Zhao Subject: Re: [PATCH v2] ArmVirtPkg/ArmVirtXen: Add ACPI support for Virt Xen ARM Date: Thu, 23 Jun 2016 22:27:50 +0800 Message-ID: <576BF1E6.6060103@linaro.org> References: <1466681480-14500-1-git-send-email-zhaoshenglong@huawei.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Ard Biesheuvel , Shannon Zhao Cc: edk2-devel-01 , Laszlo Ersek , "Huangpeng (Peter)" , "xen-devel@lists.xen.org" List-Id: xen-devel@lists.xenproject.org T24gMjAxNuW5tDA25pyIMjPml6UgMjE6NDIsIEFyZCBCaWVzaGV1dmVsIHdyb3RlOgo+IE9uIDIz IEp1bmUgMjAxNiBhdCAxMzozMSwgU2hhbm5vbiBaaGFvIDx6aGFvc2hlbmdsb25nQGh1YXdlaS5j b20+IHdyb3RlOgo+PiBGcm9tOiBTaGFubm9uIFpoYW8gPHNoYW5ub24uemhhb0BsaW5hcm8ub3Jn Pgo+Pgo+PiBBZGQgQUNQSSBzdXBwb3J0IGZvciBWaXJ0IFhlbiBBUk0gYW5kIG9ubHkgZm9yIGFh cmNoNjQuIEl0IGdldHMgdGhlCj4+IEFDUEkgdGFibGVzIHRocm91Z2ggWGVuIEFSTSBtdWx0aWJv b3QgcHJvdG9jb2wuCj4+Cj4+IENvbnRyaWJ1dGVkLXVuZGVyOiBUaWFub0NvcmUgQ29udHJpYnV0 aW9uIEFncmVlbWVudCAxLjAKPj4gU2lnbmVkLW9mZi1ieTogU2hhbm5vbiBaaGFvIDxzaGFubm9u LnpoYW9AbGluYXJvLm9yZz4KPj4gLS0tCj4+IENoYW5nZXMgc2luY2UgdjE6Cj4+ICogbW92ZSB0 aGUgY29kZXMgaW50byBBcm1WaXJ0UGtnCj4+ICogdXNlIEZkdENsaWVudAo+PiAqIGRvbid0IHJl bHkgb24gT3ZtZlBrZy9BY3BpUGxhdGZvcm1EeGUvRW50cnlQb2ludC5jIHdoaWxlIGltcGxlbWVu dCBvd24KPj4gICBlbnRyeSBwb2ludCBzaW5jZSBpdCdzIG1pbm9yCj4+ICogdXNlIGNvbXBhdGli bGUgc3RyaW5nIHRvIGZpbmQgdGhlIERUIG5vZGUgaW5zdGVhZCBvZiBub2RlIHBhdGgKPj4KPj4g SWYgeW91IHdhbnQgdG8gdGVzdCwgdGhlIGNvcnJlc3BvbmRpbmcgWGVuIHBhdGNoZXMgY2FuIGJl IGZldGNoZWQgZnJvbToKPj4gaHR0cHM6Ly9naXQubGluYXJvLm9yZy9wZW9wbGUvc2hhbm5vbi56 aGFvL3hlbi5naXQgIGRvbXVfYWNwaV92Mgo+PiAtLS0KPj4gIEFybVZpcnRQa2cvQXJtVmlydFhl bi5kc2MgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA4ICsKPj4gIEFybVZpcnRQa2cvQXJt VmlydFhlbi5mZGYgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA4ICsKPj4gIEFybVZpcnRQ a2cvWGVuQWNwaVBsYXRmb3JtRHhlL1hlbkFjcGlQbGF0Zm9ybUR4ZS5jIHwgMjQxICsrKysrKysr KysrKysrKysrKysrKwo+PiAgLi4uL1hlbkFjcGlQbGF0Zm9ybUR4ZS9YZW5BY3BpUGxhdGZvcm1E eGUuaW5mICAgICAgfCAgNDkgKysrKysKPj4gIDQgZmlsZXMgY2hhbmdlZCwgMzA2IGluc2VydGlv bnMoKykKPj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBBcm1WaXJ0UGtnL1hlbkFjcGlQbGF0Zm9ybUR4 ZS9YZW5BY3BpUGxhdGZvcm1EeGUuYwo+PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IEFybVZpcnRQa2cv WGVuQWNwaVBsYXRmb3JtRHhlL1hlbkFjcGlQbGF0Zm9ybUR4ZS5pbmYKPj4KPj4gZGlmZiAtLWdp dCBhL0FybVZpcnRQa2cvQXJtVmlydFhlbi5kc2MgYi9Bcm1WaXJ0UGtnL0FybVZpcnRYZW4uZHNj Cj4+IGluZGV4IDU5NGNhNjQuLmE4Njk5ODYgMTAwNjQ0Cj4+IC0tLSBhL0FybVZpcnRQa2cvQXJt VmlydFhlbi5kc2MKPj4gKysrIGIvQXJtVmlydFBrZy9Bcm1WaXJ0WGVuLmRzYwo+PiBAQCAtMjE2 LDMgKzIxNiwxMSBAQAo+Pgo+PiAgICBPdm1mUGtnL1hlbkJ1c0R4ZS9YZW5CdXNEeGUuaW5mCj4+ ICAgIE92bWZQa2cvWGVuUHZCbGtEeGUvWGVuUHZCbGtEeGUuaW5mCj4+ICsKPj4gKyAgIwo+PiAr ICAjIEFDUEkgc3VwcG9ydAo+PiArICAjCj4+ICshaWYgJChBUkNIKSA9PSBBQVJDSDY0Cj4+ICsg IE1kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvQWNwaS9BY3BpVGFibGVEeGUvQWNwaVRhYmxlRHhlLmlu Zgo+PiArICBBcm1WaXJ0UGtnL1hlbkFjcGlQbGF0Zm9ybUR4ZS9YZW5BY3BpUGxhdGZvcm1EeGUu aW5mCj4+ICshZW5kaWYKPj4gZGlmZiAtLWdpdCBhL0FybVZpcnRQa2cvQXJtVmlydFhlbi5mZGYg Yi9Bcm1WaXJ0UGtnL0FybVZpcnRYZW4uZmRmCj4+IGluZGV4IDEzNDEyZjkuLmIxZTAwZTUgMTAw NjQ0Cj4+IC0tLSBhL0FybVZpcnRQa2cvQXJtVmlydFhlbi5mZGYKPj4gKysrIGIvQXJtVmlydFBr Zy9Bcm1WaXJ0WGVuLmZkZgo+PiBAQCAtMTc5LDYgKzE3OSwxNCBAQCBSRUFEX0xPQ0tfU1RBVFVT ICAgPSBUUlVFCj4+ICAgIElORiBPdm1mUGtnL1hlbkJ1c0R4ZS9YZW5CdXNEeGUuaW5mCj4+ICAg IElORiBPdm1mUGtnL1hlblB2QmxrRHhlL1hlblB2QmxrRHhlLmluZgo+Pgo+PiArICAjCj4+ICsg ICMgQUNQSSBzdXBwb3J0Cj4+ICsgICMKPj4gKyFpZiAkKEFSQ0gpID09IEFBUkNINjQKPj4gKyAg SU5GIE1kZU1vZHVsZVBrZy9Vbml2ZXJzYWwvQWNwaS9BY3BpVGFibGVEeGUvQWNwaVRhYmxlRHhl LmluZgo+PiArICBJTkYgQXJtVmlydFBrZy9YZW5BY3BpUGxhdGZvcm1EeGUvWGVuQWNwaVBsYXRm b3JtRHhlLmluZgo+PiArIWVuZGlmCj4+ICsKPj4gIFtGVi5GVk1BSU5fQ09NUEFDVF0KPj4gIEZ2 QWxpZ25tZW50ICAgICAgICA9IDE2Cj4+ICBFUkFTRV9QT0xBUklUWSAgICAgPSAxCj4+IGRpZmYg LS1naXQgYS9Bcm1WaXJ0UGtnL1hlbkFjcGlQbGF0Zm9ybUR4ZS9YZW5BY3BpUGxhdGZvcm1EeGUu YyBiL0FybVZpcnRQa2cvWGVuQWNwaVBsYXRmb3JtRHhlL1hlbkFjcGlQbGF0Zm9ybUR4ZS5jCj4+ IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+IGluZGV4IDAwMDAwMDAuLjkyNThiZTgKPj4gLS0tIC9k ZXYvbnVsbAo+PiArKysgYi9Bcm1WaXJ0UGtnL1hlbkFjcGlQbGF0Zm9ybUR4ZS9YZW5BY3BpUGxh dGZvcm1EeGUuYwo+PiBAQCAtMCwwICsxLDI0MSBAQAo+PiArLyoqIEBmaWxlCj4+ICsgIFhlbiBB Uk0gQUNQSSBQbGF0Zm9ybSBEcml2ZXIgdXNpbmcgWGVuIEFSTSBtdWx0aWJvb3QgcHJvdG9jb2wK Pj4gKwo+PiArICBDb3B5cmlnaHQgKEMpIDIwMTYsIExpbmFybyBMdGQuIEFsbCByaWdodHMgcmVz ZXJ2ZWQuCj4+ICsKPj4gKyAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVy aWFscwo+PiArICBhcmUgbGljZW5zZWQgYW5kIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJt cyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgQlNEIExpY2Vuc2UKPj4gKyAgd2hpY2ggYWNjb21wYW5p ZXMgdGhpcyBkaXN0cmlidXRpb24uICBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlIG1heSBi ZSBmb3VuZCBhdAo+PiArICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vu c2UucGhwCj4+ICsKPj4gKyAgVEhFIFBST0dSQU0gSVMgRElTVFJJQlVURUQgVU5ERVIgVEhFIEJT RCBMSUNFTlNFIE9OIEFOICJBUyBJUyIgQkFTSVMsCj4+ICsgIFdJVEhPVVQgV0FSUkFOVElFUyBP UiBSRVBSRVNFTlRBVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQu Cj4+ICsKPj4gKyoqLwo+PiArCj4+ICsjaW5jbHVkZSA8TGlicmFyeS9CYXNlTGliLmg+Cj4+ICsj aW5jbHVkZSA8TGlicmFyeS9EZWJ1Z0xpYi5oPgo+PiArI2luY2x1ZGUgPExpYnJhcnkvVWVmaUJv b3RTZXJ2aWNlc1RhYmxlTGliLmg+Cj4+ICsjaW5jbHVkZSA8TGlicmFyeS9VZWZpRHJpdmVyRW50 cnlQb2ludC5oPgo+PiArCj4+ICsjaW5jbHVkZSA8UHJvdG9jb2wvQWNwaVRhYmxlLmg+Cj4+ICsj aW5jbHVkZSA8UHJvdG9jb2wvRmR0Q2xpZW50Lmg+Cj4+ICsKPj4gKyNpbmNsdWRlIDxJbmR1c3Ry eVN0YW5kYXJkL0FjcGkuaD4KPj4gKwo+PiArRUZJX0FDUElfMl8wX1JPT1RfU1lTVEVNX0RFU0NS SVBUSU9OX1BPSU5URVIgICpYZW5BY3BpUnNkcFN0cnVjdHVyZVB0ciA9IE5VTEw7Cj4+ICsKPiAK PiBEb2VzIHRoaXMgbmVlZCB0byBiZSBhIGdsb2JhbD8gSWYgeWVzLCBwbGVhc2UgYWRkIFNUQVRJ QywgYW5kIHByZWZpeAo+IHRoZSBuYW1lIHdpdGggJ20nLiBPdGhlcndpc2UsIG1vdmUgaXQgaW50 byBJbnN0YWxsWGVuQXJtVGFibGVzICgpLgo+IApPaywgSSdsbCBtb3ZlIGl0IHRvIEluc3RhbGxY ZW5Bcm1UYWJsZXMoKS4KCj4+ICsvKioKPj4gKyAgR2V0IHRoZSBhZGRyZXNzIG9mIFhlbiBBQ1BJ IFJvb3QgU3lzdGVtIERlc2NyaXB0aW9uIFBvaW50ZXIgKFJTRFApCj4+ICsgIHN0cnVjdHVyZS4K Pj4gKwo+PiArICBAcGFyYW0gIFJzZHBTdHJ1Y3R1cmVQdHIgICBSZXR1cm4gcG9pbnRlciB0byBS U0RQIHN0cnVjdHVyZQo+PiArCj4+ICsgIEByZXR1cm4gRUZJX1NVQ0NFU1MgICAgICAgIEZpbmQg WGVuIFJTRFAgc3RydWN0dXJlIHN1Y2Nlc3NmdWxseS4KPj4gKyAgQHJldHVybiBFRklfTk9UX0ZP VU5EICAgICAgRG9uJ3QgZmluZCBYZW4gUlNEUCBzdHJ1Y3R1cmUuCj4+ICsgIEByZXR1cm4gRUZJ X0FCT1JURUQgICAgICAgIEZpbmQgWGVuIFJTRFAgc3RydWN0dXJlLCBidXQgaXQncyBub3QgaW50 ZWdyYXRlZC4KPj4gKwo+PiArKiovCj4+ICtFRklfU1RBVFVTCj4+ICtFRklBUEkKPj4gK0dldFhl bkFybUFjcGlSc2RwICgKPiAKPiAuLi4gYW5kIGhlcmUKPiAKT2suCgo+PiArICBPVVQgICBFRklf QUNQSV8yXzBfUk9PVF9TWVNURU1fREVTQ1JJUFRJT05fUE9JTlRFUiAgICoqUnNkcFB0cgo+PiAr ICApCj4+ICt7Cj4+ICsgIEVGSV9BQ1BJXzJfMF9ST09UX1NZU1RFTV9ERVNDUklQVElPTl9QT0lO VEVSICAgKlJzZHBTdHJ1Y3R1cmVQdHI7Cj4+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgU3RhdHVzOwo+PiArICBGRFRfQ0xJRU5UX1BST1RPQ09MICAg ICAgICAgICAgICAgICAgICAgICAgICAgICpGZHRDbGllbnQ7Cj4+ICsgIENPTlNUIFVJTlQ2NCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlJlZzsKPj4gKyAgVUlOVDMyICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdFbGVtU2l6ZSwgUmVnU2l6ZTsK Pj4gKyAgVUlOVDY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWdC YXNlOwo+PiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFN1bTsKPj4gKwo+PiArICBSc2RwU3RydWN0dXJlUHRyID0gTlVMTDsKPiAKPiBQbGVhc2UgaW5p dGlhbGl6ZSBGZHRDbGllbnQgdG8gTlVMTCBoZXJlLgo+IApTdXJlLgoKPj4gKyAgLy8KPj4gKyAg Ly8gR2V0IHRoZSBSU0RQIHN0cnVjdHVyZSBhZGRyZXNzIGZyb20gRGV2aWNlVHJlZQo+PiArICAv Lwo+PiArICBTdGF0dXMgPSBnQlMtPkxvY2F0ZVByb3RvY29sICgmZ0ZkdENsaWVudFByb3RvY29s R3VpZCwgTlVMTCwKPiAKPiBQbGVhc2UgYWRkIGdGZHRDbGllbnRQcm90b2NvbEd1aWQgdG8gdGhl IFtEZXBleF0gc2VjdGlvbiBvZiB0aGlzIG1vZHVsZQo+IApPay4KCj4+ICsgICAgICAgICAgICAg ICAgICAoVk9JRCAqKikmRmR0Q2xpZW50KTsKPj4gKyAgQVNTRVJUX0VGSV9FUlJPUiAoU3RhdHVz KTsKPj4gKwo+PiArICBTdGF0dXMgPSBGZHRDbGllbnQtPkZpbmRDb21wYXRpYmxlTm9kZVJlZyAo RmR0Q2xpZW50LCAieGVuLGd1ZXN0LWFjcGkiLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAg KENPTlNUIFZPSUQgKiopJlJlZywgJlJlZ0VsZW1TaXplLCAmUmVnU2l6ZSk7Cj4+ICsgIGlmIChF RklfRVJST1IgKFN0YXR1cykpIHsKPj4gKyAgICBERUJVRyAoKEVGSV9EX1dBUk4sICIlYTogTm8g J3hlbixndWVzdC1hY3BpJyBjb21wYXRpYmxlIERUIG5vZGUgZm91bmRcbiIsCj4+ICsgICAgICBf X0ZVTkNUSU9OX18pKTsKPj4gKyAgICByZXR1cm4gRUZJX05PVF9GT1VORDsKPj4gKyAgfQo+PiAr Cj4+ICsgIEFTU0VSVCAoUmVnU2l6ZSA9PSAyICogc2l6ZW9mIChVSU5UNjQpKTsKPj4gKwo+PiAr ICBSZWdCYXNlID0gU3dhcEJ5dGVzNjQoUmVnWzBdKTsKPj4gKyAgUnNkcFN0cnVjdHVyZVB0ciA9 IChFRklfQUNQSV8yXzBfUk9PVF9TWVNURU1fREVTQ1JJUFRJT05fUE9JTlRFUiAqKVJlZ0Jhc2U7 Cj4+ICsKPj4gKyAgaWYgKFJzZHBTdHJ1Y3R1cmVQdHIgJiYgUnNkcFN0cnVjdHVyZVB0ci0+UmV2 aXNpb24gPj0gMikgewo+PiArICAgIFN1bSA9IENhbGN1bGF0ZVN1bTggKChDT05TVCBVSU5UOCAq KVJzZHBTdHJ1Y3R1cmVQdHIsCj4+ICsgICAgICAgICAgICBzaXplb2YgKEVGSV9BQ1BJXzJfMF9S T09UX1NZU1RFTV9ERVNDUklQVElPTl9QT0lOVEVSKSk7Cj4+ICsgICAgaWYgKFN1bSAhPSAwKSB7 Cj4+ICsgICAgICByZXR1cm4gRUZJX0FCT1JURUQ7Cj4+ICsgICAgfQo+PiArICB9Cj4+ICsKPj4g KyAgKlJzZHBQdHIgPSBSc2RwU3RydWN0dXJlUHRyOwo+PiArICByZXR1cm4gRUZJX1NVQ0NFU1M7 Cj4+ICt9Cj4+ICsKPj4gKy8qKgo+PiArICBHZXQgWGVuIEFjcGkgdGFibGVzIGZyb20gdGhlIFJT RFAgc3RydWN0dXJlLiBBbmQgaW5zdGFsbHMgWGVuIEFDUEkgdGFibGVzCj4+ICsgIGludG8gdGhl IFJTRFQvWFNEVCB1c2luZyBJbnN0YWxsQWNwaVRhYmxlLiBTb21lIHNpZ25hdHVyZSBvZiB0aGUg aW5zdGFsbGVkCj4+ICsgIEFDUEkgdGFibGVzIGFyZTogRkFDUCwgQVBJQywgR1REVCwgRFNEVC4K Pj4gKwo+PiArICBAcGFyYW0gIEFjcGlQcm90b2NvbCAgICAgICAgICAgUHJvdG9jb2wgaW5zdGFu Y2UgcG9pbnRlci4KPj4gKwo+PiArICBAcmV0dXJuIEVGSV9TVUNDRVNTICAgICAgICAgICAgVGhl IHRhYmxlIHdhcyBzdWNjZXNzZnVsbHkgaW5zZXJ0ZWQuCj4+ICsgIEByZXR1cm4gRUZJX0lOVkFM SURfUEFSQU1FVEVSICBFaXRoZXIgQWNwaVRhYmxlQnVmZmVyIGlzIE5VTEwsIFRhYmxlSGFuZGxl IGlzCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBvciBBY3BpVGFi bGVCdWZmZXJTaXplIGFuZCB0aGUgc2l6ZQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZmllbGQgZW1iZWRkZWQgaW4gdGhlIEFDUEkgdGFibGUgcG9pbnRlZCB0bwo+PiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnkgQWNwaVRhYmxlQnVmZmVyIGFyZSBub3Qg aW4gc3luYy4KPj4gKyAgQHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUyAgIEluc3VmZmljaWVu dCByZXNvdXJjZXMgZXhpc3QgdG8gY29tcGxldGUgdGhlIHJlcXVlc3QuCj4+ICsKPj4gKyoqLwo+ PiArRUZJX1NUQVRVUwo+PiArRUZJQVBJCj4+ICtJbnN0YWxsWGVuQXJtVGFibGVzICgKPiAKPiAu Li4gYW5kIGhlcmUKPiAKT2suCgo+PiArICBJTiAgIEVGSV9BQ1BJX1RBQkxFX1BST1RPQ09MICAg ICAgICpBY3BpUHJvdG9jb2wKPj4gKyAgKQo+PiArewo+PiArICBFRklfU1RBVFVTICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzOwo+PiArICBVSU5UTiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFibGVIYW5kbGU7Cj4+ICsKPj4g KyAgRUZJX0FDUElfREVTQ1JJUFRJT05fSEVBREVSICAgICAgICAgICAgICAgICAgICAgICpYc2R0 Owo+PiArICBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KkN1cnJlbnRUYWJsZUVudHJ5Owo+PiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgQ3VycmVudFRhYmxlUG9pbnRlcjsKPj4gKyAgRUZJX0FDUElfREVT Q1JJUFRJT05fSEVBREVSICAgICAgICAgICAgICAgICAgICAgICpDdXJyZW50VGFibGU7Cj4+ICsg IFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleDsK Pj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51 bWJlck9mVGFibGVFbnRyaWVzOwo+PiArICBFRklfQUNQSV8yXzBfRklYRURfQUNQSV9ERVNDUklQ VElPTl9UQUJMRSAgICAgICAgKkZhZHRUYWJsZTsKPj4gKyAgRUZJX0FDUElfREVTQ1JJUFRJT05f SEVBREVSICAgICAgICAgICAgICAgICAgICAgICpEc2R0VGFibGU7Cj4+ICsKPj4gKyAgRmFkdFRh YmxlICAgPSBOVUxMOwo+PiArICBEc2R0VGFibGUgICA9IE5VTEw7Cj4+ICsgIFRhYmxlSGFuZGxl ID0gMDsKPj4gKyAgTnVtYmVyT2ZUYWJsZUVudHJpZXMgPSAwOwo+PiArCj4+ICsgIC8vCj4+ICsg IC8vIFRyeSB0byBmaW5kIFhlbiBBUk0gQUNQSSB0YWJsZXMKPj4gKyAgLy8KPj4gKyAgU3RhdHVz ID0gR2V0WGVuQXJtQWNwaVJzZHAgKCZYZW5BY3BpUnNkcFN0cnVjdHVyZVB0cik7Cj4+ICsgIGlm IChFRklfRVJST1IgKFN0YXR1cykpIHsKPj4gKyAgICBERUJVRyAoKEVGSV9EX0lORk8sICIlYTog Tm8gUlNEUCB0YWJsZSBmb3VuZFxuIiwgX19GVU5DVElPTl9fKSk7Cj4+ICsgICAgcmV0dXJuIFN0 YXR1czsKPj4gKyAgfQo+PiArCj4+ICsgIC8vCj4+ICsgIC8vIElmIFhTRFQgdGFibGUgaXMgZmlu ZCwganVzdCBpbnN0YWxsIGl0cyB0YWJsZXMuCj4+ICsgIC8vCj4+ICsgIGlmIChYZW5BY3BpUnNk cFN0cnVjdHVyZVB0ci0+WHNkdEFkZHJlc3MpIHsKPj4gKyAgICAvLwo+PiArICAgIC8vIFJldHJp ZXZlIHRoZSBhZGRyZXNzZXMgb2YgWFNEVCBhbmQKPj4gKyAgICAvLyBjYWxjdWxhdGUgdGhlIG51 bWJlciBvZiBpdHMgdGFibGUgZW50cmllcy4KPj4gKyAgICAvLwo+PiArICAgIFhzZHQgPSAoRUZJ X0FDUElfREVTQ1JJUFRJT05fSEVBREVSICopIChVSU5UTikKPj4gKyAgICAgICAgICAgICBYZW5B Y3BpUnNkcFN0cnVjdHVyZVB0ci0+WHNkdEFkZHJlc3M7Cj4+ICsgICAgTnVtYmVyT2ZUYWJsZUVu dHJpZXMgPSAoWHNkdC0+TGVuZ3RoIC0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c2l6ZW9mIChFRklfQUNQSV9ERVNDUklQVElPTl9IRUFERVIpKSAvCj4+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHNpemVvZiAoVUlOVDY0KTsKPj4gKyAgICAvLwo+PiArICAgIC8vIElu c3RhbGwgQUNQSSB0YWJsZXMgZm91bmQgaW4gWFNEVC4KPj4gKyAgICAvLwo+PiArICAgIGZvciAo SW5kZXggPSAwOyBJbmRleCA8IE51bWJlck9mVGFibGVFbnRyaWVzOyBJbmRleCsrKSB7Cj4+ICsg ICAgICAvLwo+PiArICAgICAgLy8gR2V0IHRoZSB0YWJsZSBlbnRyeSBmcm9tIFhTRFQKPj4gKyAg ICAgIC8vCj4+ICsgICAgICBDdXJyZW50VGFibGVFbnRyeSA9IChWT0lEICopICgoVUlOVDggKikg WHNkdCArCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mIChFRklfQUNQSV9E RVNDUklQVElPTl9IRUFERVIpICsKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRl eCAqIHNpemVvZiAoVUlOVDY0KSk7Cj4+ICsgICAgICBDdXJyZW50VGFibGVQb2ludGVyID0gKFVJ TlROKSAqKFVJTlQ2NCAqKUN1cnJlbnRUYWJsZUVudHJ5Owo+PiArICAgICAgQ3VycmVudFRhYmxl ID0gKEVGSV9BQ1BJX0RFU0NSSVBUSU9OX0hFQURFUiAqKSBDdXJyZW50VGFibGVQb2ludGVyOwo+ PiArCj4+ICsgICAgICAvLwo+PiArICAgICAgLy8gSW5zdGFsbCB0aGUgWFNEVCB0YWJsZXMKPj4g KyAgICAgIC8vCj4+ICsgICAgICBTdGF0dXMgPSBBY3BpUHJvdG9jb2wtPkluc3RhbGxBY3BpVGFi bGUgKAo+PiArICAgICAgICAgICAgICAgICBBY3BpUHJvdG9jb2wsCj4+ICsgICAgICAgICAgICAg ICAgIEN1cnJlbnRUYWJsZSwKPj4gKyAgICAgICAgICAgICAgICAgQ3VycmVudFRhYmxlLT5MZW5n dGgsCj4+ICsgICAgICAgICAgICAgICAgICZUYWJsZUhhbmRsZQo+PiArICAgICAgICAgICAgICAg ICApOwo+PiArCj4+ICsgICAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7Cj4+ICsgICAgICAg IHJldHVybiBTdGF0dXM7Cj4+ICsgICAgICB9Cj4+ICsKPj4gKyAgICAgIC8vCj4+ICsgICAgICAv LyBHZXQgdGhlIEZBQ1MgYW5kIERTRFQgdGFibGUgYWRkcmVzcyBmcm9tIHRoZSB0YWJsZSBGQURU Cj4+ICsgICAgICAvLwo+PiArICAgICAgaWYgKCFBc2NpaVN0cm5DbXAgKChDSEFSOCAqKSAmQ3Vy cmVudFRhYmxlLT5TaWduYXR1cmUsICJGQUNQIiwgNCkpIHsKPj4gKyAgICAgICAgRmFkdFRhYmxl ID0gKEVGSV9BQ1BJXzJfMF9GSVhFRF9BQ1BJX0RFU0NSSVBUSU9OX1RBQkxFICopCj4+ICsgICAg ICAgICAgICAgICAgICAgICAgKFVJTlROKSBDdXJyZW50VGFibGVQb2ludGVyOwo+PiArICAgICAg ICBEc2R0VGFibGUgID0gKEVGSV9BQ1BJX0RFU0NSSVBUSU9OX0hFQURFUiAqKSAoVUlOVE4pIEZh ZHRUYWJsZS0+RHNkdDsKPj4gKyAgICAgIH0KPj4gKyAgICB9Cj4+ICsgIH0KPj4gKwo+PiArICAv Lwo+PiArICAvLyBJbnN0YWxsIERTRFQgdGFibGUuCj4+ICsgIC8vCj4+ICsgIFN0YXR1cyA9IEFj cGlQcm90b2NvbC0+SW5zdGFsbEFjcGlUYWJsZSAoCj4+ICsgICAgICAgICAgICAgQWNwaVByb3Rv Y29sLAo+PiArICAgICAgICAgICAgIERzZHRUYWJsZSwKPj4gKyAgICAgICAgICAgICBEc2R0VGFi bGUtPkxlbmd0aCwKPj4gKyAgICAgICAgICAgICAmVGFibGVIYW5kbGUKPj4gKyAgICAgICAgICAg ICApOwo+PiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7Cj4+ICsgICAgcmV0dXJuIFN0YXR1 czsKPj4gKyAgfQo+PiArCj4+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsKPj4gK30KPj4gKwo+PiAr U1RBVElDCj4+ICtFRklfQUNQSV9UQUJMRV9QUk9UT0NPTCAqCj4+ICtGaW5kQWNwaVRhYmxlUHJv dG9jb2wgKAo+PiArICBWT0lECj4+ICsgICkKPj4gK3sKPj4gKyAgRUZJX1NUQVRVUyAgICAgICAg ICAgICAgU3RhdHVzOwo+PiArICBFRklfQUNQSV9UQUJMRV9QUk9UT0NPTCAqQWNwaVRhYmxlOwo+ PiArCj4gCj4gVGhlIGFzc2VydCBiZWxvdyBpcyBjb21waWxlZCBvdXQgaW4gUkVMRUFTRSBidWls ZCwgaW4gd2hpY2ggY2FzZSB5b3UKPiBhcmUgcmV0dXJuaW5nIHdoYXRldmVyIHZhbHVlIHdhcyBv biB0aGUgc3RhY2sgaWYgTG9jYXRlUHJvdG9jb2wgKCkKPiBmYWlscy4gRXZlbiBpZiB0aGF0IHNo b3VsZCBuZXZlciBoYXBwZW4sIGR1ZSB0byB0aGUgZGVwZXgsIGNvdWxkIHlvdQo+IHBsZWFzZSBz dGlsbCBpbml0aWFsaXplIEFjcGlUYWJsZSB0byBOVUxMIGhlcmU/Cj4gCk9rLCB3aWxsIGluaXRp YWxpemUgQWNwaVRhYmxlIHRvIE5VTEwuCgpUaGFua3MgYSBsb3QgZm9yIHlvdXIgcmV2aWV3IGNv bW1lbnRzLgoKLS0gClNoYW5ub24KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5v cmcKaHR0cDovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==