ZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vczM5MC8zMjcwLkNoYW5nZUxvZyBiL0RvY3VtZW50YXRpb24vczM5MC8zMjcwLkNoYW5nZUxvZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzFjMzYwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zMzkwLzMyNzAuQ2hhbmdlTG9nCkBAIC0wLDAgKzEsNDQgQEAKK0NoYW5nZUxvZyBmb3IgdGhlIFVUUyBHbG9iYWwgMzI3MC1zdXBwb3J0IHBhdGNoCisKK1NlcCAyMDAyOglHZXQgYm9vdHVwIGNvbG9ycyByaWdodCBvbiAzMjcwIGNvbnNvbGUKKwkqIEluIHR1YnR0eWJsZC5jLCBzdWJzdGFudGlhbGx5IHJldmlzZSBFU0MgcHJvY2Vzc2luZyBzbyB0aGF0CisJICBFU0Mgc2VxdWVuY2VzIChlc3BlY2lhbGx5IGNvbG9yaW5nIG9uZXMpIGFuZCB0aGUgc3RyaW5ncworCSAgdGhleSBhZmZlY3Qgd29yayBhcyByaWdodCBhcyAzMjcwIGNhbiBnZXQgdGhlbS4gIEFsc28sIHNldAorCSAgc2NyZWVuIGhlaWdodCB0byBvbWl0IHRoZSB0d28gcm93cyB1c2VkIGZvciBpbnB1dCBhcmVhLCBpbgorCSAgdHR5MzI3MF9vcGVuKCkgaW4gdHVidHR5LmMuCisKK1NlcCAyMDAyOglEeW5hbWljYWxseSBnZXQgMzI3MCBpbnB1dCBidWZmZXIKKwkqIE92ZXJzaXplIDMyNzAgc2NyZWVuIHdpZHRocyBtYXkgZXhjZWVkIEdFT01fTUFYSU5QTEVOIGNvbHVtbnMsCisJICBzbyBnZXQgaW5wdXQtYXJlYSBidWZmZXIgZHluYW1pY2FsbHkgd2hlbiBzaXppbmcgdGhlIGRldmljZSBpbgorCSAgdHVibWFrZW1pbigpIGluIHR1YmFsbC5jIChpZiBpdCdzIHRoZSBjb25zb2xlKSBvciB0dHkzMjcwX29wZW4oKQorCSAgaW4gdHVidHR5LmMgKGlmIG5lZWRlZCkuICBDaGFuZ2UgdHVicC0+dHR5X2lucHV0IHRvIGJlIGEKKwkgIHBvaW50ZXIgcmF0aGVyIHRoYW4gYW4gYXJyYXksIGluIHR1YmlvLmguCisKK1NlcCAyMDAyOglGaXggdHViZnMga21hbGxvYygpcworCSogRG8gcmVhZCBhbmQgd3JpdGUgbGVuZ3RocyBjb3JyZWN0bHkgaW4gZnMzMjcwX3JlYWQoKQorCSAgYW5kIGZzMzI3MF93cml0ZSgpLCB3aGlsc3QgbmV2ZXIgYXNraW5nIGttYWxsb2MoKQorCSAgZm9yIG1vcmUgdGhhbiAweDgwMCBieXRlcy4gIEFmZmVjdHMgdHViZnMuYyBhbmQgdHViaW8uaC4KKworU2VwIDIwMDI6CVJlY29nbml6ZSAzMjcwIGNvbnRyb2wgdW5pdCB0eXBlIDMxNzQKKwkqIFJlY29nbml6ZSBjb250cm9sLXVuaXQgdHlwZSAweDMxNzQgYXMgd2VsbCBhcyAweDMyNz8uCisJICBUaGUgSUJNIDIwNDcgZGV2aWNlIGVtdWxhdGVzIGEgMzE3NCBjb250cm9sIHVuaXQuCisJICBNb2R1bGFyaXplIGNvbnRyb2wtdW5pdCByZWNvZ25pdGlvbiBpbiB0dWJhbGwuYyBieQorCSAgYWRkaW5nIGFuZCBpbnZva2luZyBuZXcgdHViMzI3MF9pc19vdXJzKCkuCisKK0FwciAyMDAyOglGaXggMzI3MCBjb25zb2xlIHJlYm9vdCBsb29wCisJKiAoQmVsYXRlZCBsb2cgZW50cnkpIEZpeGVkIHJlYm9vdCBsb29wIGlmIDMyNzAgY29uc29sZSwKKwkgIGluIHR1YnR0eS5jOnR0dTMyNzBfYmgoKS4KKworRmViIDYsIDIwMDE6CisJKiBUaGlzIGNoYW5nZWxvZyBpcyBuZXcKKwkqIHR1YjMyNzAgbm93IHN1cHBvcnRzIDMyNzAgY29uc29sZToKKwkJU3BlY2lmeSB5IGZvciBDT05GSUdfMzI3MCBhbmQgeSBmb3IgQ09ORklHXzMyNzBfQ09OU09MRS4KKwkJU3VwcG9ydCBmb3IgMzIxNSB3aWxsIG5vdCBhcHBlYXIgaWYgMzI3MCBjb25zb2xlIHN1cHBvcnQKKwkJaXMgY2hvc2VuLgorCQlOT1RFOiAgVGhlIGRlZmF1bHQgaXMgMzI3MCBjb25zb2xlIHN1cHBvcnQsIE5PVCAzMjE1LgorCSogdGhlIGNvbXBvbmVudHMgYXJlIHJlbW9kdWxhcml6ZWQ6IGFkZGVkIHNvdXJjZSBtb2R1bGVzIGFyZQorCSAgdHVidHR5YmxkLmMgYW5kIHR1YnR0eXNjbC5jLCBmb3Igc2NyZWVuLWJ1aWxkaW5nIGNvZGUgYW5kCisJICBzY3JvbGwtdGltZW91dCBjb2RlLgorCSogdHViMzI3MCBzb3VyY2UgZm9yIHRoaXMgKDIuNC4wKSB2ZXJzaW9uIGlzICNpZmRlZmZlZCB0bworCSAgYnVpbGQgd2l0aCBib3RoIDIuNC4wIGFuZCAyLjIuMTYuMi4KKwkqIGNvbG9yIHN1cHBvcnQgYW5kIG1pbmltYWwgb3RoZXIgRVNDLXNlcXVlbmNlIHN1cHBvcnQgaXMgYWRkZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3MzOTAvMzI3MC50eHQgYi9Eb2N1bWVudGF0aW9uL3MzOTAvMzI3MC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGEwNDRlNgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vczM5MC8zMjcwLnR4dApAQCAtMCwwICsxLDI3NCBAQAorSUJNIDMyNzAgRGlzcGxheSBTeXN0ZW0gc3VwcG9ydAorCitUaGlzIGZpbGUgZGVzY3JpYmVzIHRoZSBkcml2ZXIgdGhhdCBzdXBwb3J0cyBsb2NhbCBjaGFubmVsIGF0dGFjaG1lbnQKK29mIElCTSAzMjcwIGRldmljZXMuICBJdCBjb25zaXN0cyBvZiB0aHJlZSBzZWN0aW9uczoKKwkqIEludHJvZHVjdGlvbgorCSogSW5zdGFsbGF0aW9uCisJKiBPcGVyYXRpb24KKworCitJTlRST0RVQ1RJT04uCisKK1RoaXMgcGFwZXIgZGVzY3JpYmVzIGluc3RhbGxpbmcgYW5kIG9wZXJhdGluZyAzMjcwIGRldmljZXMgdW5kZXIKK0xpbnV4LzM5MC4gIEEgMzI3MCBkZXZpY2UgaXMgYSBibG9jay1tb2RlIHJvd3MtYW5kLWNvbHVtbnMgdGVybWluYWwgb2YKK3doaWNoIEknbSBzdXJlIGh1bmRyZWRzIG9mIG1pbGxpb25zIHdlcmUgc29sZCBieSBJQk0gYW5kIGNsb25lbWFrZXJzCit0d2VudHkgYW5kIHRoaXJ0eSB5ZWFycyBhZ28uCisKK1lvdSBtYXkgaGF2ZSAzMjcwcyBpbi1ob3VzZSBhbmQgbm90IGtub3cgaXQuICBJZiB5b3UncmUgdXNpbmcgdGhlCitWTS1FU0Egb3BlcmF0aW5nIHN5c3RlbSwgZGVmaW5lIGEgMzI3MCB0byB5b3VyIHZpcnR1YWwgbWFjaGluZSBieSB1c2luZwordGhlIGNvbW1hbmQgIkRFRiBHUkFGIDxoZXgtYWRkcmVzcz4iICBUaGlzIHBhcGVyIHByZXN1bWVzIHlvdSB3aWxsIGJlCitkZWZpbmluZyBmb3VyIDMyNzBzIHdpdGggdGhlIENQL0NNUyBjb21tYW5kcworCisJREVGIEdSQUYgNjIwCisJREVGIEdSQUYgNjIxCisJREVGIEdSQUYgNjIyCisJREVGIEdSQUYgNjIzCisKK1lvdXIgbmV0d29yayBjb25uZWN0aW9uIGZyb20gVk0tRVNBIGFsbG93cyB5b3UgdG8gdXNlIHgzMjcwLCB0bjMyNzAsIG9yCithbm90aGVyIDMyNzAgZW11bGF0b3IsIHN0YXJ0ZWQgZnJvbSBhbiB4dGVybSB3aW5kb3cgb24geW91ciBQQyBvcgord29ya3N0YXRpb24uICBXaXRoIHRoZSBERUYgR1JBRiBjb21tYW5kLCBhbiBhcHBsaWNhdGlvbiBzdWNoIGFzIHh0ZXJtLAorYW5kIHRoaXMgTGludXgtMzkwIDMyNzAgZHJpdmVyLCB5b3UgaGF2ZSBhbm90aGVyIHdheSBvZiB0YWxraW5nIHRvIHlvdXIKK0xpbnV4IGJveC4KKworVGhpcyBwYXBlciBjb3ZlcnMgaW5zdGFsbGF0aW9uIG9mIHRoZSBkcml2ZXIgYW5kIG9wZXJhdGlvbiBvZiBhCitkaWFsZWQtaW4geDMyNzAuCisKKworSU5TVEFMTEFUSU9OLgorCitZb3UgaW5zdGFsbCB0aGUgZHJpdmVyIGJ5IGluc3RhbGxpbmcgYSBwYXRjaCwgZG9pbmcgYSBrZXJuZWwgYnVpbGQsIGFuZAorcnVubmluZyB0aGUgY29uZmlndXJhdGlvbiBzY3JpcHQgKGNvbmZpZzMyNzAuc2gsIGluIHRoaXMgZGlyZWN0b3J5KS4KKworV0FSTklORzogIElmIHlvdSBhcmUgdXNpbmcgMzI3MCBjb25zb2xlIHN1cHBvcnQsIHlvdSBtdXN0IHJlcnVuIHRoZQorY29uZmlndXJhdGlvbiBzY3JpcHQgZXZlcnkgdGltZSB5b3UgY2hhbmdlIHRoZSBjb25zb2xlJ3MgYWRkcmVzcyAocGVyaGFwcworYnkgdXNpbmcgdGhlIGNvbmRldj0gcGFyYW1ldGVyIGluIHNpbG8ncyAvYm9vdC9wYXJtZmlsZSkuICBNb3JlIHByZWNpc2VseSwKK3lvdSBzaG91bGQgcmVydW4gdGhlIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGV2ZXJ5IHRpbWUgeW91ciBzZXQgb2YgMzI3MHMsCitpbmNsdWRpbmcgdGhlIGNvbnNvbGUgMzI3MCwgY2hhbmdlcyBzdWJjaGFubmVsIGlkZW50aWZpZXIgcmVsYXRpdmUgdG8KK29uZSBhbm90aGVyLiAgUmVJUEwgYXMgc29vbiBhcyBwb3NzaWJsZSBhZnRlciBydW5uaW5nIHRoZSBjb25maWd1cmF0aW9uCitzY3JpcHQgYW5kIHRoZSByZXN1bHRpbmcgL3RtcC9ta2RldjMyNzAuCisKK0lmIHlvdSBoYXZlIGNob3NlbiB0byBtYWtlIHR1YjMyNzAgYSBtb2R1bGUsIHlvdSBhZGQgYSBsaW5lIHRvCisvZXRjL21vZHByb2JlLmNvbmYuICBJZiB5b3UgYXJlIHdvcmtpbmcgb24gYSBWTSB2aXJ0dWFsIG1hY2hpbmUsIHlvdQorY2FuIHVzZSBERUYgR1JBRiB0byBkZWZpbmUgdmlydHVhbCAzMjcwIGRldmljZXMuCisKK1lvdSBtYXkgZ2VuZXJhdGUgYm90aCAzMjcwIGFuZCAzMjE1IGNvbnNvbGUgc3VwcG9ydCwgb3Igb25lIG9yIHRoZQorb3RoZXIsIG9yIG5laXRoZXIuICBJZiB5b3UgZ2VuZXJhdGUgYm90aCwgdGhlIGNvbnNvbGUgdHlwZSB1bmRlciBWTSBpcworbm90IGNoYW5nZWQuICBVc2UgI0NQIFEgVEVSTSB0byBzZWUgd2hhdCB0aGUgY3VycmVudCBjb25zb2xlIHR5cGUgaXMuCitVc2UgI0NQIFRFUk0gQ09OTU9ERSAzMjcwIHRvIGNoYW5nZSBpdCB0byAzMjcwLiAgSWYgeW91IGdlbmVyYXRlIG9ubHkKKzMyNzAgY29uc29sZSBzdXBwb3J0LCB0aGVuIHRoZSBkcml2ZXIgYXV0b21hdGljYWxseSBjb252ZXJ0cyB5b3VyIGNvbnNvbGUKK2F0IGJvb3QgdGltZSB0byBhIDMyNzAgaWYgaXQgaXMgYSAzMjE1LgorCitJbiBicmllZiwgdGhlc2UgYXJlIHRoZSBzdGVwczoKKwkxLiBJbnN0YWxsIHRoZSB0dWIzMjcwIHBhdGNoCisJMi4gKElmIGEgbW9kdWxlKSBhZGQgYSBsaW5lIHRvIC9ldGMvbW9kcHJvYmUuY29uZgorCTMuIChJZiBWTSkgZGVmaW5lIGRldmljZXMgd2l0aCBERUYgR1JBRgorCTQuIFJlYm9vdAorCTUuIENvbmZpZ3VyZQorCitUbyB0ZXN0IHRoYXQgZXZlcnl0aGluZyB3b3JrcywgYXNzdW1pbmcgVk0gYW5kIHgzMjcwLAorCTEuIEJyaW5nIHVwIGFuIHgzMjcwIHdpbmRvdy4KKwkyLiBVc2UgdGhlIERJQUwgY29tbWFuZCBpbiB0aGF0IHdpbmRvdy4KKwkzLiBZb3Ugc2hvdWxkIGltbWVkaWF0ZWx5IHNlZSBhIExpbnV4IGxvZ2luIHNjcmVlbi4KKworSGVyZSBhcmUgdGhlIGluc3RhbGxhdGlvbiBzdGVwcyBpbiBkZXRhaWw6CisKKwkxLiAgVGhlIDMyNzAgZHJpdmVyIGlzIGEgcGFydCBvZiB0aGUgb2ZmaWNpYWwgTGludXgga2VybmVsCisJc291cmNlLiAgQnVpbGQgYSB0cmVlIHdpdGggdGhlIGtlcm5lbCBzb3VyY2UgYW5kIGFueSBuZWNlc3NhcnkKKwlwYXRjaGVzLiAgVGhlbiBkbworCQltYWtlIG9sZGNvbmZpZworCQkoSWYgeW91IHdpc2ggdG8gZGlzYWJsZSAzMjE1IGNvbnNvbGUgc3VwcG9ydCwgZWRpdAorCQkuY29uZmlnOyBjaGFuZ2UgQ09ORklHX1ROMzIxNSdzIHZhbHVlIHRvICJuIjsKKwkJYW5kIHJlcnVuICJtYWtlIG9sZGNvbmZpZyIuKQorCQltYWtlIGltYWdlCisJCW1ha2UgbW9kdWxlcworCQltYWtlIG1vZHVsZXNfaW5zdGFsbAorCisJMi4gKFBlcmZvcm0gdGhpcyBzdGVwIG9ubHkgaWYgeW91IGhhdmUgY29uZmlndXJlZCB0dWIzMjcwIGFzIGEKKwltb2R1bGUuKSAgQWRkIGEgbGluZSB0byAvZXRjL21vZHByb2JlLmNvbmYgdG8gYXV0b21hdGljYWxseQorCWxvYWQgdGhlIGRyaXZlciB3aGVuIGl0J3MgbmVlZGVkLiAgV2l0aCB0aGlzIGxpbmUgYWRkZWQsCisJeW91IHdpbGwgc2VlIGxvZ2luIHByb21wdHMgYXBwZWFyIG9uIHlvdXIgMzI3MHMgYXMgc29vbiBhcworCWJvb3QgaXMgY29tcGxldGUgKG9yIHdpdGggZW11bGF0ZWQgMzI3MHMsIGFzIHNvb24gYXMgeW91IGRpYWwKKwlpbnRvIHlvdXIgdm0gZ3Vlc3QgdXNpbmcgdGhlIGNvbW1hbmQgIkRJQUwgPHZtZ3Vlc3RuYW1lPiIpLgorCVNpbmNlIHRoZSBsaW5lLW1vZGUgbWFqb3IgbnVtYmVyIGlzIDIyNywgdGhlIGxpbmUgdG8gYWRkIHRvCisJL2V0Yy9tb2Rwcm9iZS5jb25mIHNob3VsZCBiZToKKwkJYWxpYXMgY2hhci1tYWpvci0yMjcgdHViMzI3MAorCisJMy4gRGVmaW5lIGdyYXBoaWMgZGV2aWNlcyB0byB5b3VyIHZtIGd1ZXN0IG1hY2hpbmUsIGlmIHlvdQorCWhhdmVuJ3QgYWxyZWFkeS4gIERlZmluZSB0aGVtIGJlZm9yZSB5b3UgcmVib290IChyZWlwbCk6CisJCURFRklORSBHUkFGIDYyMAorCQlERUZJTkUgR1JBRiA2MjEKKwkJREVGSU5FIEdSQUYgNjIyCisJCURFRklORSBHUkFGIDYyMworCisJNC4gUmVib290LiAgVGhlIHJlYm9vdCBwcm9jZXNzIHNjYW5zIGhhcmR3YXJlIGRldmljZXMsIGluY2x1ZGluZworCTMyNzBzLCBhbmQgdGhpcyBlbmFibGVzIHRoZSB0dWIzMjcwIGRyaXZlciBvbmNlIGxvYWRlZCB0byByZXNwb25kCisJY29ycmVjdGx5IHRvIHRoZSBjb25maWd1cmF0aW9uIHJlcXVlc3RzIG9mIHRoZSBuZXh0IHN0ZXAuICBJZgorCXlvdSBoYXZlIGNob3NlbiAzMjcwIGNvbnNvbGUgc3VwcG9ydCwgeW91ciBjb25zb2xlIG5vdyBiZWhhdmVzCisJYXMgYSAzMjcwLCBub3QgYSAzMjE1LgorCisJNS4gUnVuIHRoZSAzMjcwIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGNvbmZpZzMyNzAuICBJdCBpcworCWRpc3RyaWJ1dGVkIGluIHRoaXMgc2FtZSBkaXJlY3RvcnksIERvY3VtZW50YXRpb24vczM5MCwgYXMKKwljb25maWczMjcwLnNoLglJbnNwZWN0IHRoZSBvdXRwdXQgc2NyaXB0IGl0IHByb2R1Y2VzLAorCS90bXAvbWtkZXYzMjcwLCBhbmQgdGhlbiBydW4gdGhhdCBzY3JpcHQuICBUaGlzIHdpbGwgY3JlYXRlIHRoZQorCW5lY2Vzc2FyeSBjaGFyYWN0ZXIgc3BlY2lhbCBkZXZpY2UgZmlsZXMgYW5kIG1ha2UgdGhlIG5lY2Vzc2FyeQorCWNoYW5nZXMgdG8gL2V0Yy9pbml0dGFiLiAgSWYgeW91IGhhdmUgc2VsZWN0ZWQgREVWRlMsIHRoZSBkcml2ZXIKKwlpdHNlbGYgY3JlYXRlcyB0aGUgZGV2aWNlIGZpbGVzLCBhbmQgL3RtcC9ta2RldjMyNzAgb25seSBjaGFuZ2VzCisJL2V0Yy9pbml0dGFiLgorCisJVGhlbiBub3RpZnkgL3NiaW4vaW5pdCB0aGF0IC9ldGMvaW5pdHRhYiBoYXMgY2hhbmdlZCwgYnkgaXNzdWluZworCXRoZSB0ZWxpbml0IGNvbW1hbmQgd2l0aCB0aGUgcSBvcGVyYW5kOgorCQljZCBEb2N1bWVudGF0aW9uL3MzOTAKKwkJc2ggY29uZmlnMzI3MC5zaAorCQlzaCAvdG1wL21rZGV2MzI3MAorCQl0ZWxpbml0IHEKKworCVRoaXMgc2hvdWxkIGJlIHN1ZmZpY2llbnQgZm9yIHlvdXIgZmlyc3QgdGltZS4JSWYgeW91ciAzMjcwCisJY29uZmlndXJhdGlvbiBoYXMgY2hhbmdlZCBhbmQgeW91J3JlIHJldXNpbmcgY29uZmlnMzI3MCwgeW91CisJc2hvdWxkIGZvbGxvdyB0aGVzZSBzdGVwczoKKwkJQ2hhbmdlIDMyNzAgY29uZmlndXJhdGlvbgorCQlSZWJvb3QKKwkJUnVuIGNvbmZpZzMyNzAgYW5kIC90bXAvbWtkZXYzMjcwCisJCVJlYm9vdAorCitIZXJlIGFyZSB0aGUgdGVzdGluZyBzdGVwcyBpbiBkZXRhaWw6CisKKwkxLiBCcmluZyB1cCBhbiB4MzI3MCB3aW5kb3csIG9yIHVzZSBhbiBhY3R1YWwgaGFyZHdhcmUgMzI3OCBvcgorCTMyNzksIG9yIHVzZSB0aGUgMzI3MCBlbXVsYXRvciBvZiB5b3VyIGNob2ljZS4gIFlvdSB3b3VsZCBiZQorCXJ1bm5pbmcgdGhlIGVtdWxhdG9yIG9uIHlvdXIgUEMgb3Igd29ya3N0YXRpb24uICBZb3Ugd291bGQgdXNlCisJdGhlIGNvbW1hbmQsIGZvciBleGFtcGxlLAorCQl4MzI3MCB2bS1lc2EtZG9tYWluLW5hbWUgJgorCWlmIHlvdSB3YW50ZWQgYSAzMjc4IE1vZGVsIDQgd2l0aCA0MyByb3dzIG9mIDgwIGNvbHVtbnMsIHRoZQorCWRlZmF1bHQgbW9kZWwgbnVtYmVyLiAgVGhlIGRyaXZlciBkb2VzIG5vdCB0YWtlIGFkdmFudGFnZSBvZgorCWV4dGVuZGVkIGF0dHJpYnV0ZXMuCisKKwlUaGUgc2NyZWVuIHlvdSBzaG91bGQgbm93IHNlZSBjb250YWlucyBhIFZNIGxvZ28gd2l0aCBpbnB1dAorCWxpbmVzIG5lYXIgdGhlIGJvdHRvbS4gIFVzZSBUQUIgdG8gbW92ZSB0byB0aGUgYm90dG9tIGxpbmUsCisJcHJvYmFibHkgbGFiZWxlZCAiQ09NTUFORCAgPT09PiIuCisKKwkyLiBVc2UgdGhlIERJQUwgY29tbWFuZCBpbnN0ZWFkIG9mIHRoZSBMT0dJTiBjb21tYW5kIHRvIGNvbm5lY3QKKwl0byBvbmUgb2YgdGhlIHZpcnR1YWwgMzI3MHMgeW91IGRlZmluZWQgd2l0aCB0aGUgREVGIEdSQUYKKwljb21tYW5kczoKKwkJZGlhbCBteS12bS1ndWVzdC1uYW1lCisKKwkzLiBZb3Ugc2hvdWxkIGltbWVkaWF0ZWx5IHNlZSBhIGxvZ2luIHByb21wdCBmcm9tIHlvdXIKKwlMaW51eC0zOTAgb3BlcmF0aW5nIHN5c3RlbS4gIElmIHRoYXQgZG9lcyBub3QgaGFwcGVuLCB5b3Ugd291bGQKKwlzZWUgaW5zdGVhZCB0aGUgbGluZSAiRElBTEVEIFRPIG15LXZtLWd1ZXN0LW5hbWUgICAwNjIwIi4KKworCVRvIHRyb3VibGVzaG9vdDogIGRvIHRoZXNlIHRoaW5ncy4KKworCUEuIElzIHRoZSBkcml2ZXIgbG9hZGVkPyAgVXNlIHRoZSBsc21vZCBjb21tYW5kIChubyBvcGVyYW5kcykKKwl0byBmaW5kIG91dC4gIFByb2JhYmx5IGl0IGlzbid0LiAgVHJ5IGxvYWRpbmcgaXQgbWFudWFsbHksIHdpdGgKKwl0aGUgY29tbWFuZCAiaW5zbW9kIHR1YjMyNzAiLiAgRG9lcyB0aGF0IGNvbW1hbmQgZ2l2ZSBlcnJvcgorCW1lc3NhZ2VzPyAgSGEhICBUaGVyZSdzIHlvdXIgcHJvYmxlbS4KKworCUIuIElzIHRoZSAvZXRjL2luaXR0YWIgZmlsZSBtb2RpZmllZCBhcyBpbiBpbnN0YWxsYXRpb24gc3RlcCAzCisJYWJvdmU/ICBVc2UgdGhlIGdyZXAgY29tbWFuZCB0byBmaW5kIG91dDsgZm9yIGluc3RhbmNlLCBpc3N1ZQorCSJncmVwIDMyNzAgL2V0Yy9pbml0dGFiIi4gIE5vdGhpbmcgZm91bmQ/ICBUaGVyZSdzIHlvdXIKKwlwcm9ibGVtIQorCisJQy4gQXJlIHRoZSBkZXZpY2Ugc3BlY2lhbCBmaWxlcyBjcmVhdGVkLCBhcyBpbiBpbnN0YWxsYXRpb24KKwlzdGVwIDIgYWJvdmU/ICBVc2UgdGhlIGxzIC1sIGNvbW1hbmQgdG8gZmluZCBvdXQ7IGZvciBpbnN0YW5jZSwKKwlpc3N1ZSAibHMgLWwgL2Rldi8zMjcwL3R0eTYyMCIuICBUaGUgb3V0cHV0IHNob3VsZCBzdGFydCB3aXRoIHRoZQorCWxldHRlciAiYyIgbWVhbmluZyBjaGFyYWN0ZXIgZGV2aWNlIGFuZCBzaG91bGQgY29udGFpbiAiMjI3LCAxIgorCWp1c3QgdG8gdGhlIGxlZnQgb2YgdGhlIGRldmljZSBuYW1lLiAgTm8gc3VjaCBmaWxlPyAgbm8gImMiPworCVdyb25nIG1ham9yIG51bWJlcj8gIFdyb25nIG1pbm9yIG51bWJlcj8gIFRoZXJlJ3MgeW91cgorCXByb2JsZW0hCisKKwlELiBEbyB5b3UgZ2V0IHRoZSBtZXNzYWdlCisJCSAiSENQRElBMDQ3RSBteS12bS1ndWVzdC1uYW1lIDA2MjAgZG9lcyBub3QgZXhpc3QiPworCUlmIHNvLCB5b3UgbXVzdCBpc3N1ZSB0aGUgY29tbWFuZCAiREVGIEdSQUYgNjIwIiBmcm9tIHlvdXIgVk0KKwkzMjE1IGNvbnNvbGUgYW5kIHRoZW4gcmVib290IHRoZSBzeXN0ZW0uCisKKworCitPUEVSQVRJT04uCisKK1RoZSBkcml2ZXIgZGVmaW5lcyB0aHJlZSBhcmVhcyBvbiB0aGUgMzI3MCBzY3JlZW46ICB0aGUgbG9nIGFyZWEsIHRoZQoraW5wdXQgYXJlYSwgYW5kIHRoZSBzdGF0dXMgYXJlYS4KKworVGhlIGxvZyBhcmVhIHRha2VzIHVwIGFsbCBidXQgdGhlIGJvdHRvbSB0d28gbGluZXMgb2YgdGhlIHNjcmVlbi4gIFRoZQorZHJpdmVyIHdyaXRlcyB0ZXJtaW5hbCBvdXRwdXQgdG8gaXQsIHN0YXJ0aW5nIGF0IHRoZSB0b3AgbGluZSBhbmQgZ29pbmcKK2Rvd24uICBXaGVuIGl0IGZpbGxzLCB0aGUgc3RhdHVzIGFyZWEgY2hhbmdlcyBmcm9tICJMaW51eCBSdW5uaW5nIiB0bworIkxpbnV4IE1vcmUuLi4iLiAgQWZ0ZXIgYSBzY3JvbGxpbmcgdGltZW91dCBvZiAoZGVmYXVsdCkgNSBzZWMsIHRoZQorc2NyZWVuIGNsZWFycyBhbmQgbW9yZSBvdXRwdXQgaXMgd3JpdHRlbiwgZnJvbSB0aGUgdG9wIGRvd24uCisKK1RoZSBpbnB1dCBhcmVhIGV4dGVuZHMgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzZWNvbmQtdG8tbGFzdCBzY3JlZW4KK2xpbmUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBzdGF0dXMgYXJlYS4gIFlvdSB0eXBlIGNvbW1hbmRzIGluIHRoaXMgYXJlYQorYW5kIGhpdCBFTlRFUiB0byBleGVjdXRlIHRoZW0uCisKK1RoZSBzdGF0dXMgYXJlYSBpbml0aWFsaXplcyB0byAiTGludXggUnVubmluZyIgdG8gZ2l2ZSB5b3UgYSB3YXJtCitmdXp6eSBmZWVsaW5nLiAgV2hlbiB0aGUgbG9nIGFyZWEgZmlsbHMgdXAgYW5kIG91dHB1dCBhd2FpdHMsIGl0CitjaGFuZ2VzIHRvICJMaW51eCBNb3JlLi4uIi4gIEF0IHRoaXMgdGltZSB5b3UgY2FuIGRvIHNldmVyYWwgdGhpbmdzIG9yCitub3RoaW5nLiAgSWYgeW91IGRvIG5vdGhpbmcsIHRoZSBzY3JlZW4gd2lsbCBjbGVhciBpbiAoZGVmYXVsdCkgNSBzZWMKK2FuZCBtb3JlIG91dHB1dCB3aWxsIGFwcGVhci4gIFlvdSBtYXkgaGl0IEVOVEVSIHdpdGggbm90aGluZyB0eXBlZCBpbgordGhlIGlucHV0IGFyZWEgdG8gdG9nZ2xlIGJldHdlZW4gIkxpbnV4IE1vcmUuLi4iIGFuZCAiTGludXggSG9sZGluZyIsCit3aGljaCBpbmRpY2F0ZXMgbm8gc2Nyb2xsaW5nIHdpbGwgb2NjdXIuICAoSWYgeW91IGhpdCBFTlRFUiB3aXRoICJMaW51eAorUnVubmluZyIgYW5kIG5vdGhpbmcgdHlwZWQsIHRoZSBhcHBsaWNhdGlvbiByZWNlaXZlcyBhIG5ld2xpbmUuKQorCitZb3UgbWF5IGNoYW5nZSB0aGUgc2Nyb2xsaW5nIHRpbWVvdXQgdmFsdWUuICBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZworY29tbWFuZCBsaW5lOgorCWVjaG8gc2Nyb2xsdGltZT02MCA+IC9wcm9jL3R0eS9kcml2ZXIvdHR5MzI3MAorY2hhbmdlcyB0aGUgc2Nyb2xsaW5nIHRpbWVvdXQgdmFsdWUgdG8gNjAgc2VjLiAgU2V0IHNjcm9sbHRpbWUgdG8gMCBpZgoreW91IHdpc2ggdG8gcHJldmVudCBzY3JvbGxpbmcgZW50aXJlbHkuCisKK090aGVyIHRoaW5ncyB5b3UgbWF5IGRvIHdoZW4gdGhlIGxvZyBhcmVhIGZpbGxzIHVwIGFyZTogIGhpdCBQQTIgdG8KK2NsZWFyIHRoZSBsb2cgYXJlYSBhbmQgd3JpdGUgbW9yZSBvdXRwdXQgdG8gaXQsIG9yIGhpdCBDTEVBUiB0byBjbGVhcgordGhlIGxvZyBhcmVhIGFuZCB0aGUgaW5wdXQgYXJlYSBhbmQgd3JpdGUgbW9yZSBvdXRwdXQgdG8gdGhlIGxvZyBhcmVhLgorCitTb21lIG9mIHRoZSBQcm9ncmFtIEZ1bmN0aW9uIChQRikgYW5kIFByb2dyYW0gQXR0ZW50aW9uIChQQSkga2V5cyBhcmUKK3ByZWFzc2lnbmVkIHNwZWNpYWwgZnVuY3Rpb25zLiAgVGhlIG9uZXMgdGhhdCBhcmUgbm90IHlpZWxkIGFuIGFsYXJtCit3aGVuIHByZXNzZWQuCisKK1BBMSBjYXVzZXMgYSBTSUdJTlQgdG8gdGhlIGN1cnJlbnRseSBydW5uaW5nIGFwcGxpY2F0aW9uLiAgWW91IG1heSBkbwordGhlIHNhbWUgdGhpbmcgZnJvbSB0aGUgaW5wdXQgYXJlYSwgYnkgdHlwaW5nICJeQyIgYW5kIGhpdHRpbmcgRU5URVIuCisKK1BBMiBjYXVzZXMgdGhlIGxvZyBhcmVhIHRvIGJlIGNsZWFyZWQuICBJZiBvdXRwdXQgYXdhaXRzLCBpdCBpcyB0aGVuCit3cml0dGVuIHRvIHRoZSBsb2cgYXJlYS4KKworUEYzIGNhdXNlcyBhbiBFT0YgdG8gYmUgcmVjZWl2ZWQgYXMgaW5wdXQgYnkgdGhlIGFwcGxpY2F0aW9uLiAgWW91IG1heQorY2F1c2UgYW4gRU9GIGFsc28gYnkgdHlwaW5nICJeRCIgYW5kIGhpdHRpbmcgRU5URVIuCisKK05vIFBGIGtleSBpcyBwcmVhc3NpZ25lZCB0byBjYXVzZSBhIGpvYiBzdXNwZW5zaW9uLCBidXQgeW91IG1heSBjYXVzZSBhCitqb2Igc3VzcGVuc2lvbiBieSB0eXBpbmcgIl5aIiBhbmQgaGl0dGluZyBFTlRFUi4gIFlvdSBtYXkgd2lzaCB0bworYXNzaWduIHRoaXMgZnVuY3Rpb24gdG8gYSBQRiBrZXkuICBUbyBtYWtlIFBGNyBjYXVzZSBqb2Igc3VzcGVuc2lvbiwKK2V4ZWN1dGUgdGhlIGNvbW1hbmQ6CisJZWNobyBwZjc9XnogPiAvcHJvYy90dHkvZHJpdmVyL3R0eTMyNzAKKworSWYgdGhlIGlucHV0IHlvdSB0eXBlIGRvZXMgbm90IGVuZCB3aXRoIHRoZSB0d28gY2hhcmFjdGVycyAiXm4iLCB0aGUKK2RyaXZlciBhcHBlbmRzIGEgbmV3bGluZSBjaGFyYWN0ZXIgYW5kIHNlbmRzIGl0IHRvIHRoZSB0dHkgZHJpdmVyOworb3RoZXJ3aXNlIHRoZSBkcml2ZXIgc3RyaXBzIHRoZSAiXm4iIGFuZCBkb2VzIG5vdCBhcHBlbmQgYSBuZXdsaW5lLgorVGhlIElCTSAzMjE1IGRyaXZlciBiZWhhdmVzIHNpbWlsYXJseS4KKworUGYxMCBjYXVzZXMgdGhlIG1vc3QgcmVjZW50IGNvbW1hbmQgdG8gYmUgcmV0cmlldmVkIGZyb20gdGhlIHR1YmUncworY29tbWFuZCBzdGFjayAoZGVmYXVsdCBkZXB0aCAyMCkgYW5kIGRpc3BsYXllZCBpbiB0aGUgaW5wdXQgYXJlYS4gIFlvdQorbWF5IGhpdCBQRjEwIGFnYWluIGZvciB0aGUgbmV4dC1tb3N0LXJlY2VudCBjb21tYW5kLCBhbmQgc28gb24uICBBCitjb21tYW5kIGlzIGVudGVyZWQgaW50byB0aGUgc3RhY2sgb25seSB3aGVuIHRoZSBpbnB1dCBhcmVhIGlzIG5vdCBtYWRlCitpbnZpc2libGUgKHN1Y2ggYXMgZm9yIHBhc3N3b3JkIGVudHJ5KSBhbmQgaXQgaXMgbm90IGlkZW50aWNhbCB0byB0aGUKK2N1cnJlbnQgdG9wIGVudHJ5LiAgUEYxMCByb3RhdGVzIGJhY2t3YXJkIHRocm91Z2ggdGhlIGNvbW1hbmQgc3RhY2s7CitQRjExIHJvdGF0ZXMgZm9yd2FyZC4gIFlvdSBtYXkgYXNzaWduIHRoZSBiYWNrd2FyZCBmdW5jdGlvbiB0byBhbnkgUEYKK2tleSAob3IgUEEga2V5LCBmb3IgdGhhdCBtYXR0ZXIpLCBzYXksIFBBMywgd2l0aCB0aGUgY29tbWFuZDoKKwllY2hvIC1lIHBhMz1cXDAzM2sgPiAvcHJvYy90dHkvZHJpdmVyL3R0eTMyNzAKK1RoaXMgYXNzaWducyB0aGUgc3RyaW5nIEVTQy1rIHRvIFBBMy4gIFNpbWlsYXJseSwgdGhlIHN0cmluZyBFU0MtagorcGVyZm9ybXMgdGhlIGZvcndhcmQgZnVuY3Rpb24uICAoUmF0aW9uYWxlOiAgSW4gYmFzaCB3aXRoIHZpLW1vZGUgbGluZQorZWRpdGluZywgRVNDLWsgYW5kIEVTQy1qIHJldHJpZXZlIGJhY2t3YXJkIGFuZCBmb3J3YXJkIGhpc3RvcnkuCitTdWdnZXN0aW9ucyB3ZWxjb21lLikKKworSXMgYSBzdGFjayBzaXplIG9mIHR3ZW50eSBjb21tYW5kcyBub3QgdG8geW91ciBsaWtpbmc/ICBDaGFuZ2UgaXQgb24KK3RoZSBmbHkuICBUbyBjaGFuZ2UgdG8gc2F2aW5nIHRoZSBsYXN0IDEwMCBjb21tYW5kcywgZXhlY3V0ZSB0aGUKK2NvbW1hbmQ6CisJZWNobyByZWNhbGxzaXplPTEwMCA+IC9wcm9jL3R0eS9kcml2ZXIvdHR5MzI3MAorCitIYXZlIGEgY29tbWFuZCB5b3UgaXNzdWUgZnJlcXVlbnRseT8gIEFzc2lnbiBpdCB0byBhIFBGIG9yIFBBIGtleSEgIFVzZQordGhlIGNvbW1hbmQKKwllY2hvIHBmMjQ9Im1rZGlyIGZvb2JhcjsgY2QgZm9vYmFyIiA+IC9wcm9jL3R0eS9kcml2ZXIvdHR5MzI3MCAKK3RvIGV4ZWN1dGUgdGhlIGNvbW1hbmRzIG1rZGlyIGZvb2JhciBhbmQgY2QgZm9vYmFyIGltbWVkaWF0ZWx5IHdoZW4geW91CitoaXQgUEYyNC4gIFdhbnQgdG8gc2VlIHRoZSBjb21tYW5kIGxpbmUgZmlyc3QsIGJlZm9yZSB5b3UgZXhlY3V0ZSBpdD8KK1VzZSB0aGUgLW4gb3B0aW9uIG9mIHRoZSBlY2hvIGNvbW1hbmQ6CisJZWNobyAtbiBwZjI0PSJta2RpciBmb287IGNkIGZvbyIgPiAvcHJvYy90dHkvZHJpdmVyL3R0eTMyNzAKKworCisKK0hhcHB5IHRlc3RpbmchICBJIHdlbGNvbWUgYW55IGFuZCBhbGwgY29tbWVudHMgYWJvdXQgdGhpcyBkb2N1bWVudCwgdGhlCitkcml2ZXIsIGV0YyBldGMuCisKK0RpY2sgSGl0dCA8cmJoMDBAdXRzZ2xvYmFsLmNvbT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vczM5MC9Db21tb25JTyBiL0RvY3VtZW50YXRpb24vczM5MC9Db21tb25JTwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODMxZDlhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zMzkwL0NvbW1vbklPCkBAIC0wLDAgKzEsMTA5IEBACitTLzM5MCBjb21tb24gSS9PLUxheWVyIC0gY29tbWFuZCBsaW5lIHBhcmFtZXRlcnMgYW5kIC9wcm9jIGVudHJpZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitDb21tYW5kIGxpbmUgcGFyYW1ldGVycworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBjaW9fbXNnID0geWVzIHwgbm8KKyAgCisgIERldGVybWluZXMgd2hldGhlciBpbmZvcm1hdGlvbiBvbiBmb3VuZCBkZXZpY2VzIGFuZCBzZW5zZWQgZGV2aWNlIAorICBjaGFyYWN0ZXJpc3RpY3Mgc2hvdWxkIGJlIHNob3duIGR1cmluZyBzdGFydHVwLCBpLiBlLiBtZXNzYWdlcyBvZiB0aGUgdHlwZXMgCisgICJEZXRlY3RlZCBkZXZpY2UgMC4wLjQ3MTEgb24gc3ViY2hhbm5lbCAwLjAuMDA0MiIgYW5kICJTZW5zZUlEOiBEZXZpY2UKKyAgMC4wLjQ3MTEgcmVwb3J0czogLi4uIi4KKworICBEZWZhdWx0IGlzIG9mZi4KKworCisqIGNpb19pZ25vcmUgPSB7YWxsfSB8CisJICAgICAgIHs8ZGV2aWNlPiB8IDxyYW5nZSBvZiBkZXZpY2VzPn0gfAorCSAgICAgICB7ITxkZXZpY2U+IHwgITxyYW5nZSBvZiBkZXZpY2VzPn0KKworICBUaGUgZ2l2ZW4gZGV2aWNlcyB3aWxsIGJlIGlnbm9yZWQgYnkgdGhlIGNvbW1vbiBJL08tbGF5ZXI7IG5vIGRldGVjdGlvbgorICBhbmQgZGV2aWNlIHNlbnNpbmcgd2lsbCBiZSBkb25lIG9uIGFueSBvZiB0aG9zZSBkZXZpY2VzLiBUaGUgc3ViY2hhbm5lbCB0byAKKyAgd2hpY2ggdGhlIGRldmljZSBpbiBxdWVzdGlvbiBpcyBhdHRhY2hlZCB3aWxsIGJlIHRyZWF0ZWQgYXMgaWYgbm8gZGV2aWNlIHdhcworICBhdHRhY2hlZC4KKworICBBbiBpZ25vcmVkIGRldmljZSBjYW4gYmUgdW4taWdub3JlZCBsYXRlcjsgc2VlIHRoZSAiL3Byb2MgZW50cmllcyItc2VjdGlvbiBmb3IKKyAgZGV0YWlscy4KKworICBUaGUgZGV2aWNlcyBtdXN0IGJlIGdpdmVuIGVpdGhlciBhcyBidXMgaWRzICgwLjAuYWJjZCkgb3IgYXMgaGV4YWRlY2ltYWwKKyAgZGV2aWNlIG51bWJlcnMgKDB4YWJjZCBvciBhYmNkLCBmb3IgMi40IGJhY2t3YXJkIGNvbXBhdGliaWxpdHkpLgorICBZb3UgY2FuIHVzZSB0aGUgJ2FsbCcga2V5d29yZCB0byBpZ25vcmUgYWxsIGRldmljZXMuCisgIFRoZSAnIScgb3BlcmF0b3Igd2lsbCBjYXVzZSB0aGUgSS9PLWxheWVyIHRvIF9ub3RfIGlnbm9yZSBhIGRldmljZS4KKyAgVGhlIG9yZGVyIG9uIHRoZSBjb21tYW5kIGxpbmUgaXMgbm90IGltcG9ydGFudC4KKworICBGb3IgZXhhbXBsZSwgCisJY2lvX2lnbm9yZT0wLjAuMDAyMy0wLjAuMDA0MiwwLjAuNDcxMQorICB3aWxsIGlnbm9yZSBhbGwgZGV2aWNlcyByYW5naW5nIGZyb20gMC4wLjAwMjMgdG8gMC4wLjAwNDIgYW5kIHRoZSBkZXZpY2UKKyAgMC4wLjQ3MTEsIGlmIGRldGVjdGVkLgorICBBcyBhbm90aGVyIGV4YW1wbGUsCisJY2lvX2lnbm9yZT1hbGwsITAuMC40NzExLCEwLjAuZmQwMC0wLjAuZmQwMgorICB3aWxsIGlnbm9yZSBhbGwgZGV2aWNlcyBidXQgMC4wLjQ3MTEsIDAuMC5mZDAwLCAwLjAuZmQwMSwgMC4wLmZkMDIuCisKKyAgQnkgZGVmYXVsdCwgbm8gZGV2aWNlcyBhcmUgaWdub3JlZC4KKworCisvcHJvYyBlbnRyaWVzCistLS0tLS0tLS0tLS0tCisKKyogL3Byb2MvY2lvX2lnbm9yZQorCisgIExpc3RzIHRoZSByYW5nZXMgb2YgZGV2aWNlcyAoYnkgYnVzIGlkKSB3aGljaCBhcmUgaWdub3JlZCBieSBjb21tb24gSS9PLgorCisgIFlvdSBjYW4gdW4taWdub3JlIGNlcnRhaW4gb3IgYWxsIGRldmljZXMgYnkgcGlwaW5nIHRvIC9wcm9jL2Npb19pZ25vcmUuIAorICAiZnJlZSBhbGwiIHdpbGwgdW4taWdub3JlIGFsbCBpZ25vcmVkIGRldmljZXMsIAorICAiZnJlZSA8ZGV2aWNlIHJhbmdlPiwgPGRldmljZSByYW5nZT4sIC4uLiIgd2lsbCB1bi1pZ25vcmUgdGhlIHNwZWNpZmllZAorICBkZXZpY2VzLgorCisgIEZvciBleGFtcGxlLCBpZiBkZXZpY2VzIDAuMC4wMDIzIHRvIDAuMC4wMDQyIGFuZCAwLjAuNDcxMSBhcmUgaWdub3JlZCwKKyAgLSBlY2hvIGZyZWUgMC4wLjAwMzAtMC4wLjAwMzIgPiAvcHJvYy9jaW9faWdub3JlCisgICAgd2lsbCB1bi1pZ25vcmUgZGV2aWNlcyAwLjAuMDAzMCB0byAwLjAuMDAzMiBhbmQgd2lsbCBsZWF2ZSBkZXZpY2VzIDAuMC4wMDIzCisgICAgdG8gMC4wLjAwMmYsIDAuMC4wMDMzIHRvIDAuMC4wMDQyIGFuZCAwLjAuNDcxMSBpZ25vcmVkOworICAtIGVjaG8gZnJlZSAwLjAuMDA0MSA+IC9wcm9jL2Npb19pZ25vcmUgd2lsbCBmdXJ0aGVybW9yZSB1bi1pZ25vcmUgZGV2aWNlCisgICAgMC4wLjAwNDE7CisgIC0gZWNobyBmcmVlIGFsbCA+IC9wcm9jL2Npb19pZ25vcmUgd2lsbCB1bi1pZ25vcmUgYWxsIHJlbWFpbmluZyBpZ25vcmVkIAorICAgIGRldmljZXMuCisKKyAgV2hlbiBhIGRldmljZSBpcyB1bi1pZ25vcmVkLCBkZXZpY2UgcmVjb2duaXRpb24gYW5kIHNlbnNpbmcgaXMgcGVyZm9ybWVkIGFuZCAKKyAgdGhlIGRldmljZSBkcml2ZXIgd2lsbCBiZSBub3RpZmllZCBpZiBwb3NzaWJsZSwgc28gdGhlIGRldmljZSB3aWxsIGJlY29tZQorICBhdmFpbGFibGUgdG8gdGhlIHN5c3RlbS4KKworICBZb3UgY2FuIGFsc28gYWRkIHJhbmdlcyBvZiBkZXZpY2VzIHRvIGJlIGlnbm9yZWQgYnkgcGlwaW5nIHRvIAorICAvcHJvYy9jaW9faWdub3JlOyAiYWRkIDxkZXZpY2UgcmFuZ2U+LCA8ZGV2aWNlIHJhbmdlPiwgLi4uIiB3aWxsIGlnbm9yZSB0aGUKKyAgc3BlY2lmaWVkIGRldmljZXMuCisKKyAgTm90ZTogQWxyZWFkeSBrbm93biBkZXZpY2VzIGNhbm5vdCBiZSBpZ25vcmVkLgorCisgIEZvciBleGFtcGxlLCBpZiBkZXZpY2UgMC4wLmFiY2QgaXMgYWxyZWFkeSBrbm93biBhbmQgYWxsIG90aGVyIGRldmljZXMKKyAgMC4wLmEwMDAtMC4wLmFmZmYgYXJlIG5vdCBrbm93biwKKwkiZWNobyBhZGQgMC4wLmEwMDAtMC4wLmFjY2MsIDAuMC5hZjAwLTAuMC5hZmZmID4gL3Byb2MvY2lvX2lnbm9yZSIKKyAgd2lsbCBhZGQgMC4wLmEwMDAtMC4wLmFiY2MsIDAuMC5hYmNlLTAuMC5hY2NjIGFuZCAwLjAuYWYwMC0wLjAuYWZmZiB0byB0aGUKKyAgbGlzdCBvZiBpZ25vcmVkIGRldmljZXMgYW5kIHNraXAgMC4wLmFiY2QuCisKKyAgVGhlIGRldmljZXMgY2FuIGJlIHNwZWNpZmllZCBlaXRoZXIgYnkgYnVzIGlkICgwLjAuYWJjZCkgb3IsIGZvciAyLjQgYmFja3dhcmQKKyAgY29tcGF0aWJpbHR5LCBieSB0aGUgZGV2aWNlIG51bWJlciBpbiBoZXhhZGVjaW1hbCAoMHhhYmNkIG9yIGFiY2QpLgorCisKKyogL3Byb2MvczM5MGRiZi9jaW9fKi8gKFMvMzkwIGRlYnVnIGZlYXR1cmUpCisKKyAgU29tZSB2aWV3cyBnZW5lcmF0ZWQgYnkgdGhlIGRlYnVnIGZlYXR1cmUgdG8gaG9sZCB2YXJpb3VzIGRlYnVnIG91dHB1dHMuCisKKyAgLSAvcHJvYy9zMzkwZGJmL2Npb19jcncvc3ByaW50ZgorICAgIE1lc3NhZ2VzIGZyb20gdGhlIHByb2Nlc3Npbmcgb2YgcGVuZGluZyBjaGFubmVsIHJlcG9ydCB3b3JkcyAobWFjaGluZSBjaGVjaworICAgIGhhbmRsaW5nKSwgd2hpY2ggd2lsbCBhbHNvIHNob3cgd2hlbiBDT05GSUdfREVCVUdfQ1JXIGlzIGRlZmluZWQuCisKKyAgLSAvcHJvYy9zMzkwZGJmL2Npb19tc2cvc3ByaW50ZgorICAgIFZhcmlvdXMgZGVidWcgbWVzc2FnZXMgZnJvbSB0aGUgY29tbW9uIEkvTy1sYXllcjsgZ2VuZXJhbGx5LCBtZXNzYWdlcyB3aGljaCAKKyAgICB3aWxsIGFsc28gc2hvdyB3aGVuIENPTkZJR19ERUJVR19JTyBpcyBkZWZpbmVkLgorCisgIC0gL3Byb2MvczM5MGRiZi9jaW9fdHJhY2UvaGV4X2FzY2lpCisgICAgTG9ncyB0aGUgY2FsbGluZyBvZiBmdW5jdGlvbnMgaW4gdGhlIGNvbW1vbiBJL08tbGF5ZXIgYW5kLCBpZiBhcHBsaWNhYmxlLCAKKyAgICB3aGljaCBzdWJjaGFubmVsIHRoZXkgd2VyZSBjYWxsZWQgZm9yLgorCisgIFRoZSBsZXZlbCBvZiBsb2dnaW5nIGNhbiBiZSBjaGFuZ2VkIHRvIGJlIG1vcmUgb3IgbGVzcyB2ZXJib3NlIGJ5IHBpcGluZyB0byAKKyAgL3Byb2MvczM5MGRiZi9jaW9fKi9sZXZlbCBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDY7IHNlZSB0aGUgZG9jdW1lbnRhdGlvbiBvbgorICB0aGUgUy8zOTAgZGVidWcgZmVhdHVyZSAoRG9jdW1lbnRhdGlvbi9zMzkwL3MzOTBkYmYudHh0KSBmb3IgZGV0YWlscy4KKworKiBGb3Igc29tZSBvZiB0aGUgaW5mb3JtYXRpb24gcHJlc2VudCBpbiB0aGUgL3Byb2MgZmlsZXN5c3RlbSBpbiAyLjQgKG5hbWVseSwKKyAgL3Byb2Mvc3ViY2hhbm5lbHMgYW5kIC9wcm9jL2NocGlkcyksIHNlZSBkcml2ZXItbW9kZWwudHh0LgorICBJbmZvcm1hdGlvbiBmb3JtZXJseSBpbiAvcHJvYy9pcnFfY291bnQgaXMgbm93IGluIC9wcm9jL2ludGVycnVwdHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3MzOTAvREFTRCBiL0RvY3VtZW50YXRpb24vczM5MC9EQVNECm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5NjNmMWUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3MzOTAvREFTRApAQCAtMCwwICsxLDczIEBACitEQVNEIGRldmljZSBkcml2ZXIKKworUy8zOTAncyBkaXNrIGRldmljZXMgKERBU0RzKSBhcmUgbWFuYWdlZCBieSBMaW51eCB2aWEgdGhlIERBU0QgZGV2aWNlCitkcml2ZXIuIEl0IGlzIHZhbGlkIGZvciBhbGwgdHlwZXMgb2YgREFTRHMgYW5kIHJlcHJlc2VudHMgdGhlbSB0bworTGludXggYXMgYmxvY2sgZGV2aWNlcywgbmFtZWx5ICJkZCIuIEN1cnJlbnRseSB0aGUgREFTRCBkcml2ZXIgdXNlcyBhCitzaW5nbGUgbWFqb3IgbnVtYmVyICgyNTQpIGFuZCA0IG1pbm9yIG51bWJlcnMgcGVyIHZvbHVtZSAoMSBmb3IgdGhlCitwaHlzaWNhbCB2b2x1bWUgYW5kIDMgZm9yIHBhcnRpdGlvbnMpLiBXaXRoIHJlc3BlY3QgdG8gcGFydGl0aW9ucyBzZWUKK2JlbG93LiBUaHVzIHlvdSBtYXkgaGF2ZSB1cCB0byA2NCBEQVNEIGRldmljZXMgaW4geW91ciBzeXN0ZW0uCisKK1RoZSBrZXJuZWwgcGFyYW1ldGVyICdkYXNkPWZyb20tdG8sLi4uJyBtYXkgYmUgaXNzdWVkIGFyYml0cmFyeSB0aW1lcworaW4gdGhlIGtlcm5lbCdzIHBhcmFtZXRlciBsaW5lIG9yIG5vdCBhdCBhbGwuIFRoZSAnZnJvbScgYW5kICd0bycKK3BhcmFtZXRlcnMgYXJlIHRvIGJlIGdpdmVuIGluIGhleGFkZWNpbWFsIG5vdGF0aW9uIHdpdGhvdXQgYSBsZWFkaW5nCisweC4KK0lmIHlvdSBzdXBwbHkga2VybmVsIHBhcmFtZXRlcnMgdGhlIGRpZmZlcmVudCBpbnN0YW5jZXMgYXJlIHByb2Nlc3NlZAoraW4gb3JkZXIgb2YgYXBwZWFyYW5jZSBhbmQgYSBtaW5vciBudW1iZXIgaXMgcmVzZXJ2ZWQgZm9yIGFueSBkZXZpY2UKK2NvdmVyZWQgYnkgdGhlIHN1cHBsaWVkIHJhbmdlIHVwIHRvIDY0IHZvbHVtZXMuIEFkZGl0aW9uYWwgREFTRHMgYXJlCitpZ25vcmVkLiBJZiB5b3UgZG8gbm90IHN1cHBseSB0aGUgJ2Rhc2Q9JyBrZXJuZWwgcGFyYW1ldGVyIGF0IGFsbCwgdGhlIAorREFTRCBkcml2ZXIgcmVnaXN0ZXJzIGFsbCBzdXBwb3J0ZWQgREFTRHMgb2YgeW91ciBzeXN0ZW0gdG8gYSBtaW5vcgorbnVtYmVyIGluIGFzY2VuZGluZyBvcmRlciBvZiB0aGUgc3ViY2hhbm5lbCBudW1iZXIuCisKK1RoZSBkcml2ZXIgY3VycmVudGx5IHN1cHBvcnRzIEVDS0QtZGV2aWNlcyBhbmQgdGhlcmUgYXJlIHN0dWJzIGZvcgorc3VwcG9ydCBvZiB0aGUgRkJBIGFuZCBDS0QgYXJjaGl0ZWN0dXJlcy4gRm9yIHRoZSBGQkEgYXJjaGl0ZWN0dXJlCitvbmx5IHNvbWUgc21hcnQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBtaXNzaW5nIHRvIG1ha2UgdGhlIHN1cHBvcnQKK2NvbXBsZXRlLiAKK1dlIHBlcmZvcm1lZCBvdXIgdGVzdGluZyBvbiAzMzgwIGFuZCAzMzkwIHR5cGUgZGlza3Mgb2YgZGlmZmVyZW50CitzaXplcywgdW5kZXIgVk0gYW5kIG9uIHRoZSBiYXJlIGhhcmR3YXJlIChMUEFSKSwgdXNpbmcgaW50ZXJuYWwgZGlza3MKK29mIHRoZSBtdWx0aXByaXNlIGFzIHdlbGwgYXMgYSBSQU1BQyB2aXJ0dWFsIGFycmF5LiBEaXNrcyBleHBvcnRlZCBieQorYW4gRW50ZXJwcmlzZSBTdG9yYWdlIFNlcnZlciAoU2Vhc2NhcGUpIHNob3VsZCB3b3JrIGZpbmUgYXMgd2VsbC4KKworV2UgY3VycmVudGx5IGltcGxlbWVudCBvbmUgcGFydGl0aW9uIHBlciB2b2x1bWUsIHdoaWNoIGlzIHRoZSB3aG9sZQordm9sdW1lLCBza2lwcGluZyB0aGUgZmlyc3QgYmxvY2tzIHVwIHRvIHRoZSB2b2x1bWUgbGFiZWwuIFRoZXNlIGFyZQorcmVzZXJ2ZWQgZm9yIElQTCByZWNvcmRzIGFuZCBJQk0ncyB2b2x1bWUgbGFiZWwgdG8gYXNzdXJlCithY2Nlc3NpYmlsaXR5IG9mIHRoZSBEQVNEIGZyb20gb3RoZXIgT1NzLiBJbiBhIGxhdGVyIHN0YWdlIHdlIHdpbGwKK3Byb3ZpZGUgc3VwcG9ydCBvZiBwYXJ0aXRpb25zLCBtYXliZSBWVE9DIG9yaWVudGVkIG9yIHVzaW5nIGEga2luZCBvZgorcGFydGl0aW9uIHRhYmxlIGluIHRoZSBsYWJlbCByZWNvcmQuCisKK1VTQUdFCisKKy1Mb3ctbGV2ZWwgZm9ybWF0ICg/Q0tEIG9ubHkpCitGb3IgdXNpbmcgYW4gRUNLRC1EQVNEIGFzIGEgTGludXggaGFyZGRpc2sgeW91IGhhdmUgdG8gbG93LWxldmVsCitmb3JtYXQgdGhlIHRyYWNrcyBieSBpc3N1aW5nIHRoZSBCTEtEQVNERk9STUFULWlvY3RsIG9uIHRoYXQKK2RldmljZS4gVGhpcyB3aWxsIGVyYXNlIGFueSBkYXRhIG9uIHRoYXQgdm9sdW1lIGluY2x1ZGluZyBJQk0gdm9sdW1lCitsYWJlbHMsIFZUT0NzIGV0Yy4gVGhlIGlvY3RsIG1heSB0YWtlIGEgJ3N0cnVjdCBmb3JtYXRfZGF0YSAqJyBvcgorJ05VTEwnIGFzIGFuIGFyZ3VtZW50LiAgCit0eXBlZGVmIHN0cnVjdCB7CisJaW50IHN0YXJ0X3VuaXQ7CisJaW50IHN0b3BfdW5pdDsKKwlpbnQgYmxrc2l6ZTsKK30gZm9ybWF0X2RhdGFfdDsKK1doZW4gYSBOVUxMIGFyZ3VtZW50IGlzIHBhc3NlZCB0byB0aGUgQkxLREFTREZPUk1BVCBpb2N0bCB0aGUgd2hvbGUKK2Rpc2sgaXMgZm9ybWF0dGVkIHRvIGEgYmxvY2tzaXplIG9mIDEwMjQgYnl0ZXMuIE90aGVyd2lzZSBzdGFydF91bml0CithbmQgc3RvcF91bml0IGFyZSB0aGUgZmlyc3QgYW5kIGxhc3QgdHJhY2sgdG8gYmUgZm9ybWF0dGVkLiBJZgorc3RvcF91bml0IGlzIC0xIGl0IGltcGxpZXMgdGhhdCB0aGUgREFTRCBpcyBmb3JtYXR0ZWQgZnJvbSBzdGFydF91bml0Cit1cCB0byB0aGUgbGFzdCB0cmFjay4gYmxrc2l6ZSBjYW4gYmUgYW55IHBvd2VyIG9mIHR3byBiZXR3ZWVuIDUxMiBhbmQKKzQwOTYuIFdlIHJlY29tbWVuZCBubyBibGtzaXplIGxvd2VyIHRoYW4gMTAyNCBiZWNhdXNlIHRoZSBleHQyZnMgdXNlcworMWtCIGJsb2NrcyBhbnl3YXkgYW5kIHlvdSBnYWluIGFwcHJveC4gNTAlIG9mIGNhcGFjaXR5IGluY3JlYXNpbmcgeW91cgorYmxrc2l6ZSBmcm9tIDUxMiBieXRlIHRvIDFrQi4KKworLU1ha2UgYSBmaWxlc3lzdGVtCitUaGVuIHlvdSBjYW4gbWs/P2ZzIHRoZSBmaWxlc3lzdGVtIG9mIHlvdXIgY2hvaWNlIG9uIHRoYXQgdm9sdW1lIG9yCitwYXJ0aXRpb24uIEZvciByZWFzb25zIG9mIHNhbml0eSB5b3Ugc2hvdWxkIGJ1aWxkIHlvdXIgZmlsZXN5c3RlbSBvbgordGhlIHBhcnRpdGlvbiAvZGV2L2RkPzEgaW5zdGVhZCBvZiB0aGUgd2hvbGUgdm9sdW1lLiBZb3Ugb25seSBsb3NlIDNrQgkKK2J1dCBtYXkgYmUgc3VyZSB0aGF0IHlvdSBjYW4gcmV1c2UgeW91ciBkYXRhIGFmdGVyIGludHJvZHVjdGlvbiBvZiBhCityZWFsIHBhcnRpdGlvbiB0YWJsZS4KKworQlVHUzoKKy0gUGVyZm9ybWFuY2Ugc29tZXRpbWVzIGlzIHJhdGhlciBsb3cgYmVjYXVzZSB3ZSBkb24ndCBmdWxseSBleHBsb2l0IGNsdXN0ZXJpbmcKKworVE9ETy1MaXN0OgorLSBBZGQgSUJNJ1MgRGlzayBsYXlvdXQgdG8gZ2VuaGQKKy0gRW5oYW5jZSBkcml2ZXIgdG8gdXNlIG1vcmUgdGhhbiBvbmUgbWFqb3IgbnVtYmVyCistIEVuYWJsZSB1c2FnZSBhcyBhIG1vZHVsZQorLSBTdXBwb3J0IENhY2hlIGZhc3Qgd3JpdGUgYW5kIERBU0QgZmFzdCB3cml0ZSAoRUNLRCkKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vczM5MC9EZWJ1Z2dpbmczOTAudHh0IGIvRG9jdW1lbnRhdGlvbi9zMzkwL0RlYnVnZ2luZzM5MC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRiZmU2MgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vczM5MC9EZWJ1Z2dpbmczOTAudHh0CkBAIC0wLDAgKzEsMjUzNiBAQAorICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRGVidWdnaW5nIG9uIExpbnV4IGZvciBzLzM5MCAmIHovQXJjaGl0ZWN0dXJlCisJCQkgICAgICAgICAgICAgICBieQorCQlEZW5pcyBKb3NlcGggQmFycm93IChkamJhcnJvd0BkZS5pYm0uY29tLGJhcnJvd19kakB5YWhvby5jb20pCisJCUNvcHlyaWdodCAoQykgMjAwMC0yMDAxIElCTSBEZXV0c2NobGFuZCBFbnR3aWNrbHVuZyBHbWJILCBJQk0gQ29ycG9yYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJlc3Qgdmlld2VkIHdpdGggZml4ZWQgd2lkdGggZm9udHMgCisKK092ZXJ2aWV3IG9mIERvY3VtZW50OgorPT09PT09PT09PT09PT09PT09PT09CitUaGlzIGRvY3VtZW50IGlzIGludGVuZGVkIHRvIGdpdmUgYW4gZ29vZCBvdmVydmlldyBvZiBob3cgdG8gZGVidWcgCitMaW51eCBmb3Igcy8zOTAgJiB6L0FyY2hpdGVjdHVyZSBpdCBpc24ndCBpbnRlbmRlZCBhcyBhIGNvbXBsZXRlIHJlZmVyZW5jZSAmIG5vdCBhCit0dXRvcmlhbCBvbiB0aGUgZnVuZGFtZW50YWxzIG9mIEMgJiBhc3NlbWJseSwgaXQgZG9zZW4ndCBnbyBpbnRvCiszOTAgSU8gaW4gYW55IGRldGFpbC4gSXQgaXMgaW50ZW5kZWQgdG8gY29tcGxlbWVudCB0aGUgZG9jdW1lbnRzIGluIHRoZQorcmVmZXJlbmNlIHNlY3Rpb24gYmVsb3cgJiBhbnkgb3RoZXIgd29ydGh3aGlsZSByZWZlcmVuY2VzIHlvdSBnZXQuCisKK0l0IGlzIGludGVuZGVkIGxpa2UgdGhlIEVudGVycHJpc2UgU3lzdGVtcyBBcmNoaXRlY3R1cmUvMzkwIFJlZmVyZW5jZSBTdW1tYXJ5Cit0byBiZSBwcmludGVkIG91dCAmIHVzZWQgYXMgYSBxdWljayBjaGVhdCBzaGVldCBzZWxmIGhlbHAgc3R5bGUgcmVmZXJlbmNlIHdoZW4KK3Byb2JsZW1zIG9jY3VyLgorCitDb250ZW50cworPT09PT09PT0KK1JlZ2lzdGVyIFNldAorQWRkcmVzcyBTcGFjZXMgb24gSW50ZWwgTGludXgKK0FkZHJlc3MgU3BhY2VzIG9uIExpbnV4IGZvciBzLzM5MCAmIHovQXJjaGl0ZWN0dXJlCitUaGUgTGludXggZm9yIHMvMzkwICYgei9BcmNoaXRlY3R1cmUgS2VybmVsIFRhc2sgU3RydWN0dXJlCitSZWdpc3RlciBVc2FnZSAmIFN0YWNrZnJhbWVzIG9uIExpbnV4IGZvciBzLzM5MCAmIHovQXJjaGl0ZWN0dXJlCitBIHNhbXBsZSBwcm9ncmFtIHdpdGggY29tbWVudHMKK0NvbXBpbGluZyBwcm9ncmFtcyBmb3IgZGVidWdnaW5nIG9uIExpbnV4IGZvciBzLzM5MCAmIHovQXJjaGl0ZWN0dXJlCitGaWd1cmluZyBvdXQgZ2NjIGNvbXBpbGUgZXJyb3JzCitEZWJ1Z2dpbmcgVG9vbHMKK29iamR1bXAKK3N0cmFjZQorUGVyZm9ybWFuY2UgRGVidWdnaW5nIAorRGVidWdnaW5nIHVuZGVyIFZNCitzLzM5MCAmIHovQXJjaGl0ZWN0dXJlIElPIE92ZXJ2aWV3CitEZWJ1Z2dpbmcgSU8gb24gcy8zOTAgJiB6L0FyY2hpdGVjdHVyZSB1bmRlciBWTQorR0RCIG9uIHMvMzkwICYgei9BcmNoaXRlY3R1cmUKK1N0YWNrIGNoYWluaW5nIGluIGdkYiBieSBoYW5kCitFeGFtaW5pbmcgY29yZSBkdW1wcworbGRkCitEZWJ1Z2dpbmcgbW9kdWxlcworVGhlIHByb2MgZmlsZSBzeXN0ZW0KK1N0YXJ0aW5nIHBvaW50cyBmb3IgZGVidWdnaW5nIHNjcmlwdGluZyBsYW5ndWFnZXMgZXRjLgorRHVtcHRvb2wgJiBMY3Jhc2gKK1N5c1JxCitSZWZlcmVuY2VzCitTcGVjaWFsIFRoYW5rcworCitSZWdpc3RlciBTZXQKKz09PT09PT09PT09PQorVGhlIGN1cnJlbnQgYXJjaGl0ZWN0dXJlcyBoYXZlIHRoZSBmb2xsb3dpbmcgcmVnaXN0ZXJzLgorIAorMTYgIEdlbmVyYWwgcHJvcG9zZSByZWdpc3RlcnMsIDMyIGJpdCBvbiBzLzM5MCA2NCBiaXQgb24gei9BcmNoaXRlY3R1cmUsIHIwLXIxNSBvciBncHIwLWdwcjE1IHVzZWQgZm9yIGFyaXRobWV0aWMgJiBhZGRyZXNzaW5nLiAKKworMTYgQ29udHJvbCByZWdpc3RlcnMsIDMyIGJpdCBvbiBzLzM5MCA2NCBiaXQgb24gei9BcmNoaXRlY3R1cmUsICggY3IwLWNyMTUga2VybmVsIHVzYWdlIG9ubHkgKSB1c2VkIGZvciBtZW1vcnkgbWFuYWdlbWVudCwKK2ludGVycnVwdCBjb250cm9sLGRlYnVnZ2luZyBjb250cm9sIGV0Yy4KKworMTYgQWNjZXNzIHJlZ2lzdGVycyAoIGFyMC1hcjE1ICkgMzIgYml0IG9uIHMvMzkwICYgei9BcmNoaXRlY3R1cmUKK25vdCB1c2VkIGJ5IG5vcm1hbCBwcm9ncmFtcyBidXQgcG90ZW50aWFsbHkgY291bGQgCitiZSB1c2VkIGFzIHRlbXBvcmFyeSBzdG9yYWdlLiBUaGVpciBtYWluIHB1cnBvc2UgaXMgdGhlaXIgMSB0byAxCithc3NvY2lhdGlvbiB3aXRoIGdlbmVyYWwgcHVycG9zZSByZWdpc3RlcnMgYW5kIGFyZSB1c2VkIGluCit0aGUga2VybmVsIGZvciBjb3B5aW5nIGRhdGEgYmV0d2VlbiBrZXJuZWwgJiB1c2VyIGFkZHJlc3Mgc3BhY2VzLgorQWNjZXNzIHJlZ2lzdGVyIDAgKCAmIGFjY2VzcyByZWdpc3RlciAxIG9uIHovQXJjaGl0ZWN0dXJlICggbmVlZHMgNjQgYml0IAorcG9pbnRlciApICkgaXMgY3VycmVudGx5IHVzZWQgYnkgdGhlIHB0aHJlYWQgbGlicmFyeSBhcyBhIHBvaW50ZXIgdG8KK3RoZSBjdXJyZW50IHJ1bm5pbmcgdGhyZWFkcyBwcml2YXRlIGFyZWEuCisKKzE2IDY0IGJpdCBmbG9hdGluZyBwb2ludCByZWdpc3RlcnMgKGZwMC1mcDE1ICkgSUVFRSAmIEhGUCBmbG9hdGluZyAKK3BvaW50IGZvcm1hdCBjb21wbGlhbnQgb24gRzUgdXB3YXJkcyAmIGEgRmxvYXRpbmcgcG9pbnQgY29udHJvbCByZWcgKEZQQykgCis0ICA2NCBiaXQgcmVnaXN0ZXJzIChmcDAsZnAyLGZwNCAmIGZwNikgSEZQIG9ubHkgb24gb2xkZXIgbWFjaGluZXMuCitOb3RlOgorTGludXggKGN1cnJlbnRseSkgYWx3YXlzIHVzZXMgSUVFRSAmIGVtdWxhdGVzIEc1IElFRUUgZm9ybWF0IG9uIG9sZGVyIG1hY2hpbmVzLAorKCBwcm92aWRlZCB0aGUga2VybmVsIGlzIGNvbmZpZ3VyZWQgZm9yIHRoaXMgKS4KKworCitUaGUgUFNXIGlzIHRoZSBtb3N0IGltcG9ydGFudCByZWdpc3RlciBvbiB0aGUgbWFjaGluZSBpdAoraXMgNjQgYml0IG9uIHMvMzkwICYgMTI4IGJpdCBvbiB6L0FyY2hpdGVjdHVyZSAmIHNlcnZlcyB0aGUgcm9sZXMgb2YgCithIHByb2dyYW0gY291bnRlciAocGMpLCBjb25kaXRpb24gY29kZSByZWdpc3RlcixtZW1vcnkgc3BhY2UgZGVzaWduYXRvci4KK0luIElCTSBzdGFuZGFyZCBub3RhdGlvbiBJIGFtIGNvdW50aW5nIGJpdCAwIGFzIHRoZSBNU0IuCitJdCBoYXMgc2V2ZXJhbCBhZHZhbnRhZ2VzIG92ZXIgYSBub3JtYWwgcHJvZ3JhbSBjb3VudGVyCitpbiB0aGF0IHlvdSBjYW4gY2hhbmdlIGFkZHJlc3MgdHJhbnNsYXRpb24gJiBwcm9ncmFtIGNvdW50ZXIgCitpbiBhIHNpbmdsZSBpbnN0cnVjdGlvbi4gVG8gY2hhbmdlIGFkZHJlc3MgdHJhbnNsYXRpb24sCitlLmcuIHN3aXRjaGluZyBhZGRyZXNzIHRyYW5zbGF0aW9uIG9mZiByZXF1aXJlcyB0aGF0IHlvdQoraGF2ZSBhIGxvZ2ljYWw9cGh5c2ljYWwgbWFwcGluZyBmb3IgdGhlIGFkZHJlc3MgeW91IGFyZQorY3VycmVudGx5IHJ1bm5pbmcgYXQuCisKKyAgICAgIEJpdCAgICAgICAgICAgVmFsdWUKK3MvMzkwIHovQXJjaGl0ZWN0dXJlCiswICAgICAgIDAgICAgIFJlc2VydmVkICggbXVzdCBiZSAwICkgb3RoZXJ3aXNlIHNwZWNpZmljYXRpb24gZXhjZXB0aW9uIG9jY3Vycy4KKworMSAgICAgICAxICAgICBQcm9ncmFtIEV2ZW50IFJlY29yZGluZyAxIFBFUiBlbmFibGVkLCAKKwkgICAgICBQRVIgaXMgdXNlZCB0byBmYWNpbGl0aXRhdGUgZGVidWdnaW5nIGUuZy4gc2luZ2xlIHN0ZXBwaW5nLgorCisyLTQgICAgMi00ICAgIFJlc2VydmVkICggbXVzdCBiZSAwICkuIAorCis1ICAgICAgIDUgICAgIER5bmFtaWMgYWRkcmVzcyB0cmFuc2xhdGlvbiAxPURBVCBvbi4KKworNiAgICAgICA2ICAgICBJbnB1dC9PdXRwdXQgaW50ZXJydXB0IE1hc2sKKworNyAgICAgICA3ICAgICBFeHRlcm5hbCBpbnRlcnJ1cHQgTWFzayB1c2VkIHByaW1hcmlseSBmb3IgaW50ZXJwcm9jZXNzb3Igc2lnbmFsbGluZyAmIAorCSAgICAgIGNsb2NrIGludGVycnVwdHMuCisKKzgtMTEgIDgtMTEgICAgUFNXIEtleSB1c2VkIGZvciBjb21wbGV4IG1lbW9yeSBwcm90ZWN0aW9uIG1lY2hhbmlzbSBub3QgdXNlZCB1bmRlciBsaW51eAorCisxMiAgICAgIDEyICAgIDEgb24gcy8zOTAgMCBvbiB6L0FyY2hpdGVjdHVyZQorCisxMyAgICAgIDEzICAgIE1hY2hpbmUgQ2hlY2sgTWFzayAxPWVuYWJsZSBtYWNoaW5lIGNoZWNrIGludGVycnVwdHMKKworMTQgICAgICAxNCAgICBXYWl0IFN0YXRlIHNldCB0aGlzIHRvIDEgdG8gc3RvcCB0aGUgcHJvY2Vzc29yIGV4Y2VwdCBmb3IgaW50ZXJydXB0cyAmIGdpdmUgCisJICAgICAgdGltZSB0byBvdGhlciBMUEFSUyB1c2VkIGluIENQVSBpZGxlIGluIHRoZSBrZXJuZWwgdG8gaW5jcmVhc2Ugb3ZlcmFsbCAKKwkgICAgICB1c2FnZSBvZiBwcm9jZXNzb3IgcmVzb3VyY2VzLgorCisxNSAgICAgIDE1ICAgIFByb2JsZW0gc3RhdGUgKCBpZiBzZXQgdG8gMSBjZXJ0YWluIGluc3RydWN0aW9ucyBhcmUgZGlzYWJsZWQgKQorCSAgICAgIGFsbCBsaW51eCB1c2VyIHByb2dyYW1zIHJ1biB3aXRoIHRoaXMgYml0IDEgCisJICAgICAgKCB1c2VmdWwgaW5mbyBmb3IgZGVidWdnaW5nIHVuZGVyIFZNICkuCisKKzE2LTE3IDE2LTE3ICAgQWRkcmVzcyBTcGFjZSBDb250cm9sCisKKwkgICAgICAwMCBQcmltYXJ5IFNwYWNlIE1vZGUgd2hlbiBEQVQgb24KKwkgICAgICBUaGUgbGludXgga2VybmVsIGN1cnJlbnRseSBydW5zIGluIHRoaXMgbW9kZSwgQ1IxIGlzIGFmZmlsaWF0ZWQgd2l0aCAKKyAgICAgICAgICAgICAgdGhpcyBtb2RlICYgcG9pbnRzIHRvIHRoZSBwcmltYXJ5IHNlZ21lbnQgdGFibGUgb3JpZ2luIGV0Yy4KKworCSAgICAgIDAxIEFjY2VzcyByZWdpc3RlciBtb2RlIHRoaXMgbW9kZSBpcyB1c2VkIGluIGZ1bmN0aW9ucyB0byAKKwkgICAgICBjb3B5IGRhdGEgYmV0d2VlbiBrZXJuZWwgJiB1c2VyIHNwYWNlLgorCisJICAgICAgMTAgU2Vjb25kYXJ5IHNwYWNlIG1vZGUgbm90IHVzZWQgaW4gbGludXggaG93ZXZlciBDUjcgdGhlCisJICAgICAgcmVnaXN0ZXIgYWZmaWxpYXRlZCB3aXRoIHRoaXMgbW9kZSBpcyAmIHRoaXMgJiBub3JtYWxseQorCSAgICAgIENSMTM9Q1I3IHRvIGFsbG93IHVzIHRvIGNvcHkgZGF0YSBiZXR3ZWVuIGtlcm5lbCAmIHVzZXIgc3BhY2UuCisJICAgICAgV2UgZG8gdGhpcyBhcyBmb2xsb3dzOgorCSAgICAgIFdlIHNldCBhcjIgdG8gMCB0byBkZXNpZ25hdGUgaXRzCisJICAgICAgYWZmaWxpYXRlZCBncHIgKCBncHIyICl0byBwb2ludCB0byBwcmltYXJ5PWtlcm5lbCBzcGFjZS4KKwkgICAgICBXZSBzZXQgYXI0IHRvIDEgdG8gZGVzaWduYXRlIGl0cworCSAgICAgIGFmZmlsaWF0ZWQgZ3ByICggZ3ByNCApIHRvIHBvaW50IHRvIHNlY29uZGFyeT1ob21lPXVzZXIgc3BhY2UKKwkgICAgICAmIHRoZW4gZXNzZW50aWFsbHkgZG8gYSBtZW1jb3B5KGdwcjIsZ3ByNCxzaXplKSB0bworCSAgICAgIGNvcHkgZGF0YSBiZXR3ZWVuIHRoZSBhZGRyZXNzIHNwYWNlcywgdGhlIHJlYXNvbiB3ZSB1c2UgaG9tZSBzcGFjZSBmb3IgdGhlCisJICAgICAga2VybmVsICYgZG9uJ3Qga2VlcCBzZWNvbmRhcnkgc3BhY2UgZnJlZSBpcyB0aGF0IGNvZGUgd2lsbCBub3QgcnVuIGluIAorCSAgICAgIHNlY29uZGFyeSBzcGFjZS4KKworCSAgICAgIDExIEhvbWUgU3BhY2UgTW9kZSBhbGwgdXNlciBwcm9ncmFtcyBydW4gaW4gdGhpcyBtb2RlLgorCSAgICAgIGl0IGlzIGFmZmlsaWF0ZWQgd2l0aCBDUjEzLgorCisxOC0xOSAxOC0xOSAgIENvbmRpdGlvbiBjb2RlcyAoQ0MpCisKKzIwICAgIDIwICAgICAgRml4ZWQgcG9pbnQgb3ZlcmZsb3cgbWFzayBpZiAxPUZQVSBleGNlcHRpb25zIGZvciB0aGlzIGV2ZW50IAorICAgICAgICAgICAgICBvY2N1ciAoIG5vcm1hbGx5IDAgKSAKKworMjEgICAgMjEgICAgICBEZWNpbWFsIG92ZXJmbG93IG1hc2sgaWYgMT1GUFUgZXhjZXB0aW9ucyBmb3IgdGhpcyBldmVudCBvY2N1ciAKKyAgICAgICAgICAgICAgKCBub3JtYWxseSAwICkKKworMjIgICAgMjIgICAgICBFeHBvbmVudCB1bmRlcmZsb3cgbWFzayBpZiAxPUZQVSBleGNlcHRpb25zIGZvciB0aGlzIGV2ZW50IG9jY3VyIAorICAgICAgICAgICAgICAoIG5vcm1hbGx5IDAgKQorCisyMyAgICAyMyAgICAgIFNpZ25pZmljYW5jZSBNYXNrIGlmIDE9RlBVIGV4Y2VwdGlvbnMgZm9yIHRoaXMgZXZlbnQgb2NjdXIgCisgICAgICAgICAgICAgICggbm9ybWFsbHkgMCApCisKKzI0LTMxIDI0LTMwICAgUmVzZXJ2ZWQgTXVzdCBiZSAwLgorCisgICAgICAzMSAgICAgIEV4dGVuZGVkIEFkZHJlc3NpbmcgTW9kZQorICAgICAgMzIgICAgICBCYXNpYyBBZGRyZXNzaW5nIE1vZGUKKyAgICAgICAgICAgICAgVXNlZCB0byBzZXQgYWRkcmVzc2luZyBtb2RlCisJICAgICAgUFNXIDMxICAgUFNXIDMyCisgICAgICAgICAgICAgICAgMCAgICAgICAgIDAgICAgICAgIDI0IGJpdAorICAgICAgICAgICAgICAgIDAgICAgICAgICAxICAgICAgICAzMSBiaXQKKyAgICAgICAgICAgICAgICAxICAgICAgICAgMSAgICAgICAgNjQgYml0CisKKzMyICAgICAgICAgICAgIDE9MzEgYml0IGFkZHJlc3NpbmcgbW9kZSAwPTI0IGJpdCBhZGRyZXNzaW5nIG1vZGUgKGZvciBiYWNrd2FyZCAKKyAgICAgICAgICAgICAgIGNvbXBhdGliaWxpdHkgKSwgbGludXggYWx3YXlzIHJ1bnMgd2l0aCB0aGlzIGJpdCBzZXQgdG8gMQorCiszMy02NCAgICAgICAgICBJbnN0cnVjdGlvbiBhZGRyZXNzLgorICAgICAgMzMtNjMgICAgUmVzZXJ2ZWQgbXVzdCBiZSAwCisgICAgICA2NC0xMjcgICBBZGRyZXNzCisgICAgICAgICAgICAgICBJbiAyNCBiaXRzIG1vZGUgYml0cyA2NC0xMDM9MCBiaXRzIDEwNC0xMjcgQWRkcmVzcyAKKyAgICAgICAgICAgICAgIEluIDMxIGJpdHMgbW9kZSBiaXRzIDY0LTk2PTAgYml0cyA5Ny0xMjcgQWRkcmVzcworICAgICAgICAgICAgICAgTm90ZTogdW5saWtlIDMxIGJpdCBtb2RlIG9uIHMvMzkwIGJpdCA5NiBtdXN0IGJlIHplcm8KKwkgICAgICAgd2hlbiBsb2FkaW5nIHRoZSBhZGRyZXNzIHdpdGggTFBTV0Ugb3RoZXJ3aXNlIGEgCisgICAgICAgICAgICAgICBzcGVjaWZpY2F0aW9uIGV4Y2VwdGlvbiBvY2N1cnMsIExQU1cgaXMgZnVsbHkgYmFja3dhcmQKKyAgICAgICAgICAgICAgIGNvbXBhdGlibGUuCisgCSAgCisJICAKK1ByZWZpeCBQYWdlKHMpCistLS0tLS0tLS0tLS0tLQkgIAorVGhpcyBwZXIgY3B1IG1lbW9yeSBhcmVhIGlzIHRvbyBpbnRpbWF0ZWx5IHRpZWQgdG8gdGhlIHByb2Nlc3NvciBub3QgdG8gbWVudGlvbi4KK0l0IGV4aXN0cyBiZXR3ZWVuIHRoZSByZWFsIGFkZHJlc3NlcyAwLTQwOTYgb24gcy8zOTAgJiAwLTgxOTIgei9BcmNoaXRlY3R1cmUgJiBpcyBleGNoYW5nZWQgCit3aXRoIGEgMSBwYWdlIG9uIHMvMzkwIG9yIDIgcGFnZXMgb24gei9BcmNoaXRlY3R1cmUgaW4gYWJzb2x1dGUgc3RvcmFnZSBieSB0aGUgc2V0IAorcHJlZml4IGluc3RydWN0aW9uIGluIGxpbnV4J2VzIHN0YXJ0dXAuIAorVGhpcyBwYWdlIGlzIG1hcHBlZCB0byBhIGRpZmZlcmVudCBwcmVmaXggZm9yIGVhY2ggcHJvY2Vzc29yIGluIGFuIFNNUCBjb25maWd1cmF0aW9uCisoIGFzc3VtaW5nIHRoZSBvcyBkZXNpZ25lciBpcyBzYW5lIG9mIGNvdXJzZSA6LSkgKS4KK0J5dGVzIDAtNTEyICggMjAwIGhleCApIG9uIHMvMzkwICYgMC01MTIsNDA5Ni00NTQ0LDQ2MDQtNTExOSBjdXJyZW50bHkgb24gei9BcmNoaXRlY3R1cmUgCithcmUgdXNlZCBieSB0aGUgcHJvY2Vzc29yIGl0c2VsZiBmb3IgaG9sZGluZyBzdWNoIGluZm9ybWF0aW9uIGFzIGV4Y2VwdGlvbiBpbmRpY2F0aW9ucyAmIAorZW50cnkgcG9pbnRzIGZvciBleGNlcHRpb25zLgorQnl0ZXMgYWZ0ZXIgMHhjMDAgaGV4IGFyZSB1c2VkIGJ5IGxpbnV4IGZvciBwZXIgcHJvY2Vzc29yIGdsb2JhbHMgb24gcy8zOTAgJiB6L0FyY2hpdGVjdHVyZSAKKyggdGhlcmUgaXMgYSBnYXAgb24gei9BcmNoaXRlY3VyZSB0b28gY3VycmVudGx5IGJldHdlZW4gMHhjMDAgJiAxMDAwIHdoaWNoIGxpbnV4IHVzZXMgKS4KK1RoZSBjbG9zZXN0IHRoaW5nIHRvIHRoaXMgb24gdHJhZGl0aW9uYWwgYXJjaGl0ZWN0dXJlcyBpcyB0aGUgaW50ZXJydXB0Cit2ZWN0b3IgdGFibGUuIFRoaXMgaXMgYSBnb29kIHRoaW5nICYgZG9lcyBzaW1wbGlmeSBzb21lIG9mIHRoZSBrZXJuZWwgY29kaW5nCitob3dldmVyIGl0IG1lYW5zIHRoYXQgd2Ugbm93IGNhbm5vdCBjYXRjaCBzdHJheSBOVUxMIHBvaW50ZXJzIGluIHRoZQora2VybmVsIHdpdGhvdXQgaGFyZCBjb2RlZCBjaGVja3MuCisKKworCitBZGRyZXNzIFNwYWNlcyBvbiBJbnRlbCBMaW51eAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIHRyYWRpdGlvbmFsIEludGVsIExpbnV4IGlzIGFwcHJveGltYXRlbHkgbWFwcGVkIGFzIGZvbGxvd3MgZm9yZ2l2ZQordGhlIGFzY2lpIGFydC4KKzB4RkZGRkZGRkYgNEdCIEhpbWVtICAgICAgICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKioKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBLZXJuZWwgU3BhY2UgICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKiogICAgICAgICAgKioqKioqKioqKioqKioqKgorVXNlciBTcGFjZSBIaW1lbSAodHlwaWNhbGx5IDB4QzAwMDAwMDAgM0dCICkqICBVc2VyIFN0YWNrICAgKiAgICAgICAgICAqICAgICAgICAgICAgICAqCisJCQkJICAgICAgICAgICAgKioqKioqKioqKioqKioqKiogICAgICAgICAgKiAgICAgICAgICAgICAgKgorCQkJCQkgICAgKiAgU2hhcmVkIExpYnMgICogICAgICAgICAgKiBOZXh0IFByb2Nlc3MgKiAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKioqKioqKioqKioqKiogICAgICAgICAgKiAgICAgdG8gICAgICAgKiAgCisJCQkJCSAgICAqICAgICAgICAgICAgICAgKiAgICA8PT0gICAqICAgICBSdW4gICAgICAqICA8PT0KKwkJCQkJICAgICogIFVzZXIgUHJvZ3JhbSAqICAgICAgICAgICogICAgICAgICAgICAgICoKKwkJCQkJICAgICogICBEYXRhIEJTUyAgICAqICAgICAgICAgICogICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgkgVGV4dCAgICAgICAqICAgICAgICAgICogICAgICAgICAgICAgICoKKyAgICAgICAgIAkJCSAgICAgICAgICAgICogICBTZWN0aW9ucyAgICAqICAgICAgICAgICogICAgICAgICAgICAgICoKKzB4MDAwMDAwMDAgICAgICAgICAJCQkgICAgKioqKioqKioqKioqKioqKiogICAgICAgICAgKioqKioqKioqKioqKioqKgorCitOb3cgaXQgaXMgZWFzeSB0byBzZWUgdGhhdCBvbiBJbnRlbCBpdCBpcyBxdWl0ZSBlYXN5IHRvIHJlY29nbmlzZSBhIGtlcm5lbCBhZGRyZXNzIAorYXMgYmVpbmcgb25lIGdyZWF0ZXIgdGhhbiB1c2VyIHNwYWNlIGhpbWVtICggaW4gdGhpcyBjYXNlIDB4QzAwMDAwMDApLgorJiBhZGRyZXNzZXMgb2YgbGVzcyB0aGFuIHRoaXMgYXJlIHRoZSBvbmVzIGluIHRoZSBjdXJyZW50IHJ1bm5pbmcgcHJvZ3JhbSBvbiB0aGlzCitwcm9jZXNzb3IgKCBpZiBhbiBzbXAgYm94ICkuCitJZiB1c2luZyB0aGUgdmlydHVhbCBtYWNoaW5lICggVk0gKSBhcyBhIGRlYnVnZ2VyIGl0IGlzIHF1aXRlIGRpZmZpY3VsdCB0bwora25vdyB3aGljaCB1c2VyIHByb2Nlc3MgaXMgcnVubmluZyBhcyB0aGUgYWRkcmVzcyBzcGFjZSB5b3UgYXJlIGxvb2tpbmcgYXQKK2NvdWxkIGJlIGZyb20gYW55IHByb2Nlc3MgaW4gdGhlIHJ1biBxdWV1ZS4KKworVGhlIGxpbWl0YXRpb24gb2YgSW50ZWxzIGFkZHJlc3NpbmcgdGVjaG5pcXVlIGlzIHRoYXQgdGhlIGxpbnV4CitrZXJuZWwgdXNlcyBhIHZlcnkgc2ltcGxlIHJlYWwgYWRkcmVzcyB0byB2aXJ0dWFsIGFkZHJlc3NpbmcgdGVjaG5pcXVlCitvZiBSZWFsIEFkZHJlc3M9VmlydHVhbCBBZGRyZXNzLVVzZXIgU3BhY2UgSGltZW0uCitUaGlzIG1lYW5zIHRoYXQgb24gSW50ZWwgdGhlIGtlcm5lbCBsaW51eCBjYW4gdHlwaWNhbGx5IG9ubHkgYWRkcmVzcworSGltZW09MHhGRkZGRkZGRi0weEMwMDAwMDAwPTFHQiAmIHRoaXMgaXMgYWxsIHRoZSBSQU0gdGhlc2UgbWFjaGluZXMKK2NhbiB0eXBpY2FsbHkgdXNlLgorVGhleSBjYW4gbG93ZXIgVXNlciBIaW1lbSB0byAyR0Igb3IgbG93ZXIgJiB0aHVzIGJlCithYmxlIHRvIHVzZSAyR0Igb2YgUkFNIGhvd2V2ZXIgdGhpcyBzaHJpbmtzIHRoZSBtYXhpbXVtIHNpemUKK29mIFVzZXIgU3BhY2UgZnJvbSAzR0IgdG8gMkdCIHRoZXkgaGF2ZSBhIG5vIHdpbiBsaW1pdCBvZiA0R0IgdW5sZXNzCit0aGV5IGdvIHRvIDY0IEJpdC4KKworCitPbiAzOTAgb3VyIGxpbWl0YXRpb25zICYgc3RyZW5ndGhzIG1ha2UgdXMgc2xpZ2h0bHkgZGlmZmVyZW50LgorRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2UgYXJlIG9ubHkgYWxsb3dlZCB1c2UgMzEgYml0cyAoMkdCKQorb2Ygb3VyIDMyIGJpdCBhZGRyZXNzZXMsaG93ZXZlciwgd2UgdXNlIGVudGlyZWx5IHNlcGFyYXRlIGFkZHJlc3MgCitzcGFjZXMgZm9yIHRoZSB1c2VyICYga2VybmVsLgorCitUaGlzIG1lYW5zIHdlIGNhbiBzdXBwb3J0IDJHQiBvZiBub24gRXh0ZW5kZWQgUkFNIG9uIHMvMzkwLCAmIG1vcmUKK3dpdGggdGhlIEV4dGVuZGVkIG1lbW9yeSBtYW5hZ2VtZW50IHN3YXAgZGV2aWNlICYgCitjdXJyZW50bHkgNFRCIG9mIHBoeXNpY2FsIG1lbW9yeSBjdXJyZW50bHkgb24gei9BcmNoaXRlY3R1cmUuCisKKworQWRkcmVzcyBTcGFjZXMgb24gTGludXggZm9yIHMvMzkwICYgei9BcmNoaXRlY3R1cmUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK091ciBhZGRyZXNzaW5nIHNjaGVtZSBpcyBhcyBmb2xsb3dzCisKKworSGltZW0gMHg3ZmZmZmZmZiAyR0Igb24gcy8zOTAgICAgKioqKioqKioqKioqKioqKiogICAgICAgICAgKioqKioqKioqKioqKioqKgorY3VycmVudGx5IDB4M2ZmZmZmZmZmZmYgKDJeNDIpLTEgKiAgVXNlciBTdGFjayAgICogICAgICAgICAgKiAgICAgICAgICAgICAgKgorb24gei9BcmNoaXRlY3R1cmUuCQkgKioqKioqKioqKioqKioqKiogICAgICAgICAgKiAgICAgICAgICAgICAgKgorCQkgICAgICAgICAgICAgICAgICogIFNoYXJlZCBMaWJzICAqICAgICAgICAgICogICAgICAgICAgICAgICogICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqKioqICAgICAgICAgICogICAgICAgICAgICAgICogIAorCQkJICAgICAgICAgKiAgICAgICAgICAgICAgICogICAgICAgICAgKiAgICBLZXJuZWwgICAgKiAgCisJCSAgICAgICAgICAgICAgICAgKiAgVXNlciBQcm9ncmFtICogICAgICAgICAgKiAgICAgICAgICAgICAgKgorCQkgICAgICAgICAgICAgICAgICogICBEYXRhIEJTUyAgICAqICAgICAgICAgICogICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICAgVGV4dCAgICAgICAqICAgICAgICAgICogICAgICAgICAgICAgICoKKyAgICAgICAgICAgIAkJCSAqICAgU2VjdGlvbnMgICAgKiAgICAgICAgICAqICAgICAgICAgICAgICAqCisweDAwMDAwMDAwICAgICAgICAgICAgICAgICAgICAgICAqKioqKioqKioqKioqKioqKiAgICAgICAgICAqKioqKioqKioqKioqKioqCisKK1RoaXMgYWxzbyBtZWFucyB0aGF0IHdlIG5lZWQgdG8gbG9vayBhdCB0aGUgUFNXIHByb2JsZW0gc3RhdGUgYml0CitvciB0aGUgYWRkcmVzc2luZyBtb2RlIHRvIGRlY2lkZSB3aGV0aGVyIHdlIGFyZSBsb29raW5nIGF0Cit1c2VyIG9yIGtlcm5lbCBzcGFjZS4KKworVmlydHVhbCBBZGRyZXNzZXMgb24gcy8zOTAgJiB6L0FyY2hpdGVjdHVyZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitBIHZpcnR1YWwgYWRkcmVzcyBvbiBzLzM5MCBpcyBtYWRlIHVwIG9mIDMgcGFydHMKK1RoZSBTWCAoIHNlZ21lbnQgaW5kZXgsIHJvdWdobHkgY29ycmVzcG9uZGluZyB0byB0aGUgUEdEICYgUE1EIGluIGxpbnV4IHRlcm1pbm9sb2d5ICkgCitiZWluZyBiaXRzIDEtMTEuCitUaGUgUFggKCBwYWdlIGluZGV4LCBjb3JyZXNwb25kaW5nIHRvIHRoZSBwYWdlIHRhYmxlIGVudHJ5IChwdGUpIGluIGxpbnV4IHRlcm1pbm9sb2d5ICkKK2JlaW5nIGJpdHMgMTItMTkuIAorVGhlIHJlbWFpbmluZyBiaXRzIEJYICh0aGUgYnl0ZSBpbmRleCBhcmUgdGhlIG9mZnNldCBpbiB0aGUgcGFnZSApCitpLmUuIGJpdHMgMjAgdG8gMzEuCisKK09uIHovQXJjaGl0ZWN0dXJlIGluIGxpbnV4IHdlIGN1cnJlbnRseSBtYWtlIHVwIGFuIGFkZHJlc3MgZnJvbSA0IHBhcnRzLgorVGhlIHJlZ2lvbiBpbmRleCBiaXRzIChSWCkgMC0zMiB3ZSBjdXJyZW50bHkgdXNlIGJpdHMgMjItMzIKK1RoZSBzZWdtZW50IGluZGV4IChTWCkgYmVpbmcgYml0cyAzMy00MworVGhlIHBhZ2UgaW5kZXggKFBYKSBiZWluZyBiaXRzICA0NC01MQorVGhlIGJ5dGUgaW5kZXggKEJYKSBiZWluZyBiaXRzICA1Mi02MworCitOb3RlczoKKzEpIHMvMzkwIGhhcyBubyBQTUQgc28gdGhlIFBNRCBpcyByZWFsbHkgdGhlIFBHRCBhbHNvLgorQSBsb3Qgb2YgdGhpcyBzdHVmZiBpcyBkZWZpbmVkIGluIHBndGFibGUuaC4KKworMikgQWxzbyBzZWVpbmcgYXMgcy8zOTAncyBwYWdlIGluZGV4ZXMgYXJlIG9ubHkgMWsgIGluIHNpemUgCisoYml0cyAxMi0xOSB4IDQgYnl0ZXMgcGVyIHB0ZSApIHdlIHVzZSAxICggcGFnZSA0ayApCit0byBtYWtlIHRoZSBiZXN0IHVzZSBvZiBtZW1vcnkgYnkgdXBkYXRpbmcgNCBzZWdtZW50IGluZGljZXMgCitlbnRyaWVzIGVhY2ggdGltZSB3ZSBtZXNzIHdpdGggYSBQTUQgJiB1c2Ugb2Zmc2V0cyAKKzAsMTAyNCwyMDQ4ICYgMzA3MiBpbiB0aGlzIHBhZ2UgYXMgZm9yIG91ciBzZWdtZW50IGluZGV4ZXMuCitPbiB6L0FyY2hpdGVjdHVyZSBvdXIgcGFnZSBpbmRleGVzIGFyZSBub3cgMmsgaW4gc2l6ZQorKCBiaXRzIDEyLTE5IHggOCBieXRlcyBwZXIgcHRlICkgd2UgZG8gYSBzaW1pbGFyIHRyaWNrCitidXQgb25seSBtZXNzIHdpdGggMiBzZWdtZW50IGluZGljZXMgZWFjaCB0aW1lIHdlIG1lc3Mgd2l0aAorYSBQTUQuCisKKzMpIEFzIHovQXJjaGl0ZWN0dXJlIHN1cHBvcnRzIHVwdG8gYSBtYXNzaXZlIDUtbGV2ZWwgcGFnZSB0YWJsZSBsb29rdXAgd2UgCitjYW4gb25seSB1c2UgMyBjdXJyZW50bHkgb24gTGludXggKCBhcyB0aGlzIGlzIGFsbCB0aGUgZ2VuZXJpYyBrZXJuZWwKK2N1cnJlbnRseSBzdXBwb3J0cyApIGhvd2V2ZXIgdGhpcyBtYXkgY2hhbmdlIGluIGZ1dHVyZQordGhpcyBhbGxvd3MgdXMgdG8gYWNjZXNzICggYWNjb3JkaW5nIHRvIG15IHN1bXMgKQorNFRCIG9mIHZpcnR1YWwgc3RvcmFnZSBwZXIgcHJvY2VzcyBpLmUuCis0MDk2KjUxMihQVEVTKSoxMDI0KFBNRFMpKjIwNDgoUEdEKSA9IDQzOTgwNDY1MTExMDQgYnl0ZXMsCitlbm91Z2ggZm9yIGFub3RoZXIgMiBvciAzIG9mIHllYXJzIEkgdGhpbmsgOi0pLgordG8gZG8gdGhpcyB3ZSB1c2UgYSByZWdpb24tdGhpcmQtdGFibGUgZGVzaWduYXRpb24gdHlwZSBpbgorb3VyIGFkZHJlc3Mgc3BhY2UgY29udHJvbCByZWdpc3RlcnMuCisgCisKK1RoZSBMaW51eCBmb3Igcy8zOTAgJiB6L0FyY2hpdGVjdHVyZSBLZXJuZWwgVGFzayBTdHJ1Y3R1cmUKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0VhY2ggcHJvY2Vzcy90aHJlYWQgdW5kZXIgTGludXggZm9yIFMzOTAgaGFzIGl0cyBvd24ga2VybmVsIHRhc2tfc3RydWN0CitkZWZpbmVkIGluIGxpbnV4L2luY2x1ZGUvbGludXgvc2NoZWQuaAorVGhlIFMzOTAgb24gaW5pdGlhbGlzYXRpb24gJiByZXN1bWluZyBvZiBhIHByb2Nlc3Mgb24gYSBjcHUgc2V0cwordGhlIF9fTENfS0VSTkVMX1NUQUNLIHZhcmlhYmxlIGluIHRoZSBzcGFyZSBwcmVmaXggYXJlYSBmb3IgdGhpcyBjcHUKKyggd2hpY2ggd2UgdXNlIGZvciBwZXIgcHJvY2Vzc29yIGdsb2JhbHMpLgorCitUaGUga2VybmVsIHN0YWNrIHBvaW50ZXIgaXMgaW50aW1hdGVseSB0aWVkIHdpdGggdGhlIHRhc2sgc3R1Y3R1cmUgZm9yCitlYWNoIHByb2Nlc3NvciBhcyBmb2xsb3dzLgorCisgICAgICAgICAgICAgICAgICAgICAgcy8zOTAKKyAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAgICAgICAgKiAgMSBwYWdlIGtlcm5lbCBzdGFjayAqCisJICAgICogICAgICAgICggNEsgKSAgICAgICAgKgorICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICAgICAgICAqICAgMSBwYWdlIHRhc2tfc3RydWN0ICogICAgICAgIAorICAgICAgICAgICAgKiAgICAgICAgKCA0SyApICAgICAgICAqCis4SyBhbGlnbmVkICAqKioqKioqKioqKioqKioqKioqKioqKiogCisKKyAgICAgICAgICAgICAgICAgei9BcmNoaXRlY3R1cmUKKyAgICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAgICAgICAgKiAgMiBwYWdlIGtlcm5lbCBzdGFjayAqCisJICAgICogICAgICAgICggOEsgKSAgICAgICAgKgorICAgICAgICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICAgICAgICAqICAyIHBhZ2UgdGFza19zdHJ1Y3QgICogICAgICAgIAorICAgICAgICAgICAgKiAgICAgICAgKCA4SyApICAgICAgICAqCisxNksgYWxpZ25lZCAqKioqKioqKioqKioqKioqKioqKioqKiogCisKK1doYXQgdGhpcyBtZWFucyBpcyB0aGF0IHdlIGRvbid0IG5lZWQgdG8gZGVkaWNhdGUgYW55IHJlZ2lzdGVyIG9yIGdsb2JhbCB2YXJpYWJsZQordG8gcG9pbnQgdG8gdGhlIGN1cnJlbnQgcnVubmluZyBwcm9jZXNzICYgY2FuIHJldHJpZXZlIGl0IHdpdGggdGhlIGZvbGxvd2luZwordmVyeSBzaW1wbGUgY29uc3RydWN0IGZvciBzLzM5MCAmIG9uZSB2ZXJ5IHNpbWlsYXIgZm9yIHovQXJjaGl0ZWN0dXJlLgorCitzdGF0aWMgaW5saW5lIHN0cnVjdCB0YXNrX3N0cnVjdCAqIGdldF9jdXJyZW50KHZvaWQpCit7CisgICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VycmVudDsKKyAgICAgICAgX19hc21fXygibGhpICAgJTAsLTgxOTJcblx0IgorICAgICAgICAgICAgICAgICJuciAgICAlMCwxNSIKKyAgICAgICAgICAgICAgICA6ICI9ciIgKGN1cnJlbnQpICk7CisgICAgICAgIHJldHVybiBjdXJyZW50OworfQorCitpLmUuIGp1c3QgYW5kaW5nIHRoZSBjdXJyZW50IGtlcm5lbCBzdGFjayBwb2ludGVyIHdpdGggdGhlIG1hc2sgLTgxOTIuCitUaGFua2Z1bGx5IGJlY2F1c2UgTGludXggZG9zZW4ndCBoYXZlIHN1cHBvcnQgZm9yIG5lc3RlZCBJTyBpbnRlcnJ1cHRzCismIG91ciBkZXZpY2VzIGhhdmUgbGFyZ2UgYnVmZmVycyBjYW4gc3Vydml2ZSBpbnRlcnJ1cHRzIGJlaW5nIHNodXQgZm9yIAorc2hvcnQgYW1vdW50cyBvZiB0aW1lIHdlIGRvbid0IG5lZWQgYSBzZXBhcmF0ZSBzdGFjayBmb3IgaW50ZXJydXB0cy4KKworCisKKworUmVnaXN0ZXIgVXNhZ2UgJiBTdGFja2ZyYW1lcyBvbiBMaW51eCBmb3Igcy8zOTAgJiB6L0FyY2hpdGVjdHVyZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK092ZXJ2aWV3OgorLS0tLS0tLS0tCitUaGlzIGlzIHRoZSBjb2RlIHRoYXQgZ2NjIHByb2R1Y2VzIGF0IHRoZSB0b3AgJiB0aGUgYm90dG9tIG9mCitlYWNoIGZ1bmN0aW9uLCBpdCB1c3VhbGx5IGlzIGZhaXJseSBjb25zaXN0ZW50ICYgc2ltaWxhciBmcm9tIAorZnVuY3Rpb24gdG8gZnVuY3Rpb24gJiBpZiB5b3Uga25vdyBpdHMgbGF5b3V0IHlvdSBjYW4gcHJvYmFsYnkKK21ha2Ugc29tZSBoZWFkd2F5IGluIGZpbmRpbmcgdGhlIHVsdGltYXRlIGNhdXNlIG9mIGEgcHJvYmxlbQorYWZ0ZXIgYSBjcmFzaCB3aXRob3V0IGEgc291cmNlIGxldmVsIGRlYnVnZ2VyLgorCitOb3RlOiBUbyBmb2xsb3cgc3RhY2tmcmFtZXMgcmVxdWlyZXMgYSBrbm93bGVkZ2Ugb2YgQyBvciBQYXNjYWwgJgorbGltaXRlZCBrbm93bGVkZ2Ugb2Ygb25lIGFzc2VtYmx5IGxhbmd1YWdlLgorCitJdCBzaG91bGQgYmUgbm90ZWQgdGhhdCB0aGVyZSBhcmUgc29tZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZQorcy8zOTAgJiB6L0FyY2hpdGVjdHVyZSBzdGFjayBsYXlvdXRzIGFzIHRoZSB6L0FyY2hpdGVjdHVyZSBzdGFjayBsYXlvdXQgZGlkbid0IGhhdmUKK3RvIG1haW50YWluIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciBsaW5rYWdlIGZvcm1hdHMuCisKK0dsb3NzYXJ5OgorLS0tLS0tLS0tCithbGxvY2E6CitUaGlzIGlzIGEgYnVpbHQgaW4gY29tcGlsZXIgZnVuY3Rpb24gZm9yIHJ1bnRpbWUgYWxsb2NhdGlvbgorb2YgZXh0cmEgc3BhY2Ugb24gdGhlIGNhbGxlcnMgc3RhY2sgd2hpY2ggaXMgb2J2aW91c2x5IGZyZWVkCit1cCBvbiBmdW5jdGlvbiBleGl0ICggZS5nLiB0aGUgY2FsbGVyIG1heSBjaG9vc2UgdG8gYWxsb2NhdGUgbm90aGluZworb2YgYSBidWZmZXIgb2YgNGsgaWYgcmVxdWlyZWQgZm9yIHRlbXBvcmFyeSBwdXJwb3NlcyApLCBpdCBnZW5lcmF0ZXMgCit2ZXJ5IGVmZmljaWVudCBjb2RlICggYSBmZXcgY3ljbGVzICApIHdoZW4gY29tcGFyZWQgdG8gYWx0ZXJuYXRpdmVzIAorbGlrZSBtYWxsb2MuCisKK2F1dG9tYXRpY3M6IFRoZXNlIGFyZSBsb2NhbCB2YXJpYWJsZXMgb24gdGhlIHN0YWNrLAoraS5lIHRoZXkgYXJlbid0IGluIHJlZ2lzdGVycyAmIHRoZXkgYXJlbid0IHN0YXRpYy4KKworYmFjay1jaGFpbjoKK1RoaXMgaXMgYSBwb2ludGVyIHRvIHRoZSBzdGFjayBwb2ludGVyIGJlZm9yZSBlbnRlcmluZyBhCitmcmFtZWQgZnVuY3Rpb25zICggc2VlIGZyYW1lbGVzcyBmdW5jdGlvbiApIHByb2xvZ3VlIGdvdCBieSAKK2RlZmVyZW5jaW5nIHRoZSBhZGRyZXNzIG9mIHRoZSBjdXJyZW50IHN0YWNrIHBvaW50ZXIsCisgaS5lLiBnb3QgYnkgYWNjZXNzaW5nIHRoZSAzMiBiaXQgdmFsdWUgYXQgdGhlIHN0YWNrIHBvaW50ZXJzCitjdXJyZW50IGxvY2F0aW9uLgorCitiYXNlLXBvaW50ZXI6CitUaGlzIGlzIGEgcG9pbnRlciB0byB0aGUgYmFjayBvZiB0aGUgbGl0ZXJhbCBwb29sIHdoaWNoCitpcyBhbiBhcmVhIGp1c3QgYmVoaW5kIGVhY2ggcHJvY2VkdXJlIHVzZWQgdG8gc3RvcmUgY29uc3RhbnRzCitpbiBlYWNoIGZ1bmN0aW9uLgorCitjYWxsLWNsb2JiZXJlZDogVGhlIGNhbGxlciBwcm9iYWJseSBuZWVkcyB0byBzYXZlIHRoZXNlIHJlZ2lzdGVycyBpZiB0aGVyZSAKK2lzIHNvbWV0aGluZyBvZiB2YWx1ZSBpbiB0aGVtLCBvbiB0aGUgc3RhY2sgb3IgZWxzZXdoZXJlIGJlZm9yZSBtYWtpbmcgYSAKK2NhbGwgdG8gYW5vdGhlciBwcm9jZWR1cmUgc28gdGhhdCBpdCBjYW4gcmVzdG9yZSBpdCBsYXRlci4KKworZXBpbG9ndWU6CitUaGUgY29kZSBnZW5lcmF0ZWQgYnkgdGhlIGNvbXBpbGVyIHRvIHJldHVybiB0byB0aGUgY2FsbGVyLgorCitmcmFtZWxlc3MtZnVuY3Rpb24KK0EgZnJhbWVsZXNzIGZ1bmN0aW9uIGluIExpbnV4IGZvciBzMzkwICYgei9BcmNoaXRlY3R1cmUgaXMgb25lIHdoaWNoIGRvZXNuJ3QgCituZWVkIG1vcmUgdGhhbiB0aGUgcmVnaXN0ZXIgc2F2ZSBhcmVhICggOTYgYnl0ZXMgb24gcy8zOTAsIDE2MCBvbiB6L0FyY2hpdGVjdHVyZSApCitnaXZlbiB0byBpdCBieSB0aGUgY2FsbGVyLgorQSBmcmFtZWxlc3MgZnVuY3Rpb24gbmV2ZXI6CisxKSBTZXRzIHVwIGEgYmFjayBjaGFpbi4KKzIpIENhbGxzIGFsbG9jYS4KKzMpIENhbGxzIG90aGVyIG5vcm1hbCBmdW5jdGlvbnMKKzQpIEhhcyBhdXRvbWF0aWNzLgorCitHT1QtcG9pbnRlcjoKK1RoaXMgaXMgYSBwb2ludGVyIHRvIHRoZSBnbG9iYWwtb2Zmc2V0LXRhYmxlIGluIEVMRgorKCBFeGVjdXRhYmxlIExpbmthYmxlIEZvcm1hdCwgTGludXgnZXMgbW9zdCBjb21tb24gZXhlY3V0YWJsZSBmb3JtYXQgKSwKK2FsbCBnbG9iYWxzICYgc2hhcmVkIGxpYnJhcnkgb2JqZWN0cyBhcmUgZm91bmQgdXNpbmcgdGhpcyBwb2ludGVyLgorCitsYXp5LWJpbmRpbmcKK0VMRiBzaGFyZWQgbGlicmFyaWVzIGFyZSB0eXBpY2FsbHkgb25seSBsb2FkZWQgd2hlbiByb3V0aW5lcyBpbiB0aGUgc2hhcmVkCitsaWJyYXJ5IGFyZSBhY3R1YWxseSBmaXJzdCBjYWxsZWQgYXQgcnVudGltZS4gVGhpcyBpcyBsYXp5IGJpbmRpbmcuCisKK3Byb2NlZHVyZS1saW5rYWdlLXRhYmxlCitUaGlzIGlzIGEgdGFibGUgZm91bmQgZnJvbSB0aGUgR09UIHdoaWNoIGNvbnRhaW5zIHBvaW50ZXJzIHRvIHJvdXRpbmVzCitpbiBvdGhlciBzaGFyZWQgbGlicmFyaWVzIHdoaWNoIGNhbid0IGJlIGNhbGxlZCB0byBieSBlYXNpZXIgbWVhbnMuCisKK3Byb2xvZ3VlOgorVGhlIGNvZGUgZ2VuZXJhdGVkIGJ5IHRoZSBjb21waWxlciB0byBzZXQgdXAgdGhlIHN0YWNrIGZyYW1lLgorCitvdXRnb2luZy1hcmdzOgorVGhpcyBpcyBleHRyYSBhcmVhIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2sgb2YgdGhlIGNhbGxpbmcgZnVuY3Rpb24gaWYgdGhlCitwYXJhbWV0ZXJzIGZvciB0aGUgY2FsbGVlJ3MgY2Fubm90IGFsbCBiZSBwdXQgaW4gcmVnaXN0ZXJzLCB0aGUgc2FtZQorYXJlYSBjYW4gYmUgcmV1c2VkIGJ5IGVhY2ggZnVuY3Rpb24gdGhlIGNhbGxlciBjYWxscy4KKworcm91dGluZS1kZXNjcmlwdG9yOgorQSBDT0ZGICBleGVjdXRhYmxlIGZvcm1hdCBiYXNlZCBjb25jZXB0IG9mIGEgcHJvY2VkdXJlIHJlZmVyZW5jZSAKK2FjdHVhbGx5IGJlaW5nIDggYnl0ZXMgb3IgbW9yZSBhcyBvcHBvc2VkIHRvIGEgc2ltcGxlIHBvaW50ZXIgdG8gdGhlIHJvdXRpbmUuCitUaGlzIGlzIHR5cGljYWxseSBkZWZpbmVkIGFzIGZvbGxvd3MKK1JvdXRpbmUgRGVzY3JpcHRvciBvZmZzZXQgMD1Qb2ludGVyIHRvIEZ1bmN0aW9uCitSb3V0aW5lIERlc2NyaXB0b3Igb2Zmc2V0IDQ9UG9pbnRlciB0byBUYWJsZSBvZiBDb250ZW50cworVGhlIHRhYmxlIG9mIGNvbnRlbnRzL1RPQyBpcyByb3VnaGx5IGVxdWl2YWxlbnQgdG8gYSBHT1QgcG9pbnRlci4KKyYgaXQgbWVhbnMgdGhhdCBzaGFyZWQgbGlicmFyaWVzIGV0Yy4gY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIHNldmVyYWwKK2Vudmlyb25tZW50cyBlYWNoIHdpdGggdGhlaXIgb3duIFRPQy4KKworIAorc3RhdGljLWNoYWluOiBUaGlzIGlzIHVzZWQgaW4gbmVzdGVkIGZ1bmN0aW9ucyBhIGNvbmNlcHQgYWRvcHRlZCBmcm9tIHBhc2NhbCAKK2J5IGdjYyBub3QgdXNlZCBpbiBhbnNpIEMgb3IgQysrICggYWx0aG91Z2ggcXVpdGUgdXNlZnVsICksIGJhc2ljYWxseSBpdAoraXMgYSBwb2ludGVyIHVzZWQgdG8gcmVmZXJlbmNlIGxvY2FsIHZhcmlhYmxlcyBvZiBlbmNsb3NpbmcgZnVuY3Rpb25zLgorWW91IG1pZ2h0IGNvbWUgYWNyb3NzIHRoaXMgc3R1ZmYgb25jZSBvciB0d2ljZSBpbiB5b3VyIGxpZmV0aW1lLgorCitlLmcuCitUaGUgZnVuY3Rpb24gYmVsb3cgc2hvdWxkIHJldHVybiAxMSB0aG91Z2ggZ2NjIG1heSBnZXQgdXBzZXQgJiB0b3NzIHdhcm5pbmdzIAorYWJvdXQgdW51c2VkIHZhcmlhYmxlcy4KK2ludCBGdW5jdGlvbkEoaW50IGEpCit7CisJaW50IGI7CisJRnVuY3Rpb25DKGludCBjKQorCXsKKwkJYj1jKzE7CisJfQorCUZ1bmN0aW9uQygxMCk7CisJcmV0dXJuKGIpOworfQorCisKK3MvMzkwICYgei9BcmNoaXRlY3R1cmUgUmVnaXN0ZXIgdXNhZ2UKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK3IwICAgICAgIHVzZWQgYnkgc3lzY2FsbHMvYXNzZW1ibHkgICAgICAgICAgICAgICAgICBjYWxsLWNsb2JiZXJlZAorcjEJIHVzZWQgYnkgc3lzY2FsbHMvYXNzZW1ibHkgICAgICAgICAgICAgICAgICBjYWxsLWNsb2JiZXJlZAorcjIgICAgICAgYXJndW1lbnQgMCAvIHJldHVybiB2YWx1ZSAwICAgICAgICAgICAgICAgIGNhbGwtY2xvYmJlcmVkCityMyAgICAgICBhcmd1bWVudCAxIC8gcmV0dXJuIHZhbHVlIDEgKGlmIGxvbmcgbG9uZykgY2FsbC1jbG9iYmVyZWQKK3I0ICAgICAgIGFyZ3VtZW50IDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsLWNsb2JiZXJlZAorcjUgICAgICAgYXJndW1lbnQgMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGwtY2xvYmJlcmVkCityNgkgYXJndW1lbnQgNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVkCityNyAgICAgICBwb2ludGVyLXRvIGFyZ3VtZW50cyA1IHRvIC4uLiAgICAgICAgICAgICAgc2F2ZWQgICAgICAKK3I4ICAgICAgIHRoaXMgJiB0aGF0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlZAorcjkgICAgICAgdGhpcyAmIHRoYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVkCityMTAgICAgICBzdGF0aWMtY2hhaW4gKCBpZiBuZXN0ZWQgZnVuY3Rpb24gKSAgICAgICAgc2F2ZWQKK3IxMSAgICAgIGZyYW1lLXBvaW50ZXIgKCBpZiBmdW5jdGlvbiB1c2VkIGFsbG9jYSApICBzYXZlZAorcjEyICAgICAgZ290LXBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVkCityMTMgICAgICBiYXNlLXBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZWQKK3IxNCAgICAgIHJldHVybi1hZGRyZXNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlZAorcjE1ICAgICAgc3RhY2stcG9pbnRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVkCisKK2YwICAgICAgIGFyZ3VtZW50IDAgLyByZXR1cm4gdmFsdWUgKCBmbG9hdC9kb3VibGUgKSBjYWxsLWNsb2JiZXJlZAorZjIgICAgICAgYXJndW1lbnQgMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGwtY2xvYmJlcmVkCitmNCAgICAgICB6L0FyY2hpdGVjdHVyZSBhcmd1bWVudCAyICAgICAgICAgICAgICAgICAgc2F2ZWQKK2Y2ICAgICAgIHovQXJjaGl0ZWN0dXJlIGFyZ3VtZW50IDMgICAgICAgICAgICAgICAgICBzYXZlZAorVGhlIHJlbWFpbmluZyBmbG9hdGluZyBwb2ludHMKK2YxLGYzLGY1IGY3LWYxNSBhcmUgY2FsbC1jbG9iYmVyZWQuCisKK05vdGVzOgorLS0tLS0tCisxKSBUaGUgb25seSByZXF1aXJlbWVudCBpcyB0aGF0IHJlZ2lzdGVycyB3aGljaCBhcmUgdXNlZAorYnkgdGhlIGNhbGxlZSBhcmUgc2F2ZWQsIGUuZy4gdGhlIGNvbXBpbGVyIGlzIHBlcmZlY3RseQorY2FwaWJsZSBvZiB1c2luZyByMTEgZm9yIHB1cnBvc2VzIG90aGVyIHRoYW4gYSBmcmFtZSBhCitmcmFtZSBwb2ludGVyIGlmIGEgZnJhbWUgcG9pbnRlciBpcyBub3QgbmVlZGVkLgorMikgSW4gZnVuY3Rpb25zIHdpdGggdmFyaWFibGUgYXJndW1lbnRzIGUuZy4gcHJpbnRmIHRoZSBjYWxsaW5nIHByb2NlZHVyZSAKK2lzIGlkZW50aWNhbCB0byBvbmUgd2l0aG91dCB2YXJpYWJsZSBhcmd1bWVudHMgJiB0aGUgc2FtZSBudW1iZXIgb2YgCitwYXJhbWV0ZXJzLiBIb3dldmVyLCB0aGUgcHJvbG9ndWUgb2YgdGhpcyBmdW5jdGlvbiBpcyBzb21ld2hhdCBtb3JlCitoYWlyeSBvd2luZyB0byBpdCBoYXZpbmcgdG8gbW92ZSB0aGVzZSBwYXJhbWV0ZXJzIHRvIHRoZSBzdGFjayB0bworZ2V0IHZhX3N0YXJ0LCB2YV9hcmcgJiB2YV9lbmQgdG8gd29yay4KKzMpIEFjY2VzcyByZWdpc3RlcnMgYXJlIGN1cnJlbnRseSB1bnVzZWQgYnkgZ2NjIGJ1dCBhcmUgdXNlZCBpbgordGhlIGtlcm5lbC4gUG9zc2liaWxpdGllcyBleGlzdCB0byB1c2UgdGhlbSBhdCB0aGUgbW9tZW50IGZvcgordGVtcG9yYXJ5IHN0b3JhZ2UgYnV0IGl0IGlzbid0IHJlY29tbWVuZGVkLgorNCkgT25seSA0IG9mIHRoZSBmbG9hdGluZyBwb2ludCByZWdpc3RlcnMgYXJlIHVzZWQgZm9yCitwYXJhbWV0ZXIgcGFzc2luZyBhcyBvbGRlciBtYWNoaW5lcyBzdWNoIGFzIEczIG9ubHkgaGF2ZSBvbmx5IDQKKyYgaXQga2VlcHMgdGhlIHN0YWNrIGZyYW1lIGNvbXBhdGlibGUgd2l0aCBvdGhlciBjb21waWxlcnMuCitIb3dldmVyIHdpdGggSUVFRSBmbG9hdGluZyBwb2ludCBlbXVsYXRpb24gdW5kZXIgbGludXggb24gdGhlCitvbGRlciBtYWNoaW5lcyB5b3UgYXJlIGZyZWUgdG8gdXNlIHRoZSBvdGhlciAxMi4KKzUpIEEgbG9uZyBsb25nIG9yIGRvdWJsZSBwYXJhbWV0ZXIgY2Fubm90IGJlIGhhdmUgdGhlIAorZmlyc3QgNCBieXRlcyBpbiBhIHJlZ2lzdGVyICYgdGhlIHNlY29uZCBmb3VyIGJ5dGVzIGluIHRoZSAKK291dGdvaW5nIGFyZ3MgYXJlYS4gSXQgbXVzdCBiZSBwdXJlbHkgaW4gdGhlIG91dGdvaW5nIGFyZ3MKK2FyZWEgaWYgY3Jvc3NpbmcgdGhpcyBib3VuZGFyeS4KKzYpIEZsb2F0aW5nIHBvaW50IHBhcmFtZXRlcnMgYXJlIG1peGVkIHdpdGggb3V0Z29pbmcgYXJncworb24gdGhlIG91dGdvaW5nIGFyZ3MgYXJlYSBpbiB0aGUgb3JkZXIgdGhlIGFyZSBwYXNzZWQgaW4gYXMgcGFyYW1ldGVycy4KKzcpIEZsb2F0aW5nIHBvaW50IGFyZ3VtZW50cyAyICYgMyBhcmUgc2F2ZWQgaW4gdGhlIG91dGdvaW5nIGFyZ3MgYXJlYSBmb3IgCit6L0FyY2hpdGVjdHVyZQorCisKK1N0YWNrIEZyYW1lIExheW91dAorLS0tLS0tLS0tLS0tLS0tLS0tCitzLzM5MCAgICAgei9BcmNoaXRlY3R1cmUKKzAgICAgICAgICAwICAgICAgICAgICAgIGJhY2sgY2hhaW4gKCBhIDAgaGVyZSBzaWduaWZpZXMgZW5kIG9mIGJhY2sgY2hhaW4gKQorNCAgICAgICAgIDggICAgICAgICAgICAgZW9zICggZW5kIG9mIHN0YWNrLCBub3QgdXNlZCBvbiBMaW51eCBmb3IgUzM5MCB1c2VkIGluIG90aGVyIGxpbmthZ2UgZm9ybWF0cyApCis4ICAgICAgICAgMTYgICAgICAgICAgICBnbHVlIHVzZWQgaW4gb3RoZXIgcy8zOTAgbGlua2FnZSBmb3JtYXRzIGZvciBzYXZlZCByb3V0aW5lIGRlc2NyaXB0b3JzIGV0Yy4KKzEyICAgICAgICAyNCAgICAgICAgICAgIGdsdWUgdXNlZCBpbiBvdGhlciBzLzM5MCBsaW5rYWdlIGZvcm1hdHMgZm9yIHNhdmVkIHJvdXRpbmUgZGVzY3JpcHRvcnMgZXRjLgorMTYgICAgICAgIDMyICAgICAgICAgICAgc2NyYXRjaCBhcmVhCisyMCAgICAgICAgNDAgICAgICAgICAgICBzY3JhdGNoIGFyZWEKKzI0ICAgICAgICA0OCAgICAgICAgICAgIHNhdmVkIHI2IG9mIGNhbGxlciBmdW5jdGlvbgorMjggICAgICAgIDU2ICAgICAgICAgICAgc2F2ZWQgcjcgb2YgY2FsbGVyIGZ1bmN0aW9uCiszMiAgICAgICAgNjQgICAgICAgICAgICBzYXZlZCByOCBvZiBjYWxsZXIgZnVuY3Rpb24KKzM2ICAgICAgICA3MiAgICAgICAgICAgIHNhdmVkIHI5IG9mIGNhbGxlciBmdW5jdGlvbgorNDAgICAgICAgIDgwICAgICAgICAgICAgc2F2ZWQgcjEwIG9mIGNhbGxlciBmdW5jdGlvbgorNDQgICAgICAgIDg4ICAgICAgICAgICAgc2F2ZWQgcjExIG9mIGNhbGxlciBmdW5jdGlvbgorNDggICAgICAgIDk2ICAgICAgICAgICAgc2F2ZWQgcjEyIG9mIGNhbGxlciBmdW5jdGlvbgorNTIgICAgICAgIDEwNCAgICAgICAgICAgc2F2ZWQgcjEzIG9mIGNhbGxlciBmdW5jdGlvbgorNTYgICAgICAgIDExMiAgICAgICAgICAgc2F2ZWQgcjE0IG9mIGNhbGxlciBmdW5jdGlvbgorNjAgICAgICAgIDEyMCAgICAgICAgICAgc2F2ZWQgcjE1IG9mIGNhbGxlciBmdW5jdGlvbgorNjQgICAgICAgIDEyOCAgICAgICAgICAgc2F2ZWQgZjQgb2YgY2FsbGVyIGZ1bmN0aW9uCis3MiAgICAgICAgMTMyICAgICAgICAgICBzYXZlZCBmNiBvZiBjYWxsZXIgZnVuY3Rpb24KKzgwICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZAorOTYgICAgICAgIDE2MCAgICAgICAgICAgb3V0Z29pbmcgYXJncyBwYXNzZWQgZnJvbSBjYWxsZXIgdG8gY2FsbGVlCis5Nit4ICAgICAgMTYwK3ggICAgICAgICBwb3NzaWJsZSBzdGFjayBhbGlnbm1lbnQgKCA4IGJ5dGVzIGRlc2lyYWJsZSApCis5Nit4K3kgICAgMTYwK3greSAgICAgICBhbGxvY2Egc3BhY2Ugb2YgY2FsbGVyICggaWYgdXNlZCApCis5Nit4K3kreiAgMTYwK3greSt6ICAgICBhdXRvbWF0aWNzIG9mIGNhbGxlciAoIGlmIHVzZWQgKQorMCAgICAgICAgICAgICAgICAgICAgICAgYmFjay1jaGFpbgorCitBIHNhbXBsZSBwcm9ncmFtIHdpdGggY29tbWVudHMuCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0NvbW1lbnRzIG9uIHRoZSBmdW5jdGlvbiB0ZXN0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMSkgSXQgZGlkbid0IG5lZWQgdG8gc2V0IHVwIGEgcG9pbnRlciB0byB0aGUgY29uc3RhbnQgcG9vbCBncHIxMyBhcyBpdCBpc24ndCB1c2VkCisoIDotKCApLgorMikgVGhpcyBpcyBhIGZyYW1lbGVzcyBmdW5jdGlvbiAmIG5vIHN0YWNrIGlzIGJvdWdodC4KKzMpIFRoZSBjb21waWxlciB3YXMgY2xldmVyIGVub3VnaCB0byByZWNvZ25pc2UgdGhhdCBpdCBjb3VsZCByZXR1cm4gdGhlCit2YWx1ZSBpbiByMiBhcyB3ZWxsIGFzIHVzZSBpdCBmb3IgdGhlIHBhc3NlZCBpbiBwYXJhbWV0ZXIgKCA6LSkgKS4KKzQpIFRoZSBiYXNyICggYnJhbmNoIHJlbGF0aXZlICYgc2F2ZSApIHRyaWNrIHdvcmtzIGFzIGZvbGxvd3MgdGhlIGluc3RydWN0aW9uIAoraGFzIGEgc3BlY2lhbCBjYXNlIHdpdGggcjAscjAgd2l0aCBzb21lIGluc3RydWN0aW9uIG9wZXJhbmRzIGlzIHVuZGVyc3Rvb2QgYXMgCit0aGUgbGl0ZXJhbCB2YWx1ZSAwLCBzb21lIHJpc2MgYXJjaGl0ZWN0dXJlcyBhbHNvIGRvIHRoaXMgKS4gU28gbm93Cit3ZSBhcmUgYnJhbmNoaW5nIHRvIHRoZSBuZXh0IGFkZHJlc3MgJiB0aGUgYWRkcmVzcyBuZXcgcHJvZ3JhbSBjb3VudGVyIGlzCitpbiByMTMsc28gbm93IHdlIHN1YnRyYWN0IHRoZSBzaXplIG9mIHRoZSBmdW5jdGlvbiBwcm9sb2d1ZSB3ZSBoYXZlIGV4ZWN1dGVkCisrIHRoZSBzaXplIG9mIHRoZSBsaXRlcmFsIHBvb2wgdG8gZ2V0IHRvIHRoZSB0b3Agb2YgdGhlIGxpdGVyYWwgcG9vbAorMDA0MDAzN2MgaW50IHRlc3QoaW50IGIpCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgRnVuY3Rpb24gcHJvbG9ndWUgYmVsb3cKKyAgNDAwMzdjOgk5MCBkZSBmMCAzNCAJc3RtCSVyMTMsJXIxNCw1MiglcjE1KSAjIFNhdmUgcmVnaXN0ZXJzIHIxMyAmIHIxNAorICA0MDAzODA6CTBkIGQwICAgICAgIAliYXNyCSVyMTMsJXIwICAgICAgICAgICAjIFNldCB1cCBwb2ludGVyIHRvIGNvbnN0YW50IHBvb2wgdXNpbmcKKyAgNDAwMzgyOglhNyBkYSBmZiBmYSAJYWhpCSVyMTMsLTYgICAgICAgICAgICAjIGJhc3IgdHJpY2sKKwlyZXR1cm4oNStiKTsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEh1Z2UgbWFpbiBwcm9ncmFtCisgIDQwMDM4NjoJYTcgMmEgMDAgMDUgCWFoaQklcjIsNSAgICAgICAgICAgICAgIyBhZGQgNSB0byByMgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgRnVuY3Rpb24gZXBpbG9ndWUgYmVsb3cgCisgIDQwMDM4YToJOTggZGUgZjAgMzQgCWxtCSVyMTMsJXIxNCw1MiglcjE1KSAjIHJlc3RvcmUgcmVnaXN0ZXJzIHIxMyAmIDE0CisgIDQwMDM4ZToJMDcgZmUgICAgICAgCWJyCSVyMTQgICAgICAgICAgICAgICAjIHJldHVybgorfQorCitDb21tZW50cyBvbiB0aGUgZnVuY3Rpb24gbWFpbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzEpIFRoZSBjb21waWxlciBkaWQgdGhpcyBmdW5jdGlvbiBvcHRpbWFsbHkgKCA4LSkgKQorCitMaXRlcmFsIHBvb2wgZm9yIG1haW4uCis0MDAzOTA6CWZmIGZmIGZmIGVjIAkubG9uZyAweGZmZmZmZmVjCittYWluKGludCBhcmdjLGNoYXIgKmFyZ3ZbXSkKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBGdW5jdGlvbiBwcm9sb2d1ZSBiZWxvdworICA0MDAzOTQ6CTkwIGJmIGYwIDJjIAlzdG0JJXIxMSwlcjE1LDQ0KCVyMTUpICMgU2F2ZSBuZWNlc3NhcnkgcmVnaXN0ZXJzCisgIDQwMDM5ODoJMTggMGYgICAgICAgCWxyCSVyMCwlcjE1ICAgICAgICAgICAjIGNvcHkgc3RhY2sgcG9pbnRlciB0byByMAorICA0MDAzOWE6CWE3IGZhIGZmIGEwIAlhaGkJJXIxNSwtOTYgICAgICAgICAgICMgTWFrZSBhcmVhIGZvciBjYWxsZWUgc2F2aW5nIAorICA0MDAzOWU6CTBkIGQwICAgICAgIAliYXNyCSVyMTMsJXIwICAgICAgICAgICAjIFNldCB1cCByMTMgdG8gcG9pbnQgdG8KKyAgNDAwM2EwOglhNyBkYSBmZiBmMCAJYWhpCSVyMTMsLTE2ICAgICAgICAgICAjIGxpdGVyYWwgcG9vbAorICA0MDAzYTQ6CTUwIDAwIGYwIDAwIAlzdAklcjAsMCglcjE1KSAgICAgICAgIyBTYXZlIGJhY2tjaGFpbgorCisJcmV0dXJuKHRlc3QoNSkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBNYWluIFByb2dyYW0gQmVsb3cKKyAgNDAwM2E4Ogk1OCBlMCBkMCAwMCAJbAklcjE0LDAoJXIxMykgICAgICAgIyBsb2FkIHJlbGF0aXZlIGFkZHJlc3Mgb2YgdGVzdCBmcm9tCisJCQkJCQkgICAgICAgICAgICMgbGl0ZXJhbCBwb29sCisgIDQwMDNhYzoJYTcgMjggMDAgMDUgCWxoaQklcjIsNSAgICAgICAgICAgICAgIyBTZXQgZmlyc3QgcGFyYW1ldGVyIHRvIDUKKyAgNDAwM2IwOgk0ZCBlZSBkMCAwMCAJYmFzCSVyMTQsMCglcjE0LCVyMTMpICAjIGp1bXAgdG8gdGVzdCBzZXR0aW5nIHIxNCBhcyByZXR1cm4KKwkJCQkJCQkgICAjIGFkZHJlc3MgdXNpbmcgYnJhbmNoICYgc2F2ZSBpbnN0cnVjdGlvbi4KKworCQkJCQkJCSAgICMgRnVuY3Rpb24gRXBpbG9ndWUgYmVsb3cKKyAgNDAwM2I0Ogk5OCBiZiBmMCA4YyAJbG0JJXIxMSwlcjE1LDE0MCglcjE1KSMgUmVzdG9yZSBuZWNlc3NhcnkgcmVnaXN0ZXJzLgorICA0MDAzYjg6CTA3IGZlICAgICAgIAlicgklcjE0ICAgICAgICAgICAgICAgIyByZXR1cm4gdG8gZG8gcHJvZ3JhbSBleGl0IAorfQorCisKK0NvbXBpbGVyIHVwZGF0ZXMKKy0tLS0tLS0tLS0tLS0tLS0KKworbWFpbihpbnQgYXJnYyxjaGFyICphcmd2W10pCit7CisgIDQwMDRmYzoJOTAgN2YgZjAgMWMgICAgICAgCXN0bQklcjcsJXIxNSwyOCglcjE1KQorICA0MDA1MDA6CWE3IGQ1IDAwIDA0ICAgICAgIAlicmFzCSVyMTMsNDAwNTA4IDxtYWluKzB4Yz4KKyAgNDAwNTA0OgkwMCA0MCAwNCBmNCAgICAgICAJLmxvbmcJMHgwMDQwMDRmNCAKKyAgIyBjb21waWxlciBub3cgcHV0cyBjb25zdGFudCBwb29sIGluIGNvZGUgdG8gc28gaXQgc2F2ZXMgYW4gaW5zdHJ1Y3Rpb24gCisgIDQwMDUwODoJMTggMGYgICAgICAgICAgICAgCWxyCSVyMCwlcjE1CisgIDQwMDUwYToJYTcgZmEgZmYgYTAgICAgICAgCWFoaQklcjE1LC05NgorICA0MDA1MGU6CTUwIDAwIGYwIDAwICAgICAgIAlzdAklcjAsMCglcjE1KQorCXJldHVybih0ZXN0KDUpKTsKKyAgNDAwNTEyOgk1OCAxMCBkMCAwMCAgICAgICAJbAklcjEsMCglcjEzKQorICA0MDA1MTY6CWE3IDI4IDAwIDA1ICAgICAgIAlsaGkJJXIyLDUKKyAgNDAwNTFhOgkwZCBlMSAgICAgICAgICAgICAJYmFzcgklcjE0LCVyMQorICAjIGNvbXBpbGVyIGFkZHMgMSBleHRyYSBpbnN0cnVjdGlvbiB0byBlcGlsb2d1ZSB0aGlzIGlzIGRvbmUgdG8KKyAgIyBhdm9pZCBwcm9jZXNzb3IgcGlwZWxpbmUgc3RhbGxzIG93aW5nIHRvIGRhdGEgZGVwZW5kZW5jaWVzIG9uIGc1ICYKKyAgIyBhYm92ZSBhcyByZWdpc3RlciAxNCBpbiB0aGUgb2xkIGNvZGUgd2FzIG5lZWRlZCBkaXJlY3RseSBhZnRlciBiZWluZyBsb2FkZWQgCisgICMgYnkgdGhlIGxtCSVyMTEsJXIxNSwxNDAoJXIxNSkgZm9yIHRoZSBiciAlMTQuCisgIDQwMDUxYzoJNTggNDAgZjAgOTggICAgICAgCWwJJXI0LDE1MiglcjE1KQorICA0MDA1MjA6CTk4IDdmIGYwIDdjICAgICAgIAlsbQklcjcsJXIxNSwxMjQoJXIxNSkKKyAgNDAwNTI0OgkwNyBmNCAgICAgICAgICAgICAJYnIJJXI0Cit9CisKKworSGFydG11dCAoIG91ciBjb21waWxlciBkZXZlbG9wZXIgKSBhbHNvIGhhcyBiZWVuIHRocmVhdGVuaW5nIHRvIHRha2Ugb3V0IHRoZQorc3RhY2sgYmFja2NoYWluIGluIG9wdGltaXNlZCBjb2RlIGFzIHRoaXMgYWxzbyBjYXVzZXMgcGlwZWxpbmUgc3RhbGxzLCB5b3UKK2hhdmUgYmVlbiB3YXJuZWQuCisKKzY0IGJpdCB6L0FyY2hpdGVjdHVyZSBjb2RlIGRpc2Fzc2VtYmx5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiB5b3UgdW5kZXJzdGFuZCB0aGUgc3R1ZmYgYWJvdmUgeW91J2xsIHVuZGVyc3RhbmQgdGhlIHN0dWZmCitiZWxvdyB0b28gc28gSSdsbCBhdm9pZCByZXBlYXRpbmcgbXlzZWxmICYganVzdCBzYXkgdGhhdCAKK3NvbWUgb2YgdGhlIGluc3RydWN0aW9ucyBoYXZlIGcncyBvbiB0aGUgZW5kIG9mIHRoZW0gdG8gaW5kaWNhdGUKK3RoZXkgYXJlIDY0IGJpdCAmIHRoZSBzdGFjayBvZmZzZXRzIGFyZSBhIGJpZ2dlciwgCit0aGUgb25seSBvdGhlciBkaWZmZXJlbmNlIHlvdSdsbCBmaW5kIGJldHdlZW4gMzIgJiA2NCBiaXQgaXMgdGhhdAord2Ugbm93IHVzZSBmNCAmIGY2IGZvciBmbG9hdGluZyBwb2ludCBhcmd1bWVudHMgb24gNjQgYml0LgorMDAwMDAwMDA4MDAwMDViMCA8dGVzdD46CitpbnQgdGVzdChpbnQgYikKK3sKKwlyZXR1cm4oNStiKTsKKyAgICA4MDAwMDViMDoJYTcgMmEgMDAgMDUgICAgICAgCWFoaQklcjIsNQorICAgIDgwMDAwNWI0OgliOSAxNCAwMCAyMiAgICAgICAJbGdmcgklcjIsJXIyICMgZG93bmNhc3QgdG8gaW50ZWdlcgorICAgIDgwMDAwNWI4OgkwNyBmZSAgICAgICAgICAgICAJYnIJJXIxNAorICAgIDgwMDAwNWJhOgkwNyAwNyAgICAgICAgICAgICAJYmNyCTAsJXI3CisKKworfQorCiswMDAwMDAwMDgwMDAwNWJjIDxtYWluPjoKK21haW4oaW50IGFyZ2MsY2hhciAqYXJndltdKQoreyAKKyAgICA4MDAwMDViYzoJZWIgYmYgZjAgNTggMDAgMjQgCXN0bWcJJXIxMSwlcjE1LDg4KCVyMTUpCisgICAgODAwMDA1YzI6CWI5IDA0IDAwIDFmICAgICAgIAlsZ3IJJXIxLCVyMTUKKyAgICA4MDAwMDVjNjoJYTcgZmIgZmYgNjAgICAgICAgCWFnaGkJJXIxNSwtMTYwCisgICAgODAwMDA1Y2E6CWUzIDEwIGYwIDAwIDAwIDI0IAlzdGcJJXIxLDAoJXIxNSkKKwlyZXR1cm4odGVzdCg1KSk7CisgICAgODAwMDA1ZDA6CWE3IDI5IDAwIDA1ICAgICAgIAlsZ2hpCSVyMiw1CisgICAgIyBicmFzbCBhbGxvd3MganVtcHMgPiA2NGsgJiBpcyBvdmVya2lsbCBoZXJlIGJyYXMgd291bGQgZG8gZnVuZQorICAgIDgwMDAwNWQ0OgljMCBlNSBmZiBmZiBmZiBlZSAJYnJhc2wJJXIxNCw4MDAwMDViMCA8dGVzdD4gCisgICAgODAwMDA1ZGE6CWUzIDQwIGYxIDEwIDAwIDA0IAlsZwklcjQsMjcyKCVyMTUpCisgICAgODAwMDA1ZTA6CWViIGJmIGYwIGY4IDAwIDA0IAlsbWcJJXIxMSwlcjE1LDI0OCglcjE1KQorICAgIDgwMDAwNWU2OgkwNyBmNCAgICAgICAgICAgICAJYnIJJXI0Cit9CisKKworCitDb21waWxpbmcgcHJvZ3JhbXMgZm9yIGRlYnVnZ2luZyBvbiBMaW51eCBmb3Igcy8zOTAgJiB6L0FyY2hpdGVjdHVyZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy1nZHdhcmYtMiBub3cgd29ya3MgaXQgc2hvdWxkIGJlIGNvbnNpZGVyZWQgdGhlIGRlZmF1bHQgZGVidWdnaW5nCitmb3JtYXQgZm9yIHMvMzkwICYgei9BcmNoaXRlY3R1cmUgYXMgaXQgaXMgbW9yZSByZWxpYWJsZSBmb3IgZGVidWdnaW5nCitzaGFyZWQgbGlicmFyaWVzLCAgbm9ybWFsIC1nIGRlYnVnZ2luZyB3b3JrcyBtdWNoIGJldHRlciBub3cKK1RoYW5rcyB0byB0aGUgSUJNIGphdmEgY29tcGlsZXIgZGV2ZWxvcGVycyBidWcgcmVwb3J0cy4gCisKK1RoaXMgaXMgdHlwaWNhbGx5IGRvbmUgYWRkaW5nL2FwcGVuZGluZyB0aGUgZmxhZ3MgLWcgb3IgLWdkd2FyZi0yIHRvIHRoZSAKK0NGTEFHUyAmIExERkxBR1MgdmFyaWFibGVzIE1ha2VmaWxlIG9mIHRoZSBwcm9ncmFtIGNvbmNlcm5lZC4KKworSWYgdXNpbmcgZ2RiICYgeW91IHdvdWxkIGxpa2UgYWNjdXJhdGUgZGlzcGxheXMgb2YgcmVnaXN0ZXJzICYKKyBzdGFjayB0cmFjZXMgY29tcGlsZSB3aXRob3V0IG9wdGltaXNhdGlvbiBpLmUgbWFrZSBzdXJlCit0aGF0IHRoZXJlIGlzIG5vIC1PMiBvciBzaW1pbGFyIG9uIHRoZSBDRkxBR1MgbGluZSBvZiB0aGUgTWFrZWZpbGUgJgordGhlIGVtaXR0ZWQgZ2NjIGNvbW1hbmRzLCBvYnZpb3VzbHkgdGhpcyB3aWxsIHByb2R1Y2Ugd29yc2UgY29kZSAKKyggbm90IGFkdmlzYWJsZSBmb3Igc2hpcG1lbnQgKSBidXQgaXQgaXMgYW4gIGFpZCB0byB0aGUgZGVidWdnaW5nIHByb2Nlc3MuCisKK1RoaXMgYWlkcyBkZWJ1Z2dpbmcgYmVjYXVzZSB0aGUgY29tcGlsZXIgd2lsbCBjb3B5IHBhcmFtZXRlcnMgcGFzc2VkIGluCitpbiByZWdpc3RlcnMgb250byB0aGUgc3RhY2sgc28gYmFja3RyYWNpbmcgJiBsb29raW5nIGF0IHBhc3NlZCBpbgorcGFyYW1ldGVycyB3aWxsIHdvcmssIGhvd2V2ZXIgc29tZSBsYXJnZXIgcHJvZ3JhbXMgd2hpY2ggdXNlIGlubGluZSBmdW5jdGlvbnMKK3dpbGwgbm90IGNvbXBpbGUgd2l0aG91dCBvcHRpbWlzYXRpb24uCisKK0RlYnVnZ2luZyB3aXRoIG9wdGltaXNhdGlvbiBoYXMgc2luY2UgbXVjaCBpbXByb3ZlZCBhZnRlciBmaXhpbmcKK3NvbWUgYnVncywgcGxlYXNlIG1ha2Ugc3VyZSB5b3UgYXJlIHVzaW5nIGdkYi01LjAgb3IgbGF0ZXIgZGV2ZWxvcGVkIAorYWZ0ZXIgTm92JzIwMDAuCisKK0ZpZ3VyaW5nIG91dCBnY2MgY29tcGlsZSBlcnJvcnMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0lmIHlvdSBhcmUgZ2V0dGluZyBhIGxvdCBvZiBzeW50YXggZXJyb3JzIGNvbXBpbGluZyBhIHByb2dyYW0gJiB0aGUgcHJvYmxlbQoraXNuJ3QgYmxhdGFudGx5IG9idmlvdXMgZnJvbSB0aGUgc291cmNlLgorSXQgb2Z0ZW4gaGVscHMgdG8ganVzdCBwcmVwcm9jZXNzIHRoZSBmaWxlLCB0aGlzIGlzIGRvbmUgd2l0aCB0aGUgLUUKK29wdGlvbiBpbiBnY2MuCitXaGF0IHRoaXMgZG9lcyBpcyB0aGF0IGl0IHJ1bnMgdGhyb3VnaCB0aGUgdmVyeSBmaXJzdCBwaGFzZSBvZiBjb21waWxhdGlvbgorKCBjb21waWxhdGlvbiBpbiBnY2MgaXMgZG9uZSBpbiBzZXZlcmFsIHN0YWdlcyAmIGdjYyBjYWxscyBtYW55IHByb2dyYW1zIHRvCithY2hpZXZlIGl0cyBlbmQgcmVzdWx0ICkgd2l0aCB0aGUgLUUgb3B0aW9uIGdjYyBqdXN0IGNhbGxzIHRoZSBnY2MgcHJlcHJvY2Vzc29yIChjcHApLgorVGhlIGMgcHJlcHJvY2Vzc29yIGRvZXMgdGhlIGZvbGxvd2luZywgaXQgam9pbnMgYWxsIHRoZSBmaWxlcyAjaW5jbHVkZWQgdG9nZXRoZXIKK3JlY3Vyc2l2ZWx5ICggI2luY2x1ZGUgZmlsZXMgY2FuICNpbmNsdWRlIG90aGVyIGZpbGVzICkgJiBhbHNvIHRoZSBjIGZpbGUgeW91IHdpc2ggdG8gY29tcGlsZS4KK0l0IHB1dHMgYSBmdWxseSBxdWFsaWZpZWQgcGF0aCBvZiB0aGUgI2luY2x1ZGVkIGZpbGVzIGluIGEgY29tbWVudCAmIGl0Citkb2VzIG1hY3JvIGV4cGFuc2lvbi4KK1RoaXMgaXMgdXNlZnVsIGZvciBkZWJ1Z2dpbmcgYmVjYXVzZQorMSkgWW91IGNhbiBkb3VibGUgY2hlY2sgd2hldGhlciB0aGUgZmlsZXMgeW91IGV4cGVjdCB0byBiZSBpbmNsdWRlZCBhcmUgdGhlIG9uZXMKK3RoYXQgYXJlIGJlaW5nIGluY2x1ZGVkICggZS5nLiBkb3VibGUgY2hlY2sgdGhhdCB5b3UgYXJlbid0IGdvaW5nIHRvIHRoZSBpMzg2IGFzbSBkaXJlY3RvcnkgKS4KKzIpIENoZWNrIHRoYXQgbWFjcm8gZGVmaW5pdGlvbnMgYXJlbid0IGNsYXNoaW5nIHdpdGggdHlwZWRlZnMsCiszKSBDaGVjayB0aGF0IGRlZmluaXRvbnMgYXJlbid0IGJlaW5nIHVzZWQgYmVmb3JlIHRoZXkgYXJlIGJlaW5nIGluY2x1ZGVkLgorNCkgSGVscHMgcHV0IHRoZSBsaW5lIGVtaXR0aW5nIHRoZSBlcnJvciB1bmRlciB0aGUgbWljcm9zY29wZSBpZiBpdCBjb250YWlucyBtYWNyb3MuCisKK0ZvciBjb252ZW5pZW5jZSB0aGUgTGludXgga2VybmVsJ3MgbWFrZWZpbGUgd2lsbCBkbyBwcmVwcm9jZXNzaW5nIGF1dG9tYXRpY2FsbHkgZm9yIHlvdQorYnkgc3VmZml4aW5nIHRoZSBmaWxlIHlvdSB3YW50IGJ1aWx0IHdpdGggLmkgKCBpbnN0ZWFkIG9mIC5vICkKKworZS5nLgorZnJvbSB0aGUgbGludXggZGlyZWN0b3J5IHR5cGUKK21ha2UgYXJjaC9zMzkwL2tlcm5lbC9zaWduYWwuaQordGhpcyB3aWxsIGJ1aWxkCisKK3MzOTAtZ2NjIC1EX19LRVJORUxfXyAtSS9ob21lMS9iYXJyb3cvbGludXgvaW5jbHVkZSAtV2FsbCAtV3N0cmljdC1wcm90b3R5cGVzIC1PMiAtZm9taXQtZnJhbWUtcG9pbnRlcgorLWZuby1zdHJpY3QtYWxpYXNpbmcgLURfX1NNUF9fIC1waXBlIC1mbm8tc3RyZW5ndGgtcmVkdWNlICAgLUUgYXJjaC9zMzkwL2tlcm5lbC9zaWduYWwuYworPiBhcmNoL3MzOTAva2VybmVsL3NpZ25hbC5pICAKKworTm93IGxvb2sgYXQgc2lnbmFsLmkgeW91IHNob3VsZCBzZWUgc29tZXRoaW5nIGxpa2UuCisKKworIyAxICIvaG9tZTEvYmFycm93L2xpbnV4L2luY2x1ZGUvYXNtL3R5cGVzLmgiIDEKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgdW1vZGVfdDsKK3R5cGVkZWYgX19zaWduZWRfXyBjaGFyIF9fczg7Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191ODsKK3R5cGVkZWYgX19zaWduZWRfXyBzaG9ydCBfX3MxNjsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgX191MTY7CisKK0lmIGluc3RlYWQgeW91IGFyZSBnZXR0aW5nIGVycm9ycyBmdXJ0aGVyIGRvd24gZS5nLgordW5rbm93biBpbnN0cnVjdGlvbjoyNTE1ICJtb3ZlLmwiIG9yIGJldHRlciBzdGlsbCB1bmtub3duIGluc3RydWN0aW9uOjI1MTUgCisiRml4bWUgbm90IGltcGxlbWVudGVkIHlldCwgY2FsbCBNYXJ0aW4iIHlvdSBhcmUgcHJvYmFibHkgYXJlIGF0dGVtcHRpbmcgdG8gY29tcGlsZSBzb21lIGNvZGUgCittZWFudCBmb3IgYW5vdGhlciBhcmNoaXRlY3R1cmUgb3IgY29kZSB0aGF0IGlzIHNpbXBseSBub3QgaW1wbGVtZW50ZWQsIHdpdGggYSBmaXhtZSBzdGF0ZW1lbnQKK3N0dWNrIGludG8gdGhlIGlubGluZSBhc3NlbWJseSBjb2RlIHNvIHRoYXQgdGhlIGF1dGhvciBvZiB0aGUgZmlsZSBub3cga25vd3MgaGUgaGFzIHdvcmsgdG8gZG8uCitUbyBsb29rIGF0IHRoZSBhc3NlbWJseSBlbWl0dGVkIGJ5IGdjYyBqdXN0IGJlZm9yZSBpdCBpcyBhYm91dCB0byBjYWxsIGdhcyAoIHRoZSBnbnUgYXNzZW1ibGVyICkKK3VzZSB0aGUgLVMgb3B0aW9uLgorQWdhaW4gZm9yIHlvdXIgY29udmVuaWVuY2UgdGhlIExpbnV4IGtlcm5lbCdzIE1ha2VmaWxlIHdpbGwgaG9sZCB5b3VyIGhhbmQgJgorZG8gYWxsIHRoaXMgZG9ua2V5IHdvcmsgZm9yIHlvdSBhbHNvIGJ5IGJ1aWxkaW5nIHRoZSBmaWxlIHdpdGggdGhlIC5zIHN1ZmZpeC4KK2UuZy4KK2Zyb20gdGhlIExpbnV4IGRpcmVjdG9yeSB0eXBlIAorbWFrZSBhcmNoL3MzOTAva2VybmVsL3NpZ25hbC5zIAorCitzMzkwLWdjYyAtRF9fS0VSTkVMX18gLUkvaG9tZTEvYmFycm93L2xpbnV4L2luY2x1ZGUgLVdhbGwgLVdzdHJpY3QtcHJvdG90eXBlcyAtTzIgLWZvbWl0LWZyYW1lLXBvaW50ZXIKKy1mbm8tc3RyaWN0LWFsaWFzaW5nIC1EX19TTVBfXyAtcGlwZSAtZm5vLXN0cmVuZ3RoLXJlZHVjZSAgLVMgYXJjaC9zMzkwL2tlcm5lbC9zaWduYWwuYyAKKy1vIGFyY2gvczM5MC9rZXJuZWwvc2lnbmFsLnMgIAorCisKK1RoaXMgd2lsbCBvdXRwdXQgc29tZXRoaW5nIGxpa2UsICggcGxlYXNlIG5vdGUgdGhlIGNvbnN0YW50IHBvb2wgJiB0aGUgdXNlZnVsIGNvbW1lbnRzCitpbiB0aGUgcHJvbG9ndWUgdG8gZ2l2ZSB5b3UgYSBoYW5kIGF0IGludGVycHJldGluZyBpdCApLgorCisuTEM1NDoKKwkuc3RyaW5nCSJtaXNhbGlnbmVkIChfX3UxNiAqKSBpbiBfX3hjaGdcbiIKKy5MQzU3OgorCS5zdHJpbmcJIm1pc2FsaWduZWQgKF9fdTMyICopIGluIF9feGNoZ1xuIgorLkwkUEcxOiAjIFBvb2wgc3lzX3NpZ3N1c3BlbmQKKy5MQzE5MjoKKwkubG9uZwktMjYyNDAxCisuTEMxOTM6CisJLmxvbmcJLTEKKy5MQzE5NDoKKwkubG9uZwlzY2hlZHVsZS0uTCRQRzEKKy5MQzE5NToKKwkubG9uZwlkb19zaWduYWwtLkwkUEcxCisJLmFsaWduIDQKKy5nbG9ibCBzeXNfc2lnc3VzcGVuZAorCS50eXBlCSBzeXNfc2lnc3VzcGVuZCxAZnVuY3Rpb24KK3N5c19zaWdzdXNwZW5kOgorIwlsZWFmIGZ1bmN0aW9uICAgICAgICAgICAwCisjCWF1dG9tYXRpY3MgICAgICAgICAgICAgIDE2CisjCW91dGdvaW5nIGFyZ3MgICAgICAgICAgIDAKKyMJbmVlZCBmcmFtZSBwb2ludGVyICAgICAgMAorIwljYWxsIGFsbG9jYSAgICAgICAgICAgICAwCisjCWhhcyB2YXJhcmdzICAgICAgICAgICAgIDAKKyMJaW5jb21pbmcgYXJncyAoc3RhY2spICAgMAorIwlmdW5jdGlvbiBsZW5ndGggICAgICAgICAxNjgKKwlTVE0JOCwxNSwzMigxNSkKKwlMUgkwLDE1CisJQUhJCTE1LC0xMTIKKwlCQVNSCTEzLDAKKy5MJENPMToJQUhJCTEzLC5MJFBHMS0uTCRDTzEKKwlTVAkwLDAoMTUpCisJTFIgICAgOCwyCisJTiAgICAgNSwuTEMxOTItLkwkUEcxKDEzKSAKKworQWRkaW5nIC1nIHRvIHRoZSBhYm92ZSBvdXRwdXQgbWFrZXMgdGhlIG91dHB1dCBldmVuIG1vcmUgdXNlZnVsCitlLmcuIHR5cGluZworbWFrZSBDQzo9InMzOTAtZ2NjIC1nIiBrZXJuZWwvc2NoZWQucworCit3aGljaCBjb21waWxlcy4KK3MzOTAtZ2NjIC1nIC1EX19LRVJORUxfXyAtSS9ob21lL2JhcnJvdy9saW51eC0yLjMvaW5jbHVkZSAtV2FsbCAtV3N0cmljdC1wcm90b3R5cGVzIC1PMiAtZm9taXQtZnJhbWUtcG9pbnRlciAtZm5vLXN0cmljdC1hbGlhc2luZyAtcGlwZSAtZm5vLXN0cmVuZ3RoLXJlZHVjZSAgIC1TIGtlcm5lbC9zY2hlZC5jIC1vIGtlcm5lbC9zY2hlZC5zIAorCithbHNvIG91dHB1dHMgc3RhYnMgKCBkZWJ1Z2dlciApIGluZm8sIGZyb20gdGhpcyBpbmZvIHlvdSBjYW4gZmluZCBvdXQgdGhlCitvZmZzZXRzICYgc2l6ZXMgb2YgdmFyaW91cyBlbGVtZW50cyBpbiBzdHJ1Y3R1cmVzLgorZS5nLiB0aGUgc3RhYiBmb3IgdGhlIHN0cnVjdHVyZQorc3RydWN0IHJsaW1pdCB7CisJdW5zaWduZWQgbG9uZwlybGltX2N1cjsKKwl1bnNpZ25lZCBsb25nCXJsaW1fbWF4OworfTsKK2lzCisuc3RhYnMgInJsaW1pdDpUKDE1MSwyKT1zOHJsaW1fY3VyOigwLDUpLDAsMzI7cmxpbV9tYXg6KDAsNSksMzIsMzI7OyIsMTI4LDAsMCwwCitmcm9tIHRoaXMgc3RhYiB5b3UgY2FuIHNlZSB0aGF0IAorcmxpbWl0X2N1ciBzdGFydHMgYXQgYml0IG9mZnNldCAwICYgaXMgMzIgYml0cyBpbiBzaXplCitybGltaXRfbWF4IHN0YXJ0cyBhdCBiaXQgb2Zmc2V0IDMyICYgaXMgMzIgYml0cyBpbiBzaXplLgorCisKK0RlYnVnZ2luZyBUb29sczoKKz09PT09PT09PT09PT09PT0KKworb2JqZHVtcAorPT09PT09PQorVGhpcyBpcyBhIHRvb2wgd2l0aCBtYW55IG9wdGlvbnMgdGhlIG1vc3QgdXNlZnVsIGJlaW5nICggaWYgY29tcGlsZWQgd2l0aCAtZykuCitvYmpkdW1wIC0tc291cmNlIDx2aWN0aW0gcHJvZ3JhbSBvciBvYmplY3QgZmlsZT4gPiA8dmljdGltcyBkZWJ1ZyBsaXN0aW5nID4KKworCitUaGUgd2hvbGUga2VybmVsIGNhbiBiZSBjb21waWxlZCBsaWtlIHRoaXMgKCBEb2luZyB0aGlzIHdpbGwgbWFrZSBhIDE3TUIga2VybmVsCismIGEgMjAwIE1CIGxpc3RpbmcgKSBob3dldmVyIHlvdSBoYXZlIHRvIHN0cmlwIGl0IGJlZm9yZSBidWlsZGluZyB0aGUgaW1hZ2UKK3VzaW5nIHRoZSBzdHJpcCBjb21tYW5kIHRvIG1ha2UgaXQgYSBtb3JlIHJlYXNvbmFibGUgc2l6ZSB0byBib290IGl0LgorCitBIHNvdXJjZS9hc3NlbWJseSBtaXhlZCBkdW1wIG9mIHRoZSBrZXJuZWwgY2FuIGJlIGRvbmUgd2l0aCB0aGUgbGluZQorb2JqZHVtcCAtLXNvdXJjZSB2bWxpbnV4ID4gdm1saW51eC5sc3QKK0Fsc28gaWYgdGhlIGZpbGUgaXNuJ3QgY29tcGlsZWQgLWcgdGhpcyB3aWxsIG91dHB1dCBhcyBtdWNoIGRlYnVnZ2luZyBpbmZvcm1hdGlvbgorYXMgaXQgY2FuICggZS5nLiBmdW5jdGlvbiBuYW1lcyApLCBob3dldmVyLCB0aGlzIGlzIHZlcnkgc2xvdyBhcyBpdCBzcGVuZHMgbG90cworb2YgdGltZSBzZWFyY2hpbmcgZm9yIGRlYnVnZ2luZyBpbmZvLCB0aGUgZm9sbG93aW5nIHNlbGYgZXhwbGFuaXRvcnkgbGluZSBzaG91bGQgYmUgdXNlZCAKK2luc3RlYWQgaWYgdGhlIGNvZGUgaXNuJ3QgY29tcGlsZWQgLWcuCitvYmpkdW1wIC0tZGlzYXNzZW1ibGUtYWxsIC0tc3ltcyB2bWxpbnV4ID4gdm1saW51eC5sc3QgIAorYXMgaXQgaXMgbXVjaCBmYXN0ZXIKKworQXMgaGFyZCBkcml2ZSBzcGFjZSBpcyB2YWx1YmxlIG1vc3Qgb2YgdXMgdXNlIHRoZSBmb2xsb3dpbmcgYXBwcm9hY2guCisxKSBMb29rIGF0IHRoZSBlbWl0dGVkIHBzdyBvbiB0aGUgY29uc29sZSB0byBmaW5kIHRoZSBjcmFzaCBhZGRyZXNzIGluIHRoZSBrZXJuZWwuCisyKSBMb29rIGF0IHRoZSBmaWxlIFN5c3RlbS5tYXAgKCBpbiB0aGUgbGludXggZGlyZWN0b3J5ICkgcHJvZHVjZWQgd2hlbiBidWlsZGluZyAKK3RoZSBrZXJuZWwgdG8gZmluZCB0aGUgY2xvc2VzdCBhZGRyZXNzIGxlc3MgdGhhbiB0aGUgY3VycmVudCBQU1cgdG8gZmluZCB0aGUKK29mZmVuZGluZyBmdW5jdGlvbi4KKzMpIHVzZSBncmVwIG9yIHNpbWlsYXIgdG8gc2VhcmNoIHRoZSBzb3VyY2UgdHJlZSBsb29raW5nIGZvciB0aGUgc291cmNlIGZpbGUKKyB3aXRoIHRoaXMgZnVuY3Rpb24gaWYgeW91IGRvbid0IGtub3cgd2hlcmUgaXQgaXMuCis0KSByZWJ1aWxkIHRoaXMgb2JqZWN0IGZpbGUgd2l0aCAtZyBvbiwgYXMgYW4gZXhhbXBsZSBzdXBwb3NlIHRoZSBmaWxlIHdhcworKCAvYXJjaC9zMzkwL2tlcm5lbC9zaWduYWwubyApIAorNSkgQXNzdW1pbmcgdGhlIGZpbGUgd2l0aCB0aGUgZXJyb25lb3VzIGZ1bmN0aW9uIGlzIHNpZ25hbC5jIE1vdmUgdG8gdGhlIGJhc2Ugb2YgdGhlIAorTGludXggc291cmNlIHRyZWUuCis2KSBybSAvYXJjaC9zMzkwL2tlcm5lbC9zaWduYWwubworNykgbWFrZSAvYXJjaC9zMzkwL2tlcm5lbC9zaWduYWwubworOCkgd2F0Y2ggdGhlIGdjYyBjb21tYW5kIGxpbmUgZW1pdHRlZAorOSkgdHlwZSBpdCBpbiBhZ2FpbiBvciBhbGVybmF0aXZlbHkgY3V0ICYgcGFzdGUgaXQgb24gdGhlIGNvbnNvbGUgYWRkaW5nIHRoZSAtZyBvcHRpb24uCisxMCkgb2JqZHVtcCAtLXNvdXJjZSBhcmNoL3MzOTAva2VybmVsL3NpZ25hbC5vID4gc2lnbmFsLmxzdAorVGhpcyB3aWxsIG91dHB1dCB0aGUgc291cmNlICYgdGhlIGFzc2VtYmx5IGludGVybWl4ZWQsIGFzIHRoZSBzbmlwcGV0IGJlbG93IHNob3dzCitUaGlzIHdpbGwgdW5mb3J0dW5hdGVseSBvdXRwdXQgYWRkcmVzc2VzIHdoaWNoIGFyZW4ndCB0aGUgc2FtZQorYXMgdGhlIGtlcm5lbCBvbmVzIHlvdSBzaG91bGQgYmUgYWJsZSB0byBnZXQgYXJvdW5kIHRoZSBtZW50YWwgYXJpdGhtZXRpYworYnkgcGxheWluZyB3aXRoIHRoZSAtLWFkanVzdC12bWEgcGFyYW1ldGVyIHRvIG9iamR1bXAuCisKKworCisKK2V4dGVybiBpbmxpbmUgdm9pZCBzcGluX2xvY2soc3BpbmxvY2tfdCAqbHApCit7CisgICAgICBhMDogICAgICAgMTggMzQgICAgICAgICAgIGxyICAgICAgJXIzLCVyNAorICAgICAgYTI6ICAgICAgIGE3IDNhIDAzIGJjICAgICBhaGkgICAgICVyMyw5NTYKKyAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlKCIgICAgbGhpICAgMSwtMVxuIgorICAgICAgYTY6ICAgICAgIGE3IDE4IGZmIGZmICAgICBsaGkgICAgICVyMSwtMQorICAgICAgYWE6ICAgICAgIDFmIDAwICAgICAgICAgICBzbHIgICAgICVyMCwlcjAKKyAgICAgIGFjOiAgICAgICBiYSAwMSAzMCAwMCAgICAgY3MgICAgICAlcjAsJXIxLDAoJXIzKQorICAgICAgYjA6ICAgICAgIGE3IDQ0IGZmIGZkICAgICBqbSAgICAgIGFhIDxzeXNfc2lnc3VzcGVuZCsweDJlPgorICAgICAgICBzYXZlc2V0ID0gY3VycmVudC0+YmxvY2tlZDsKKyAgICAgIGI0OiAgICAgICBkMiAwNyBmMCA2OCAgICAgbXZjICAgICAxMDQoOCwlcjE1KSw5NzIoJXI0KQorICAgICAgYjg6ICAgICAgIDQzIGNjCisgICAgICAgIHJldHVybiAoc2V0LT5zaWdbMF0gJiBtYXNrKSAhPSAwOworfSAKKworNikgSWYgZGVidWdnaW5nIHVuZGVyIFZNIGdvIGRvd24gdG8gdGhhdCBzZWN0aW9uIGluIHRoZSBkb2N1bWVudCBmb3IgbW9yZSBpbmZvLgorCisKK0kgbm93IGhhdmUgYSB0b29sIHdoaWNoIHRha2VzIHRoZSBwYWluIG91dCBvZiAtLWFkanVzdC12bWEKKyYgeW91IGFyZSBhYmxlIHRvIGRvIHNvbWV0aGluZyBsaWtlCittYWtlIC9hcmNoL3MzOTAva2VybmVsL3RyYXBzLmxzdAorJiBpdCBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlcyB0aGUgY29ycmVjdGx5IHJlbG9jYXRlZCBlbnRyaWVzIGZvcgordGhlIHRleHQgc2VnbWVudCBpbiB0cmFwcy5sc3QuCitUaGlzIHRvb2wgaXMgbm93IHN0YW5kYXJkIGluIGxpbnV4IGRpc3RybydzIGluIHNjcmlwdHMvbWFrZWxzdAorCitzdHJhY2U6CistLS0tLS0tCitRLiBXaGF0IGlzIGl0ID8KK0EuIEl0IGlzIGEgdG9vbCBmb3IgaW50ZXJjZXB0aW5nIGNhbGxzIHRvIHRoZSBrZXJuZWwgJiBsb2dnaW5nIHRoZW0KK3RvIGEgZmlsZSAmIG9uIHRoZSBzY3JlZW4uCisKK1EuIFdoYXQgdXNlIGlzIGl0ID8KK0EuIFlvdSBjYW4gdXNlZCBpdCB0byBmaW5kIG91dCB3aGF0IGZpbGVzIGEgcGFydGljdWxhciBwcm9ncmFtIG9wZW5zLgorCisKKworRXhhbXBsZSAxCistLS0tLS0tLS0KK0lmIHlvdSB3YW50ZWQgdG8ga25vdyBkb2VzIHBpbmcgd29yayBidXQgZGlkbid0IGhhdmUgdGhlIHNvdXJjZSAKK3N0cmFjZSBwaW5nIC1jIDEgMTI3LjAuMC4xICAKKyYgdGhlbiBsb29rIGF0IHRoZSBtYW4gcGFnZXMgZm9yIGVhY2ggb2YgdGhlIHN5c2NhbGxzIGJlbG93LAorKCBJbiBmYWN0IHRoaXMgaXMgc29tZXRpbWVzIGVhc2llciB0aGFuIGxvb2tpbmcgYXQgc29tZSBzcGFnZXR0aQorc291cmNlIHdoaWNoIGNvbmRpdGlvbmFsbHkgY29tcGlsZXMgZm9yIHNldmVyYWwgYXJjaGl0ZWN0dXJlcyApCitOb3QgZXZlcnl0aGluZyB0aGF0IGl0IHRocm93cyBvdXQgbmVlZHMgdG8gbWFrZSBzZW5zZSBpbW1lYWRpYXRlbHkKKworSnVzdCBsb29raW5nIHF1aWNrbHkgeW91IGNhbiBzZWUgdGhhdCBpdCBpcyBtYWtpbmcgdXAgYSBSQVcgc29ja2V0Citmb3IgdGhlIElDTVAgcHJvdG9jb2wuCitEb2luZyBhbiBhbGFybSgxMCkgZm9yIGEgMTAgc2Vjb25kIHRpbWVvdXQKKyYgZG9pbmcgYSBnZXR0aW1lb2ZkYXkgY2FsbCBiZWZvcmUgJiBhZnRlciBlYWNoIHJlYWQgdG8gc2VlIAoraG93IGxvbmcgdGhlIHJlcGxpZXMgdG9vaywgJiB3cml0aW5nIHNvbWUgdGV4dCB0byBzdGRvdXQgc28gdGhlIHVzZXIKK2hhcyBhbiBpZGVhIHdoYXQgaXMgZ29pbmcgb24uCisKK3NvY2tldChQRl9JTkVULCBTT0NLX1JBVywgSVBQUk9UT19JQ01QKSA9IDMKK2dldHVpZCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDAKK3NldHVpZCgwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDAKK3N0YXQoIi91c3Ivc2hhcmUvbG9jYWxlL0MvbGliYy5jYXQiLCAweGJmZmZmMTM0KSA9IC0xIEVOT0VOVCAoTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSkKK3N0YXQoIi91c3Ivc2hhcmUvbG9jYWxlL2xpYmMvQyIsIDB4YmZmZmYxMzQpID0gLTEgRU5PRU5UIChObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5KQorc3RhdCgiL3Vzci9sb2NhbC9zaGFyZS9sb2NhbGUvQy9saWJjLmNhdCIsIDB4YmZmZmYxMzQpID0gLTEgRU5PRU5UIChObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5KQorZ2V0cGlkKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMzUzCitzZXRzb2Nrb3B0KDMsIFNPTF9TT0NLRVQsIFNPX0JST0FEQ0FTVCwgWzFdLCA0KSA9IDAKK3NldHNvY2tvcHQoMywgU09MX1NPQ0tFVCwgU09fUkNWQlVGLCBbNDkxNTJdLCA0KSA9IDAKK2ZzdGF0KDEsIHtzdF9tb2RlPVNfSUZDSFJ8MDYyMCwgc3RfcmRldj1tYWtlZGV2KDMsIDEpLCAuLi59KSA9IDAKK21tYXAoMCwgNDA5NiwgUFJPVF9SRUFEfFBST1RfV1JJVEUsIE1BUF9QUklWQVRFfE1BUF9BTk9OWU1PVVMsIC0xLCAwKSA9IDB4NDAwMDgwMDAKK2lvY3RsKDEsIFRDR0VUUywge0I5NjAwIG9wb3N0IGlzaWcgaWNhbm9uIGVjaG8gLi4ufSkgPSAwCit3cml0ZSgxLCAiUElORyAxMjcuMC4wLjEgKDEyNy4wLjAuMSk6IDU2IGQiLi4uLCA0MlBJTkcgMTI3LjAuMC4xICgxMjcuMC4wLjEpOiA1NiBkYXRhIGJ5dGVzCispID0gNDIKK3NpZ2FjdGlvbihTSUdJTlQsIHsweDgwNDliYTAsIFtdLCBTQV9SRVNUQVJUfSwge1NJR19ERkx9KSA9IDAgCitzaWdhY3Rpb24oU0lHQUxSTSwgezB4ODA0OTYwMCwgW10sIFNBX1JFU1RBUlR9LCB7U0lHX0RGTH0pID0gMAorZ2V0dGltZW9mZGF5KHs5NDg5MDQ3MTksIDEzODk1MX0sIE5VTEwpID0gMAorc2VuZHRvKDMsICJcMTBcMERcMjAxYVwxXDBcMFwxNyNcMjE3OFwzMDdcMzYiLi4uLCA2NCwgMCwge3Npbl9mYW1pbHk9QUZfSU5FVCwKK3Npbl9wb3J0PWh0b25zKDApLCBzaW5fYWRkcj1pbmV0X2FkZHIoIjEyNy4wLjAuMSIpfSwgMTYpID0gNjQKK3NpZ2FjdGlvbihTSUdBTFJNLCB7MHg4MDQ5NjAwLCBbXSwgU0FfUkVTVEFSVH0sIHsweDgwNDk2MDAsIFtdLCBTQV9SRVNUQVJUfSkgPSAwCitzaWdhY3Rpb24oU0lHQUxSTSwgezB4ODA0OWJhMCwgW10sIFNBX1JFU1RBUlR9LCB7MHg4MDQ5NjAwLCBbXSwgU0FfUkVTVEFSVH0pID0gMAorYWxhcm0oMTApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMAorcmVjdmZyb20oMywgIkVcMFwwVFwwMDA1XDBcMEBcMXxyXDE3N1wwXDBcMVwxNzciLi4uLCAxOTIsIDAsIAore3Npbl9mYW1pbHk9QUZfSU5FVCwgc2luX3BvcnQ9aHRvbnMoNTA4ODIpLCBzaW5fYWRkcj1pbmV0X2FkZHIoIjEyNy4wLjAuMSIpfSwgWzE2XSkgPSA4NAorZ2V0dGltZW9mZGF5KHs5NDg5MDQ3MTksIDE2MDIyNH0sIE5VTEwpID0gMAorcmVjdmZyb20oMywgIkVcMFwwVFwwMDA2XDBcMFwzNzdcMVwyNzVwXDE3N1wwIi4uLiwgMTkyLCAwLCAKK3tzaW5fZmFtaWx5PUFGX0lORVQsIHNpbl9wb3J0PWh0b25zKDUwODgyKSwgc2luX2FkZHI9aW5ldF9hZGRyKCIxMjcuMC4wLjEiKX0sIFsxNl0pID0gODQKK2dldHRpbWVvZmRheSh7OTQ4OTA0NzE5LCAxNjY5NTJ9LCBOVUxMKSA9IDAKK3dyaXRlKDEsICI2NCBieXRlcyBmcm9tIDEyNy4wLjAuMTogaWNtcF9zZSIuLi4sIAorNTc2NCBieXRlcyBmcm9tIDEyNy4wLjAuMTogaWNtcF9zZXE9MCB0dGw9MjU1IHRpbWU9MjguMCBtcworCitFeGFtcGxlIDIKKy0tLS0tLS0tLQorc3RyYWNlIHBhc3N3ZCAyPiYxIHwgZ3JlcCBvcGVuCitwcm9kdWNlcyB0aGUgZm9sbG93aW5nIG91dHB1dAorb3BlbigiL2V0Yy9sZC5zby5jYWNoZSIsIE9fUkRPTkxZKSAgICAgID0gMworb3BlbigiL29wdC9rZGUvbGliL2xpYmMuc28uNSIsIE9fUkRPTkxZKSA9IC0xIEVOT0VOVCAoTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSkKK29wZW4oIi9saWIvbGliYy5zby41IiwgT19SRE9OTFkpICAgICAgICA9IDMKK29wZW4oIi9kZXYiLCBPX1JET05MWSkgICAgICAgICAgICAgICAgICA9IDMKK29wZW4oIi92YXIvcnVuL3V0bXAiLCBPX1JET05MWSkgICAgICAgICA9IDMKK29wZW4oIi9ldGMvcGFzc3dkIiwgT19SRE9OTFkpICAgICAgICAgICA9IDMKK29wZW4oIi9ldGMvc2hhZG93IiwgT19SRE9OTFkpICAgICAgICAgICA9IDMKK29wZW4oIi9ldGMvbG9naW4uZGVmcyIsIE9fUkRPTkxZKSAgICAgICA9IDQKK29wZW4oIi9kZXYvdHR5IiwgT19SRE9OTFkpICAgICAgICAgICAgICA9IDQgCisKK1RoZSAyPiYxIGlzIGRvbmUgdG8gcmVkaXJlY3Qgc3RkZXJyIHRvIHN0ZG91dCAmIGdyZXAgaXMgdGhlbiBmaWx0ZXJpbmcgdGhpcyBpbnB1dCAKK3Rocm91Z2ggdGhlIHBpcGUgZm9yIGVhY2ggbGluZSBjb250YWluaW5nIHRoZSBzdHJpbmcgb3Blbi4KKworCitFeGFtcGxlIDMKKy0tLS0tLS0tLQorR2V0dGluZyBzb3BoaXN0b2NhdGVkCit0ZWxuZXRkIGNyYXNoZXMgb24gJiBJIGRvbid0IGtub3cgd2h5CitTdGVwcworLS0tLS0KKzEpIFJlcGxhY2UgdGhlIGZvbGxvd2luZyBsaW5lIGluIC9ldGMvaW5ldGQuY29uZgordGVsbmV0ICBzdHJlYW0gIHRjcCAgICAgbm93YWl0ICByb290ICAgIC91c3Ivc2Jpbi9pbi50ZWxuZXRkIC1oIAord2l0aAordGVsbmV0ICBzdHJlYW0gIHRjcCAgICAgbm93YWl0ICByb290ICAgIC9ibGFoCisKKzIpIENyZWF0ZSB0aGUgZmlsZSAvYmxhaCB3aXRoIHRoZSBmb2xsb3dpbmcgY29udGVudHMgdG8gc3RhcnQgdHJhY2luZyB0ZWxuZXRkIAorIyEvYmluL2Jhc2gKKy91c3IvYmluL3N0cmFjZSAtby90MSAtZiAvdXNyL3NiaW4vaW4udGVsbmV0ZCAtaCAKKzMpIGNobW9kIDcwMCAvYmxhaCB0byBtYWtlIGl0IGV4ZWN1dGFibGUgb25seSB0byByb290Cis0KQora2lsbGFsbCAtSFVQIGluZXRkCitvciBwcyBhdXggfCBncmVwIGluZXRkCitnZXQgaW5ldGQncyBwcm9jZXNzIGlkCismIGtpbGwgLUhVUCBpbmV0ZCB0byByZXN0YXJ0IGl0LgorCitJbXBvcnRhbnQgb3B0aW9ucworLS0tLS0tLS0tLS0tLS0tLS0KKy1vIGlzIHVzZWQgdG8gdGVsbCBzdHJhY2UgdG8gb3V0cHV0IHRvIGEgZmlsZSBpbiBvdXIgY2FzZSB0MSBpbiB0aGUgcm9vdCBkaXJlY3RvcnkKKy1mIGlzIHRvIGZvbGxvdyBjaGlsZHJlbiBpLmUuCitlLmcgaW4gb3VyIGNhc2UgYWJvdmUgdGVsbmV0ZCB3aWxsIHN0YXJ0IHRoZSBsb2dpbiBwcm9jZXNzICYgc3Vic2VxdWVudGx5IGEgc2hlbGwgbGlrZSBiYXNoLgorWW91IHdpbGwgYmUgYWJsZSB0byB0ZWxsIHdoaWNoIGlzIHdoaWNoIGZyb20gdGhlIHByb2Nlc3MgSUQncyBsaXN0ZWQgb24gdGhlIGxlZnQgaGFuZCBzaWRlCitvZiB0aGUgc3RyYWNlIG91dHB1dC4KKy1wPHBpZD4gd2lsbCB0ZWxsIHN0cmFjZSB0byBhdHRhY2ggdG8gYSBydW5uaW5nIHByb2Nlc3MsIHl1cCB0aGlzIGNhbiBiZSBkb25lIHByb3ZpZGVkCisgaXQgaXNuJ3QgYmVpbmcgdHJhY2VkIG9yIGRlYnVnZ2VkIGFscmVhZHkgJiB5b3UgaGF2ZSBlbm91Z2ggcHJpdmlsZWdlcywKK3RoZSByZWFzb24gMiBwcm9jZXNzZXMgY2Fubm90IHRyYWNlIG9yIGRlYnVnIHRoZSBzYW1lIHByb2dyYW0gaXMgdGhhdCBzdHJhY2UKK2JlY29tZXMgdGhlIHBhcmVudCBwcm9jZXNzIG9mIHRoZSBvbmUgYmVpbmcgZGVidWdnZWQgJiBwcm9jZXNzZXMgKCB1bmxpa2UgcGVvcGxlICkKK2NhbiBoYXZlIG9ubHkgb25lIHBhcmVudC4KKworCitIb3dldmVyIHRoZSBmaWxlIC90MSB3aWxsIGdldCBiaWcgcXVpdGUgcXVpY2tseQordG8gdGVzdCBpdCB0ZWxuZXQgMTI3LjAuMC4xCisKK25vdyBsb29rIGF0IHdoYXQgZmlsZXMgaW4udGVsbmV0ZCBleGVjdmUnZAorNDEzICAgZXhlY3ZlKCIvdXNyL3NiaW4vaW4udGVsbmV0ZCIsIFsiL3Vzci9zYmluL2luLnRlbG5ldGQiLCAiLWgiXSwgWy8qIDE3IHZhcnMgKi9dKSA9IDAKKzQxNCAgIGV4ZWN2ZSgiL2Jpbi9sb2dpbiIsIFsiL2Jpbi9sb2dpbiIsICItaCIsICJsb2NhbGhvc3QiLCAiLXAiXSwgWy8qIDIgdmFycyAqL10pID0gMCAKKworV2hleSBpdCB3b3JrZWQhLgorCisKK090aGVyIGhpbnRzOgorLS0tLS0tLS0tLS0tCitJZiB0aGUgcHJvZ3JhbSBpcyBub3QgdmVyeSBpbnRlcmFjdGl2ZSAoIGkuZS4gbm90IG11Y2gga2V5Ym9hcmQgaW5wdXQgKQorJiBpcyBjcmFzaGluZyBpbiBvbmUgYXJjaGl0ZWN0dXJlIGJ1dCBub3QgaW4gYW5vdGhlciB5b3UgY2FuIGRvIAorYW4gc3RyYWNlIG9mIGJvdGggcHJvZ3JhbXMgdW5kZXIgYXMgaWRlbnRpY2FsIGEgc2NlbmFyaW8gYXMgeW91IGNhbgorb24gYm90aCBhcmNoaXRlY3R1cmVzIG91dHB1dHRpbmcgdG8gYSBmaWxlIHRoZW4uCitkbyBhIGRpZmYgb2YgdGhlIHR3byB0cmFjZXMgdXNpbmcgdGhlIGRpZmYgcHJvZ3JhbQoraS5lLgorZGlmZiBvdXRwdXQxIG91dHB1dDIKKyYgbWF5YmUgeW91J2xsIGJlIGFibGUgdG8gc2VlIHdoZXJlIHRoZSBjYWxsIHBhdGhzIGRpZmZlcmVkLCB0aGlzCitpcyBwb3NzaWJseSBuZWFyIHRoZSBjYXVzZSBvZiB0aGUgY3Jhc2guIAorCitNb3JlIGluZm8KKy0tLS0tLS0tLQorTG9vayBhdCBtYW4gcGFnZXMgZm9yIHN0cmFjZSAmIHRoZSB2YXJpb3VzIHN5c2NhbGxzCitlLmcuIG1hbiBzdHJhY2UsIG1hbiBhbGFybSwgbWFuIHNvY2tldC4KKworCitQZXJmb3JtYW5jZSBEZWJ1Z2dpbmcKKz09PT09PT09PT09PT09PT09PT09PQorZ2NjIGlzIGNhcGlibGUgb2YgY29tcGlsaW5nIGluIHByb2ZpbGluZyBjb2RlIGp1c3QgYWRkIHRoZSAtcCBvcHRpb24KK3RvIHRoZSBDRkxBR1MsIHRoaXMgb2J2aW91c2x5IGFmZmVjdHMgcHJvZ3JhbSBzaXplICYgcGVyZm9ybWFuY2UuCitUaGlzIGNhbiBiZSB1c2VkIGJ5IHRoZSBncHJvZiBnbnUgcHJvZmlsaW5nIHRvb2wgb3IgdGhlCitnY292IHRoZSBnbnUgY29kZSBjb3ZlcmFnZSB0b29sICggY29kZSBjb3ZlcmFnZSBpcyBhIG1lYW5zIG9mIHRlc3RpbmcKK2NvZGUgcXVhbGl0eSBieSBjaGVja2luZyBpZiBhbGwgdGhlIGNvZGUgaW4gYW4gZXhlY3V0YWJsZSBpbiBleGVyY2lzZWQgYnkKK2EgdGVzdGVyICkuCisKKworVXNpbmcgdG9wIHRvIGZpbmQgb3V0IHdoZXJlIHByb2Nlc3NlcyBhcmUgc2xlZXBpbmcgaW4gdGhlIGtlcm5lbAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVG8gZG8gdGhpcyBjb3B5IHRoZSBTeXN0ZW0ubWFwIGZyb20gdGhlIHJvb3QgZGlyZWN0b3J5IHdoZXJlCit0aGUgbGludXgga2VybmVsIHdhcyBidWlsdCB0byB0aGUgL2Jvb3QgZGlyZWN0b3J5IG9uIHlvdXIgCitsaW51eCBtYWNoaW5lLgorU3RhcnQgdG9wCitOb3cgdHlwZSBmVTxyZXR1cm4+CitZb3Ugc2hvdWxkIHNlZSBhIG5ldyBmaWVsZCBjYWxsZWQgV0NIQU4gd2hpY2gKK3RlbGxzIHlvdSB3aGVyZSBlYWNoIHByb2Nlc3MgaXMgc2xlZXBpbmcgaGVyZSBpcyBhIHR5cGljYWwgb3V0cHV0LgorIAorIDY6NTlwbSAgdXAgNDEgbWluLCAgMSB1c2VyLCAgbG9hZCBhdmVyYWdlOiAwLjAwLCAwLjAwLCAwLjAwCisyOCBwcm9jZXNzZXM6IDI3IHNsZWVwaW5nLCAxIHJ1bm5pbmcsIDAgem9tYmllLCAwIHN0b3BwZWQKK0NQVSBzdGF0ZXM6ICAwLjAlIHVzZXIsICAwLjElIHN5c3RlbSwgIDAuMCUgbmljZSwgOTkuOCUgaWRsZQorTWVtOiAgIDI1NDkwMEsgYXYsICAgNDU5NzZLIHVzZWQsICAyMDg5MjRLIGZyZWUsICAgICAgIDBLIHNocmQsICAgMjg2MzZLIGJ1ZmYKK1N3YXA6ICAgICAgIDBLIGF2LCAgICAgICAwSyB1c2VkLCAgICAgICAwSyBmcmVlICAgICAgICAgICAgICAgICAgICA4NjIwSyBjYWNoZWQKKworICBQSUQgVVNFUiAgICAgUFJJICBOSSAgU0laRSAgUlNTIFNIQVJFIFdDSEFOICAgICBTVEFUICBMSUIgJUNQVSAlTUVNICAgVElNRSBDT01NQU5ECisgIDc1MCByb290ICAgICAgMTIgICAwICAgODQ4ICA4NDggICA3MDAgZG9fc2VsZWN0IFMgICAgICAgMCAgMC4xICAwLjMgICAwOjAwIGluLnRlbG5ldGQKKyAgNzY3IHJvb3QgICAgICAxNiAgIDAgIDExNDAgMTE0MCAgIDk2NCAgICAgICAgICAgUiAgICAgICAwICAwLjEgIDAuNCAgIDA6MDAgdG9wCisgICAgMSByb290ICAgICAgIDggICAwICAgMjEyICAyMTIgICAxODAgZG9fc2VsZWN0IFMgICAgICAgMCAgMC4wICAwLjAgICAwOjAwIGluaXQKKyAgICAyIHJvb3QgICAgICAgOSAgIDAgICAgIDAgICAgMCAgICAgMCBkb3duX2ludGUgU1cgICAgICAwICAwLjAgIDAuMCAgIDA6MDAga21jaGVjaworCitUaGUgdGltZSBjb21tYW5kCistLS0tLS0tLS0tLS0tLS0tCitBbm90aGVyIHJlbGF0ZWQgY29tbWFuZCBpcyB0aGUgdGltZSBjb21tYW5kIHdoaWNoIGdpdmVzIHlvdSBhbiBpbmRpY2F0aW9uCitvZiB3aGVyZSBhIHByb2Nlc3MgaXMgc3BlbmRpbmcgdGhlIG1ham9yaXR5IG9mIGl0cyB0aW1lLgorZS5nLgordGltZSBwaW5nIC1jIDUgbmMKK291dHB1dHMKK3JlYWwJMG00LjA1NHMKK3VzZXIJMG0wLjAxMHMKK3N5cwkwbTAuMDEwcworCitEZWJ1Z2dpbmcgdW5kZXIgVk0KKz09PT09PT09PT09PT09PT09PQorCitOb3RlcworLS0tLS0KK0FkZHJlc3NlcyAmIHZhbHVlcyBpbiB0aGUgVk0gZGVidWdnZXIgYXJlIGFsd2F5cyBoZXggbmV2ZXIgZGVjaW1hbAorQWRkcmVzcyByYW5nZXMgYXJlIG9mIHRoZSBmb3JtYXQgPEhleFZhbHVlMT4tPEhleFZhbHVlMj4gb3IgPEhleFZhbHVlMT4uPEhleFZhbHVlMj4gCitlLmcuIFRoZSBhZGRyZXNzIHJhbmdlICAweDIwMDAgdG8gMHgzMDAwIGNhbiBiZSBkZXNjcmliZWQgZGVzY3JpYmVkIGFzCisyMDAwLTMwMDAgb3IgMjAwMC4xMDAwCisKK1RoZSBWTSBEZWJ1Z2dlciBpcyBjYXNlIGluc2Vuc2l0aXZlLgorCitWTSdzIHN0cmVuZ3RocyBhcmUgdXN1YWxseSBvdGhlciBkZWJ1Z2dlcnMgd2Vha25lc3NlcyB5b3UgY2FuIGdldCBhdCBhbnkgcmVzb3VyY2UKK25vIG1hdHRlciBob3cgc2Vuc2l0aXZlIGUuZy4gbWVtb3J5IG1hbmFnZW1lbnQgcmVzb3VyY2VzLGNoYW5nZSBhZGRyZXNzIHRyYW5zbGF0aW9uCitpbiB0aGUgUFNXLiBGb3Iga2VybmVsIGhhY2tpbmcgeW91IHdpbGwgcmVhcCBkaXZpZGVuZHMgaWYgeW91IGdldCBnb29kIGF0IGl0LgorCitUaGUgVk0gRGVidWdnZXIgZGlzcGxheXMgb3BlcmF0b3JzIGJ1dCBub3Qgb3BlcmFuZHMsIHByb2JhYmx5IGJlY2F1c2Ugc29tZQorb2YgaXQgd2FzIHdyaXR0ZW4gd2hlbiBtZW1vcnkgd2FzIGV4cGVuc2l2ZSAmIHRoZSBwcm9ncmFtbWVyIHdhcyBwcm9iYWJseSBwcm91ZCB0aGF0CitpdCBmaXR0ZWQgaW50byAyayBvZiBtZW1vcnkgJiB0aGUgcHJvZ3JhbW1lcnMgJiBkaWRuJ3Qgd2FudCB0byBzaG9jayBoYXJkY29yZSBWTSdlcnMgYnkKK2NoYW5naW5nIHRoZSBpbnRlcmZhY2UgOi0pLCBhbHNvIHRoZSBkZWJ1Z2dlciBkaXNwbGF5cyB1c2VmdWwgaW5mb3JtYXRpb24gb24gdGhlIHNhbWUgbGluZSAmIAordGhlIGF1dGhvciBvZiB0aGUgY29kZSBwcm9iYWJseSBmZWx0IHRoYXQgaXQgd2FzIGEgZ29vZCBpZGVhIG5vdCB0byBnbyBvdmVyIAordGhlIDgwIGNvbHVtbnMgb24gdGhlIHNjcmVlbi4gCisKK0FzIHNvbWUgb2YgeW91IGFyZSBwcm9iYWJseSBpbiBhIHBhbmljIG5vdyB0aGlzIGlzbid0IGFzIHVuaW50dWl0aXZlIGFzIGl0IG1heSBzZWVtCithcyB0aGUgMzkwIGluc3RydWN0aW9ucyBhcmUgZWFzeSB0byBkZWNvZGUgbWVudGFsbHkgJiB5b3UgY2FuIG1ha2UgYSBnb29kIGd1ZXNzIGF0IGEgbG90IAorb2YgdGhlbSBhcyBhbGwgdGhlIG9wZXJhbmRzIGFyZSBuaWJibGUgKCBoYWxmIGJ5dGUgYWxpZ25lZCApICYgaWYgeW91IGhhdmUgYW4gb2JqZHVtcCBsaXN0aW5nCithbHNvIGl0IGlzIHF1aXRlIGVhc3kgdG8gZm9sbG93LCBpZiB5b3UgZG9uJ3QgaGF2ZSBhbiBvYmpkdW1wIGxpc3Rpbmcga2VlcCBhIGNvcHkgb2YKK3RoZSBzLzM5MCBSZWZlcmVuY2UgU3VtbWFyeSAmIGxvb2sgYXQgYmV0d2VlbiBwYWdlcyAyICYgNyBvciBhbHRlcm5hdGl2ZWx5IHRoZQorcy8zOTAgcHJpbmNpcGxlcyBvZiBvcGVyYXRpb24uCitlLmcuIGV2ZW4gSSBjYW4gZ3Vlc3MgdGhhdCAKKzAwMDFBRkY4JyBMUiAgICAxODBGICAgICAgICBDQyAwCitpcyBhICggbG9hZCByZWdpc3RlciApIGxyIHIwLHIxNSAKKworQWxzbyBpdCBpcyB2ZXJ5IGVhc3kgdG8gdGVsbCB0aGUgbGVuZ3RoIG9mIGEgMzkwIGluc3RydWN0aW9uIGZyb20gdGhlIDIgbW9zdCBzaWduaWZpY2FudAorYml0cyBpbiB0aGUgaW5zdHJ1Y3Rpb24gKCBub3QgdGhhdCB0aGlzIGluZm8gaXMgcmVhbGx5IHVzZWZ1bCBleGNlcHQgaWYgeW91IGFyZSB0cnlpbmcgdG8KK21ha2Ugc2Vuc2Ugb2YgYSBoZXhkdW1wIG9mIGNvZGUgKS4KK0hlcmUgaXMgYSB0YWJsZQorQml0cyAgICAgICAgICAgICAgICAgICAgSW5zdHJ1Y3Rpb24gTGVuZ3RoCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzAwICAgICAgICAgICAgICAgICAgICAgICAgICAyIEJ5dGVzCiswMSAgICAgICAgICAgICAgICAgICAgICAgICAgNCBCeXRlcworMTAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgQnl0ZXMKKzExICAgICAgICAgICAgICAgICAgICAgICAgICA2IEJ5dGVzCisKKworCisKK1RoZSBkZWJ1Z2dlciBhbHNvIGRpc3BsYXlzIG90aGVyIHVzZWZ1bCBpbmZvIG9uIHRoZSBzYW1lIGxpbmUgc3VjaCBhcyB0aGUKK2FkZHJlc3NlcyBiZWluZyBvcGVyYXRlZCBvbiBkZXN0aW5hdGlvbiBhZGRyZXNzZXMgb2YgYnJhbmNoZXMgJiBjb25kaXRpb24gY29kZXMuCitlLmcuICAKKzAwMDE5NzM2JyBBSEkgICBBN0RBRkYwRSAgICBDQyAxCiswMDAxOThCQScgQlJDICAgQTc4NDAwMDQgLT4gMDAwMTk4QzInICAgQ0MgMAorMDAwMTk4Q0UnIFNUTSAgIDkwMEVGMDY4ID4+IDBGQTk1RTc4ICAgIENDIDIKKworCisKK1VzZWZ1bCBWTSBkZWJ1Z2dlciBjb21tYW5kcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0kgc3VwcG9zZSBJJ2QgYmV0dGVyIG1lbnRpb24gdGhpcyBiZWZvcmUgSSBzdGFydAordG8gbGlzdCB0aGUgY3VycmVudCBhY3RpdmUgdHJhY2VzIGRvIAorUSBUUgordGhlcmUgY2FuIGJlIGEgbWF4aW11bSBvZiAyNTUgb2YgdGhlc2UgcGVyIHNldAorKCBtb3JlIGFib3V0IHRyYWNlIHNldHMgbGF0ZXIgKS4KK1RvIHN0b3AgdHJhY2VzIGlzc3VlIGEKK1RSIEVORC4KK1RvIGRlbGV0ZSBhIHBhcnRpY3VsYXIgYnJlYWtwb2ludCBpc3N1ZQorVFIgREVMIDxicmVha3BvaW50IG51bWJlcj4KKworVGhlIFBBMSBrZXkgZHJvcHMgdG8gQ1AgbW9kZSBzbyB5b3UgY2FuIGlzc3VlIGRlYnVnZ2VyIGNvbW1hbmRzLAorRG9pbmcgYWx0IGMgKG9uIG15IDMyNzAgY29uc29sZSBhdCBsZWFzdCApIGNsZWFycyB0aGUgc2NyZWVuLiAKK2hpdHRpbmcgYiA8ZW50ZXI+IGNvbWVzIGJhY2sgdG8gdGhlIHJ1bm5pbmcgb3BlcmF0aW5nIHN5c3RlbQorZnJvbSBjcCBtb2RlICggaW4gb3VyIGNhc2UgbGludXggKS4KK0l0IGlzIHR5cGljYWxseSB1c2VmdWwgdG8gYWRkIHNob3J0Y3V0cyB0byB5b3VyIHByb2ZpbGUuZXhlYyBmaWxlCitpZiB5b3UgaGF2ZSBvbmUgKCB0aGlzIGlzIHJvdWdobHkgZXF1aXZhbGVudCB0byBhdXRvZXhlYy5iYXQgaW4gRE9TICkuCitmaWxlIGhlcmUgYXJlIGEgZmV3IGZyb20gbWluZS4KKy8qIHRoaXMgZ2l2ZXMgbWUgY29tbWFuZCBoaXN0b3J5IG9uIGlzc3VpbmcgZjEyICovCitzZXQgcGYxMiByZXRyaWV2ZSAKKy8qIHRoaXMgY29udGludWVzICovCitzZXQgcGY4IGltbSBiCisvKiBnb2VzIHRvIHRyYWNlIHNldCBhICovCitzZXQgcGYxIGltbSB0ciBnb3RvIGEKKy8qIGdvZXMgdG8gdHJhY2Ugc2V0IGIgKi8KK3NldCBwZjIgaW1tIHRyIGdvdG8gYgorLyogZ29lcyB0byB0cmFjZSBzZXQgYyAqLworc2V0IHBmMyBpbW0gdHIgZ290byBjCisKKworCitJbnN0cnVjdGlvbiBUcmFjaW5nCistLS0tLS0tLS0tLS0tLS0tLS0tCitTZXR0aW5nIGEgc2ltcGxlIGJyZWFrcG9pbnQKK1RSIEkgUFNXQSA8YWRkcmVzcz4KK1RvIGRlYnVnIGEgcGFydGljdWxhciBmdW5jdGlvbiB0cnkKK1RSIEkgUiA8ZnVuY3Rpb24gYWRkcmVzcyByYW5nZT4KK1RSIEkgb24gaXRzIG93biB3aWxsIHNpbmdsZSBzdGVwLgorVFIgSSBEQVRBIDxNTkVNT05JQz4gPE9QVElPTkFMIFJBTkdFPiB3aWxsIHRyYWNlIGZvciBwYXJ0aWN1bGFyIG1uZW1vbmljcworZS5nLgorVFIgSSBEQVRBIDREIFIgMDE5N0JDLjQwMDAKK3dpbGwgdHJhY2UgZm9yIEJBUydlcyAoIG9wY29kZSA0RCApIGluIHRoZSByYW5nZSAwMTk3QkMuNDAwMAoraWYgeW91IHdlcmUgaW5jbGluZWQgeW91IGNvdWxkIGFkZCB0cmFjZXMgZm9yIGFsbCBicmFuY2ggaW5zdHJ1Y3Rpb25zICYKK3N1ZmZpeCB0aGVtIHdpdGggdGhlIHJ1biBwcmVmaXggc28geW91IHdvdWxkIGhhdmUgYSBiYWNrdHJhY2Ugb24gc2NyZWVuIAord2hlbiBhIHByb2dyYW0gY3Jhc2hlcy4KK1RSIEJSIDxJTlRPIE9SIEZST00+IHdpbGwgdHJhY2UgYnJhbmNoZXMgaW50byBvciBvdXQgb2YgYW4gYWRkcmVzcy4KK2UuZy4KK1RSIEJSIElOVE8gMCBpcyBvZnRlbiBxdWl0ZSB1c2VmdWwgaWYgYSBwcm9ncmFtIGlzIGdldHRpbmcgYXdrd2FyZCAmIGRlY2lkaW5nCit0byBicmFuY2ggdG8gMCAmIGNyYXNoaW5nIGFzIHRoaXMgd2lsbCBzdG9wIGF0IHRoZSBhZGRyZXNzIGJlZm9yZSBpbiBqdW1wcyB0byAwLgorVFIgSSBSIDxhZGRyZXNzIHJhbmdlPiBSVU4gY21kIGQgZworc2luZ2xlIHN0ZXBzIGEgcmFuZ2Ugb2YgYWRkcmVzc2VzIGJ1dCBzdGF5cyBydW5uaW5nICYKK2Rpc3BsYXlzIHRoZSBncHJzIG9uIGVhY2ggc3RlcC4KKworCisKK0Rpc3BsYXlpbmcgJiBtb2RpZnlpbmcgUmVnaXN0ZXJzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorRCBHIHdpbGwgZGlzcGxheSBhbGwgdGhlIGdwcnMKK0FkZGluZyBhIGV4dHJhIEcgdG8gYWxsIHRoZSBjb21tYW5kcyBpcyBuZWNlc3NhcnkgdG8gYWNjZXNzIHRoZSBmdWxsIDY0IGJpdCAKK2NvbnRlbnQgaW4gVk0gb24gei9BcmNoaXRlY3R1cmUgb2J2aW91c2x5IHRoaXMgaXNuJ3QgcmVxdWlyZWQgZm9yIGFjY2VzcyByZWdpc3RlcnMKK2FzIHRoZXNlIGFyZSBzdGlsbCAzMiBiaXQuCitlLmcuIERHRyBpbnN0ZWFkIG9mIERHIAorRCBYIHdpbGwgZGlzcGxheSBhbGwgdGhlIGNvbnRyb2wgcmVnaXN0ZXJzCitEIEFSIHdpbGwgZGlzcGxheSBhbGwgdGhlIGFjY2VzcyByZWdpc3RlcnMKK0QgQVI0LTcgd2lsbCBkaXNwbGF5IGFjY2VzcyByZWdpc3RlcnMgNCB0byA3CitDUFUgQUxMIEQgRyB3aWxsIGRpc3BsYXkgdGhlIEdSUFMgb2YgYWxsIENQVVMgaW4gdGhlIGNvbmZpZ3VyYXRpb24KK0QgUFNXIHdpbGwgZGlzcGxheSB0aGUgY3VycmVudCBQU1cKK3N0IFBTVyAyMDAwIHdpbGwgcHV0IHRoZSB2YWx1ZSAyMDAwIGludG8gdGhlIFBTVyAmCitjYXVzZSBjcmFzaCB5b3VyIG1hY2hpbmUuCitEIFBSRUZJWCBkaXNwbGF5cyB0aGUgcHJlZml4IG9mZnNldAorCisKK0Rpc3BsYXlpbmcgTWVtb3J5CistLS0tLS0tLS0tLS0tLS0tLQorVG8gZGlzcGxheSBtZW1vcnkgbWFwcGVkIHVzaW5nIHRoZSBjdXJyZW50IFBTVydzIG1hcHBpbmcgdHJ5CitEIDxyYW5nZT4KK1RvIG1ha2UgVk0gZGlzcGxheSBhIG1lc3NhZ2UgZWFjaCB0aW1lIGl0IGhpdHMgYSBwYXJ0aWN1bGFyIGFkZHJlc3MgJiBjb250aW51ZSB0cnkKK0QgSTxyYW5nZT4gd2lsbCBkaXNhc3NlbWJsZS9kaXNwbGF5IGEgcmFuZ2Ugb2YgaW5zdHJ1Y3Rpb25zLgorU1QgYWRkciAzMiBiaXQgd29yZCB3aWxsIHN0b3JlIGEgMzIgYml0IGFsaWduZWQgYWRkcmVzcworRCBUPHJhbmdlPiB3aWxsIGRpc3BsYXkgdGhlIEVCQ0RJQyBpbiBhbiBhZGRyZXNzICggaWYgeW91IGFyZSB0aGF0IHdheSBpbmNsaW5lZCApCitEIFI8cmFuZ2U+IHdpbGwgZGlzcGxheSByZWFsIGFkZHJlc3NlcyAoIHdpdGhvdXQgREFUICkgYnV0IHdpdGggcHJlZml4aW5nLgorVGhlcmUgYXJlIG90aGVyIGNvbXBsZXggb3B0aW9ucyB0byBkaXNwbGF5IGlmIHlvdSBuZWVkIHRvIGdldCBhdCBzYXkgaG9tZSBzcGFjZQorYnV0IGFyZSBpbiBwcmltYXJ5IHNwYWNlIHRoZSBlYXNpZXN0IHRoaW5nIHRvIGRvIGlzIHRvIHRlbXBvcmFyaWx5Cittb2RpZnkgdGhlIFBTVyB0byB0aGUgb3RoZXIgYWRkcmVzc2luZyBtb2RlLCBkaXNwbGF5IHRoZSBzdHVmZiAmIHRoZW4KK3Jlc3RvcmUgaXQuCisKKworIAorSGludHMKKy0tLS0tCitJZiB5b3Ugd2FudCB0byBpc3N1ZSBhIGRlYnVnZ2VyIGNvbW1hbmQgd2l0aG91dCBoYWx0aW5nIHlvdXIgdmlydHVhbCBtYWNoaW5lIHdpdGggdGhlCitQQTEga2V5IHRyeSBwcmVmaXhpbmcgdGhlIGNvbW1hbmQgd2l0aCAjQ1AgZS5nLgorI2NwIHRyIGkgcHN3YSAyMDAwCithbHNvIHN1ZmZpeGluZyBtb3N0IGRlYnVnZ2VyIGNvbW1hbmRzIHdpdGggUlVOIHdpbGwgY2F1c2UgdGhlbSBub3QKK3RvIHN0b3AganVzdCBkaXNwbGF5IHRoZSBtbmVtb25pYyBhdCB0aGUgY3VycmVudCBpbnN0cnVjdGlvbiBvbiB0aGUgY29uc29sZS4KK0lmIHlvdSBoYXZlIHNldmVyYWwgYnJlYWtwb2ludHMgeW91IHdhbnQgdG8gcHV0IGludG8geW91ciBwcm9ncmFtICYKK3lvdSBnZXQgZmVkIHVwIG9mIGNyb3NzIHJlZmVyZW5jaW5nIHdpdGggU3lzdGVtLm1hcAoreW91IGNhbiBkbyB0aGUgZm9sbG93aW5nIHRyaWNrIGZvciBzZXZlcmFsIHN5bWJvbHMuCitncmVwIGRvX3NpZ25hbCBTeXN0ZW0ubWFwIAord2hpY2ggZW1pdHMgdGhlIGZvbGxvd2luZyBhbW9uZyBvdGhlciB0aGluZ3MKKzAwMDFmNGUwIFQgZG9fc2lnbmFsIAorbm93IHlvdSBjYW4gZG8KKworVFIgSSBQU1dBIDAwMDFmNGUwIGNtZCBtc2cgKiBkb19zaWduYWwKK1RoaXMgc2VuZHMgYSBtZXNzYWdlIHRvIHlvdXIgb3duIGNvbnNvbGUgZWFjaCB0aW1lIGRvX3NpZ25hbCBpcyBlbnRlcmVkLgorKCBBcyBhbiBhc2lkZSBJIHdyb3RlIGEgcGVybCBzY3JpcHQgb25jZSB3aGljaCBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBhIFJFWFgKK3NjcmlwdCB3aXRoIGJyZWFrcG9pbnRzIG9uIGV2ZXJ5IGtlcm5lbCBwcm9jZWR1cmUsIHRoaXMgaXNuJ3QgYSBnb29kIGlkZWEKK2JlY2F1c2UgdGhlcmUgYXJlIHRob3VzYW5kcyBvZiB0aGVzZSByb3V0aW5lcyAmIFZNIGNhbiBvbmx5IHNldCAyNTUgYnJlYWtwb2ludHMKK2F0IGEgdGltZSBzbyB5b3UgbmVhcmx5IGhhZCB0byBzcGVuZCBhcyBsb25nIHBydW5pbmcgdGhlIGZpbGUgZG93biBhcyB5b3Ugd291bGQgCitlbnRlcmluZyB0aGUgbXNnJ3MgYnkgaGFuZCApLGhvd2V2ZXIsIHRoZSB0cmljayBtaWdodCBiZSB1c2VmdWwgZm9yIGEgc2luZ2xlIG9iamVjdCBmaWxlLgorT24gbGludXgnZXMgMzI3MCBlbXVsYXRvciB4MzI3MCB0aGVyZSBpcyBhIHZlcnkgdXNlZnVsIG9wdGlvbiB1bmRlciB0aGUgZmlsZSBtZW50CitTYXZlIFNjcmVlbnMgSW4gRmlsZSB0aGlzIGlzIHZlcnkgZ29vZCBvZiBrZWVwaW5nIGEgY29weSBvZiB0cmFjZXMuIAorCitGcm9tIENNUyBoZWxwIDxjb21tYW5kIG5hbWU+IHdpbGwgZ2l2ZSB5b3Ugb25saW5lIGhlbHAgb24gYSBwYXJ0aWN1bGFyIGNvbW1hbmQuIAorZS5nLiAKK0hFTFAgRElTUExBWQorCitBbHNvIENQIGhhcyBhIGZpbGUgY2FsbGVkIHByb2ZpbGUuZXhlYyB3aGljaCBhdXRvbWF0aWNhbGx5IGdldHMgY2FsbGVkCitvbiBzdGFydHVwIG9mIENNUyAoIGxpa2UgYXV0b2V4ZWMuYmF0ICksIGtlZXBpbmcgb24gYSBET1MgYW5hbG9neSBzZXNzaW9uCitDUCBoYXMgYSBmZWF0dXJlIHNpbWlsYXIgdG8gZG9za2V5LCBpdCBtYXkgYmUgdXNlZnVsIGZvciB5b3UgdG8KK3VzZSBwcm9maWxlLmV4ZWMgdG8gZGVmaW5lIHNvbWUga2V5c3Ryb2tlcy4gCitlLmcuCitTRVQgUEY5IElNTSBCCitUaGlzIGRvZXMgYSBzaW5nbGUgc3RlcCBpbiBWTSBvbiBwcmVzc2luZyBGOC4gCitTRVQgUEYxMCAgXgorVGhpcyBzZXRzIHVwIHRoZSBeIGtleS4KK3doaWNoIGNhbiBiZSB1c2VkIGZvciBeYyAoY3RybC1jKSxeeiAoY3RybC16KSB3aGljaCBjYW4ndCBiZSB0eXBlZCBkaXJlY3RseSBpbnRvIHNvbWUgMzI3MCBjb25zb2xlcy4KK1NFVCBQRjExIF4tCitUaGlzIHR5cGVzIHRoZSBzdGFydGluZyBrZXlzdHJva2VzIGZvciBhIHN5c3JxIHNlZSBTeXNScSBiZWxvdy4KK1NFVCBQRjEyIFJFVFJJRVZFCitUaGlzIHJldHJpZXZlcyBjb21tYW5kIGhpc3Rvcnkgb24gcHJlc3NpbmcgRjEyLgorCisKK1NvbWV0aW1lcyBpbiBWTSB0aGUgZGlzcGxheSBpcyBzZXQgdXAgdG8gc2Nyb2xsIGF1dG9tYXRpY2FsbHkgdGhpcworY2FuIGJlIHZlcnkgYW5ub3lpbmcgaWYgdGhlcmUgYXJlIG1lc3NhZ2VzIHlvdSB3aXNoIHRvIGxvb2sgYXQKK3RvIHN0b3AgdGhpcyBkbworVEVSTSBNT1JFIDI1NSAyNTUKK1RoaXMgd2lsbCBuZWFybHkgc3RvcCBhdXRvbWF0aWMgc2NyZWVuIHVwZGF0ZXMsIGhvd2V2ZXIgaXQgd2lsbAorY2F1c2UgYSBkZW5pYWwgb2Ygc2VydmljZSBpZiBsb3RzIG9mIG1lc3NhZ2VzIGdvIHRvIHRoZSAzMjcwIGNvbnNvbGUsCitzbyBpdCB3b3VsZCBiZSBmb29saXNoIHRvIHVzZSB0aGlzIGFzIHRoZSBkZWZhdWx0IG9uIGEgcHJvZHVjdGlvbiBtYWNoaW5lLgorIAorCitUcmFjaW5nIHBhcnRpY3VsYXIgcHJvY2Vzc2VzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGUga2VybmVsJ3MgdGV4dCBzZWdtZW50IGlzIGludGVudGlvbmFsbHkgYXQgYW4gYWRkcmVzcyBpbiBtZW1vcnkgdGhhdCBpdCB3aWxsCit2ZXJ5IHNlbGRvbSBjb2xsaWRlIHdpdGggdGV4dCBzZWdtZW50cyBvZiB1c2VyIHByb2dyYW1zICggdGhhbmtzIE1hcnRpbiApLAordGhpcyBzaW1wbGlmaWVzIGRlYnVnZ2luZyB0aGUga2VybmVsLgorSG93ZXZlciBpdCBpcyBxdWl0ZSBjb21tb24gZm9yIHVzZXIgcHJvY2Vzc2VzIHRvIGhhdmUgYWRkcmVzc2VzIHdoaWNoIGNvbGxpZGUKK3RoaXMgY2FuIG1ha2UgZGVidWdnaW5nIGEgcGFydGljdWxhciBwcm9jZXNzIHVuZGVyIFZNIHBhaW5mdWwgdW5kZXIgbm9ybWFsCitjaXJjdW1zdGFuY2VzIGFzIHRoZSBwcm9jZXNzIG1heSBjaGFuZ2Ugd2hlbiBkb2luZyBhIAorVFIgSSBSIDxhZGRyZXNzIHJhbmdlPi4KK1RoYW5rZnVsbHkgYWZ0ZXIgcmVhZGluZyBWTSdzIG9ubGluZSBoZWxwIEkgZmlndXJlZCBvdXQgaG93IHRvIGRlYnVnCitJIHBhcnRpY3VsYXIgcHJvY2Vzcy4KKworWW91ciBmaXJzdCBwcm9ibGVtIGlzIHRvIGZpbmQgdGhlIFNURCAoIHNlZ21lbnQgdGFibGUgZGVzaWduYXRpb24gKQorb2YgdGhlIHByb2dyYW0geW91IHdpc2ggdG8gZGVidWcuCitUaGVyZSBhcmUgc2V2ZXJhbCB3YXlzIHlvdSBjYW4gZG8gdGhpcyBoZXJlIGFyZSBhIGZldworMSkgb2JqZHVtcCAtLXN5bXMgPHByb2dyYW0gdG8gYmUgZGVidWdnZWQ+IHwgZ3JlcCBtYWluCitUbyBnZXQgdGhlIGFkZHJlc3Mgb2YgbWFpbiBpbiB0aGUgcHJvZ3JhbS4KK3RyIGkgcHN3YSA8YWRkcmVzcyBvZiBtYWluPgorU3RhcnQgdGhlIHByb2dyYW0sIGlmIFZNIGRyb3BzIHRvIENQIG9uIHdoYXQgbG9va3MgbGlrZSB0aGUgZW50cnkKK3BvaW50IG9mIHRoZSBtYWluIGZ1bmN0aW9uIHRoaXMgaXMgbW9zdCBsaWtlbHkgdGhlIHByb2Nlc3MgeW91IHdpc2ggdG8gZGVidWcuCitOb3cgZG8gYSBEIFgxMyBvciBEIFhHMTMgb24gei9BcmNoaXRlY3R1cmUuCitPbiAzMSBiaXQgdGhlIFNURCBpcyBiaXRzIDEtMTkgKCB0aGUgU1RPIHNlZ21lbnQgdGFibGUgb3JpZ2luICkgCismIDI1LTMxICggdGhlIFNUTCBzZWdtZW50IHRhYmxlIGxlbmd0aCApIG9mIENSMTMuCitub3cgdHlwZQorVFIgSSBSIFNURCA8Q1IxMydzIHZhbHVlPiAwLjdmZmZmZmZmCitlLmcuCitUUiBJIFIgU1REIDhGMzJFMUZGIDAuN2ZmZmZmZmYKK0Fub3RoZXIgdmVyeSB1c2VmdWwgdmFyaWF0aW9uIGlzCitUUiBTVE9SRSBJTlRPIFNURCA8Q1IxMydzIHZhbHVlPiA8YWRkcmVzcyByYW5nZT4KK2ZvciBmaW5kaW5nIG91dCB3aGVuIGEgcGFydGljdWxhciB2YXJpYWJsZSBjaGFuZ2VzLgorCitBbiBhbHRlcm5hdGl2ZSB3YXkgb2YgZmluZGluZyB0aGUgU1REIG9mIGEgY3VycmVudGx5IHJ1bm5pbmcgcHJvY2VzcyAKK2lzIHRvIGRvIHRoZSBmb2xsb3dpbmcsICggdGhpcyBtZXRob2QgaXMgbW9yZSBjb21wbGV4IGJ1dAorY291bGQgYmUgcXVpdGUgY29udmllbnQgaWYgeW91IGFyZW4ndCB1cGRhdGluZyB0aGUga2VybmVsIG11Y2ggJgorc28geW91ciBrZXJuZWwgc3RydWN0dXJlcyB3aWxsIHN0YXkgY29uc3RhbnQgZm9yIGEgcmVhc29uYWJsZSBwZXJpb2Qgb2YKK3RpbWUgKS4KKworZ3JlcCB0YXNrIC9wcm9jLzxwaWQ+L3N0YXR1cworZnJvbSB0aGlzIHlvdSBzaG91bGQgc2VlIHNvbWV0aGluZyBsaWtlCit0YXNrOiAwZjE2MDAwMCBrc3A6IDBmMTYxZGU4IHB0X3JlZ3M6IDBmMTYxZjY4CitUaGlzIG5vdyBnaXZlcyB5b3UgYSBwb2ludGVyIHRvIHRoZSB0YXNrIHN0cnVjdHVyZS4KK05vdyBtYWtlIENDOj0iczM5MC1nY2MgLWciIGtlcm5lbC9zY2hlZC5zCitUbyBnZXQgdGhlIHRhc2tfc3RydWN0IHN0YWJpbmZvLgorKCB0YXNrX3N0cnVjdCBpcyBkZWZpbmVkIGluIGluY2x1ZGUvbGludXgvc2NoZWQuaCApLgorTm93IHdlIHdhbnQgdG8gbG9vayBhdAordGFzay0+YWN0aXZlX21tLT5wZ2QKK29uIG15IG1hY2hpbmUgdGhlIGFjdGl2ZV9tbSBpbiB0aGUgdGFzayBzdHJ1Y3R1cmUgc3RhYiBpcworYWN0aXZlX21tOig0LDEyKSw2NzIsMzIKK2l0cyBvZmZzZXQgaXMgNjcyLzg9ODQ9MHg1NAordGhlIHBnZCBtZW1iZXIgaW4gdGhlIG1tX3N0cnVjdCBzdGFiIGlzCitwZ2Q6KDQsNik9KigyOSw1KSw5NiwzMgorc28gaXRzIG9mZnNldCBpcyA5Ni84PTEyPTB4YworCitzbyB3ZSdsbAoraGV4ZHVtcCAtcyAweGYxNjAwNTQgL2Rldi9tZW0gfCBtb3JlCitpLmUuIHRhc2tfc3RydWN0K2FjdGl2ZV9tbSBvZmZzZXQKK3RvIGxvb2sgYXQgdGhlIGFjdGl2ZV9tbSBtZW1iZXIKK2YxNjAwNTQgMGZlZSBjYzYwIDAwMTkgZTMzNCAwMDAwIDAwMDAgMDAwMCAwMDExCitoZXhkdW1wIC1zIDB4MGZlZWNjNmMgL2Rldi9tZW0gfCBtb3JlCitpLmUuIGFjdGl2ZV9tbStwZ2Qgb2Zmc2V0CitmZWVjYzZjIDBmMmMgMDAwMCAwMDAwIDAwMDEgMDAwMCAwMDAxIDAwMDAgMDAxMAord2UgZ2V0IHNvbWV0aGluZyBsaWtlCitub3cgZG8gCitUUiBJIFIgU1REIDxwZ2R8MHg3Zj4gMC43ZmZmZmZmZgoraS5lLiB0aGUgMHg3ZiBpcyBhZGRlZCBiZWNhdXNlIHRoZSBwZ2Qgb25seQorZ2l2ZXMgdGhlIHBhZ2UgdGFibGUgb3JpZ2luICYgd2UgbmVlZCB0byBzZXQgdGhlIGxvdyBiaXRzCit0byB0aGUgbWF4aW11bSBwb3NzaWJsZSBzZWdtZW50IHRhYmxlIGxlbmd0aC4KK1RSIEkgUiBTVEQgMGYyYzAwN2YgMC43ZmZmZmZmZgorb24gei9BcmNoaXRlY3R1cmUgeW91J2xsIHByb2JhYmx5IG5lZWQgdG8gZG8KK1RSIEkgUiBTVEQgPHBnZHwweDc+IDAuZmZmZmZmZmZmZmZmZmZmZgordG8gc2V0IHRoZSBUYWJsZVR5cGUgdG8gMHgxICYgdGhlIFRhYmxlIGxlbmd0aCB0byAzLgorCisKKworVHJhY2luZyBQcm9ncmFtIEV4Y2VwdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJZiB5b3UgZ2V0IGEgY3Jhc2ggd2hpY2ggc2F5cyBzb21ldGhpbmcgbGlrZQoraWxsZWdhbCBvcGVyYXRpb24gb3Igc3BlY2lmaWNhdGlvbiBleGNlcHRpb24gZm9sbG93ZWQgYnkgYSByZWdpc3RlciBkdW1wCitZb3UgY2FuIHJlc3RhcnQgbGludXggJiB0cmFjZSB0aGVzZSB1c2luZyB0aGUgdHIgcHJvZyA8cmFuZ2Ugb3IgdmFsdWU+IHRyYWNlIG9wdGlvbi4KKworCisKK1RoZSBtb3N0IGNvbW1vbiBvbmVzIHlvdSB3aWxsIG5vcm1hbGx5IGJlIHRyYWNpbmcgZm9yIGlzCisxPW9wZXJhdGlvbiBleGNlcHRpb24KKzI9cHJpdmlsZWdlZCBvcGVyYXRpb24gZXhjZXB0aW9uCis0PXByb3RlY3Rpb24gZXhjZXB0aW9uCis1PWFkZHJlc3NpbmcgZXhjZXB0aW9uCis2PXNwZWNpZmljYXRpb24gZXhjZXB0aW9uCisxMD1zZWdtZW50IHRyYW5zbGF0aW9uIGV4Y2VwdGlvbgorMTE9cGFnZSB0cmFuc2xhdGlvbiBleGNlcHRpb24KKworVGhlIGZ1bGwgbGlzdCBvZiB0aGVzZSBpcyBvbiBwYWdlIDIyIG9mIHRoZSBjdXJyZW50IHMvMzkwIFJlZmVyZW5jZSBTdW1tYXJ5LgorZS5nLgordHIgcHJvZyAxMCB3aWxsIHRyYWNlIHNlZ21lbnQgdHJhbnNsYXRpb24gZXhjZXB0aW9ucy4KK3RyIHByb2cgb24gaXRzIG93biB3aWxsIHRyYWNlIGFsbCBwcm9ncmFtIGludGVycnVwdGlvbiBjb2Rlcy4KKworVHJhY2UgU2V0cworLS0tLS0tLS0tLQorT24gc3RhcnRpbmcgVk0geW91IGFyZSBpbml0aWFsbHkgaW4gdGhlIElOSVRJQUwgdHJhY2Ugc2V0LgorWW91IGNhbiBkbyBhIFEgVFIgdG8gdmVyaWZ5IHRoaXMuCitJZiB5b3UgaGF2ZSBhIGNvbXBsZXggdHJhY2luZyBzaXR1YXRpb24gd2hlcmUgeW91IHdpc2ggdG8gd2FpdCBmb3IgaW5zdGFuY2UgCit0aWxsIGEgZHJpdmVyIGlzIG9wZW4gYmVmb3JlIHlvdSBzdGFydCB0cmFjaW5nIElPLCBidXQga25vdyBpbiB5b3VyCitoZWFydCB0aGF0IHlvdSBhcmUgZ29pbmcgdG8gaGF2ZSB0byBtYWtlIHNldmVyYWwgcnVucyB0aHJvdWdoIHRoZSBjb2RlIHRpbGwgeW91CitoYXZlIGEgY2x1ZSB3aGF0cyBnb2luZyBvbi4gCisKK1doYXQgeW91IGNhbiBkbyBpcworVFIgSSBQU1dBIDxEcml2ZXIgb3BlbiBhZGRyZXNzPgoraGl0IGIgdG8gY29udGludWUgdGlsbCBicmVha3BvaW50CityZWFjaCB0aGUgYnJlYWtwb2ludAorbm93IGRvIHlvdXIKK1RSIEdPVE8gQiAKK1RSIElPIDdjMDgtN2MwOSBpbnN0IGludCBydW4gCitvciB3aGF0ZXZlciB0aGUgSU8gY2hhbm5lbHMgeW91IHdpc2ggdG8gdHJhY2UgYXJlICYgaGl0IGIKKworVG8gZ290IGJhY2sgdG8gdGhlIGluaXRpYWwgdHJhY2Ugc2V0IGRvCitUUiBHT1RPIElOSVRJQUwKKyYgdGhlIFRSIEkgUFNXQSA8RHJpdmVyIG9wZW4gYWRkcmVzcz4gd2lsbCBiZSB0aGUgb25seSBhY3RpdmUgYnJlYWtwb2ludCBhZ2Fpbi4KKworCitUcmFjaW5nIGxpbnV4IHN5c2NhbGxzIHVuZGVyIFZNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitTeXNjYWxscyBhcmUgaW1wbGVtZW50ZWQgb24gTGludXggZm9yIFMzOTAgYnkgdGhlIFN1cGVydmlzb3IgY2FsbCBpbnN0cnVjdGlvbiAoU1ZDKSB0aGVyZSAyNTYgCitwb3NzaWJpbGl0aWVzIG9mIHRoZXNlIGFzIHRoZSBpbnN0cnVjdGlvbiBpcyBtYWRlIHVwIG9mIGEgIDB4QSBvcGNvZGUgJiB0aGUgc2Vjb25kIGJ5dGUgYmVpbmcKK3RoZSBzeXNjYWxsIG51bWJlci4gVGhleSBhcmUgdHJhY2VkIHVzaW5nIHRoZSBzaW1wbGUgY29tbWFuZC4KK1RSIFNWQyAgPE9wdGlvbmFsIHZhbHVlIG9yIHJhbmdlPgordGhlIHN5c2NhbGxzIGFyZSBkZWZpbmVkIGluIGxpbnV4L2luY2x1ZGUvYXNtLXMzOTAvdW5pc3RkLmgKK2UuZy4gdG8gdHJhY2UgYWxsIGZpbGUgb3BlbnMganVzdCBkbworVFIgU1ZDIDUgKCBhcyB0aGlzIGlzIHRoZSBzeXNjYWxsIG51bWJlciBvZiBvcGVuICkKKworCitTTVAgU3BlY2lmaWMgY29tbWFuZHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVG8gZmluZCBvdXQgaG93IG1hbnkgY3B1cyB5b3UgaGF2ZQorUSBDUFVTIGRpc3BsYXlzIGFsbCB0aGUgQ1BVJ3MgYXZhaWxhYmxlIHRvIHlvdXIgdmlydHVhbCBtYWNoaW5lCitUbyBmaW5kIHRoZSBjcHUgdGhhdCB0aGUgY3VycmVudCBjcHUgVk0gZGVidWdnZXIgY29tbWFuZHMgYXJlIGJlaW5nIGRpcmVjdGVkIGF0IGRvCitRIENQVSB0byBjaGFuZ2UgdGhlIGN1cnJlbnQgY3B1IGNwdSBWTSBkZWJ1Z2dlciBjb21tYW5kcyBhcmUgYmVpbmcgZGlyZWN0ZWQgYXQgZG8KK0NQVSA8ZGVzaXJlZCBjcHUgbm8+CisKK09uIGEgU01QIGd1ZXN0IGlzc3VlIGEgY29tbWFuZCB0byBhbGwgQ1BVcyB0cnkgcHJlZml4aW5nIHRoZSBjb21tYW5kIHdpdGggY3B1IGFsbC4KK1RvIGlzc3VlIGEgY29tbWFuZCB0byBhIHBhcnRpY3VsYXIgY3B1IHRyeSBjcHUgPGNwdSBudW1iZXI+IGUuZy4KK0NQVSAwMSBUUiBJIFIgMjAwMC4zMDAwCitJZiB5b3UgYXJlIHJ1bm5pbmcgb24gYSBndWVzdCB3aXRoIHNldmVyYWwgY3B1cyAmIHlvdSBoYXZlIGEgSU8gcmVsYXRlZCBwcm9ibGVtCismIGNhbm5vdCBmb2xsb3cgdGhlIGZsb3cgb2YgY29kZSBidXQgeW91IGtub3cgaXQgaXNudCBzbXAgcmVsYXRlZC4KK2Zyb20gdGhlIGJhc2ggcHJvbXB0IGlzc3VlCitzaHV0ZG93biAtaCBub3cgb3IgaGFsdC4KK2RvIGEgUSBDUFVTIHRvIGZpbmQgb3V0IGhvdyBtYW55IGNwdXMgeW91IGhhdmUKK2RldGFjaCBlYWNoIG9uZSBvZiB0aGVtIGZyb20gY3AgZXhjZXB0IGNwdSAwIAorYnkgaXNzdWluZyBhIAorREVUQUNIIENQVSAwMS0obnVtYmVyIG9mIGNwdXMgaW4gY29uZmlndXJhdGlvbikKKyYgYm9vdCBsaW51eCBhZ2Fpbi4KK1RSIFNJR1Agd2lsbCB0cmFjZSBpbnRlciBwcm9jZXNzb3Igc2lnbmFsIHByb2Nlc3NvciBpbnN0cnVjdGlvbnMuCitERUZJTkUgQ1BVIDAxLShudW1iZXIgaW4gY29uZmlndXJhdGlvbikgCit3aWxsIGdldCB5b3VyIGd1ZXN0cyBjcHVzIGJhY2suCisKKworSGVscCBmb3IgZGlzcGxheWluZyBhc2NpaSB0ZXh0c3RyaW5ncworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorT24gdGhlIHZlcnkgbGF0ZXN0IFZNIE51Y2xldXMnZXMgVk0gY2FuIG5vdyBkaXNwbGF5IGFzY2lpCisoIHRoYW5rcyBOZWFsZSBmb3IgdGhlIGhpbnQgKSBieSBkb2luZworRCBUWDxsb3dhZGRyPi48bGVuPgorZS5nLgorRCBUWDAuMTAwCisKK0FsdGVybmF0aXZlbHkKKz09PT09PT09PT09PT0KK1VuZGVyIG9sZGVyIFZNIGRlYnVnZ2VycyAoIEkgbG92ZSBFQkRJQyB0b28gKSB5b3UgY2FuIHVzZSB0aGlzIGxpdHRsZSBwcm9ncmFtIEkgd3JvdGUgd2hpY2gKK3dpbGwgY29udmVydCBhIGNvbW1hbmQgbGluZSBvZiBoZXggZGlnaXRzIHRvIGFzY2lpIHRleHQgd2hpY2ggY2FuIGJlIGNvbXBpbGVkIHVuZGVyIGxpbnV4ICYgCit5b3UgY2FuIGNvcHkgdGhlIGhleCBkaWdpdHMgZnJvbSB5b3VyIHgzMjcwIHRlcm1pbmFsIHRvIHlvdXIgeHRlcm0gaWYgeW91IGFyZSBkZWJ1Z2dpbmcKK2Zyb20gYSBsaW51eGJveC4KKworVGhpcyBpcyBxdWl0ZSB1c2VmdWwgd2hlbiBsb29raW5nIGF0IGEgcGFyYW1ldGVyIHBhc3NlZCBpbiBhcyBhIHRleHQgc3RyaW5nCit1bmRlciBWTSAoIHVubGVzcyB5b3UgYXJlIGdvb2QgYXQgZGVjb2RpbmcgQVNDSUkgaW4geW91ciBoZWFkICkuCisKK2UuZy4gY29uc2lkZXIgdHJhY2luZyBhbiBvcGVuIHN5c2NhbGwKK1RSIFNWQyA1CitXZSBoYXZlIHN0b3BwZWQgYXQgYSBicmVha3BvaW50CiswMDAxNTFCMCcgU1ZDICAgMEEwNSAgICAgLT4gMDAwMTkwOUEnICAgQ0MgMAorCitEIDIwLjggdG8gY2hlY2sgdGhlIFNWQyBvbGQgcHN3IGluIHRoZSBwcmVmaXggYXJlYSAmIHNlZSB3YXMgaXQgZnJvbSB1c2Vyc3BhY2UKKyggZm9yIHRoZSBsYXlvdXQgb2YgdGhlIHByZWZpeCBhcmVhIGNvbnN1bHQgUDE4IG9mIHRoZSBzLzM5MCAzOTAgUmVmZXJlbmNlIFN1bW1hcnkgCitpZiB5b3UgaGF2ZSBpdCBhdmFpbGFibGUgKS4KK1YwMDAwMDAyMCAgMDcwQzIwMDAgODAwMTUxQjIKK1RoZSBwcm9ibGVtIHN0YXRlIGJpdCB3YXNuJ3Qgc2V0ICYgIGl0J3MgYWxzbyB0b28gZWFybHkgaW4gdGhlIGJvb3Qgc2VxdWVuY2UKK2ZvciBpdCB0byBiZSBhIHVzZXJzcGFjZSBTVkMgaWYgaXQgd2FzIHdlIHdvdWxkIGhhdmUgdG8gdGVtcG9yYXJpbHkgc3dpdGNoIHRoZSAKK3BzdyB0byB1c2VyIHNwYWNlIGFkZHJlc3Npbmcgc28gd2UgY291bGQgZ2V0IGF0IHRoZSBmaXJzdCBwYXJhbWV0ZXIgb2YgdGhlIG9wZW4gaW4KK2dwcjIuCitOZXh0IGRvIGEgCitEIEcyCitHUFIgIDIgPSAgMDAwMTRDQjQKK05vdyBkaXNwbGF5IHdoYXQgZ3ByMiBpcyBwb2ludGluZyB0bworRCAwMDAxNENCNC4yMAorVjAwMDE0Q0I0ICAyRjY0NjU3NiAyRjYzNkY2RSA3MzZGNkM2NSAwMDAwMUJGNQorVjAwMDE0Q0M0ICBGQzAwMDE0QyBCNDAwMTAwMSBFMDAwMTAwMCBCODA3MDcwNworTm93IGNvcHkgdGhlIHRleHQgdGlsbCB0aGUgZmlyc3QgMDAgaGV4ICggd2hpY2ggaXMgdGhlIGVuZCBvZiB0aGUgc3RyaW5nCit0byBhbiB4dGVybSAmIGRvIGhleDJhc2NpaSBvbiBpdC4KK2hleDJhc2NpaSAyRjY0NjU3NiAyRjYzNkY2RSA3MzZGNkM2NSAwMCAKK291dHB1dHMKK0RlY29kZWQgSGV4Oj0vIGQgZSB2IC8gYyBvIG4gcyBvIGwgZSAweDAwIAorV2Ugd2VyZSBvcGVuaW5nIHRoZSBjb25zb2xlIGRldmljZSwKKworWW91IGNhbiBjb21waWxlIHRoZSBjb2RlIGJlbG93IHlvdXJzZWxmIGZvciBwcmFjdGljZSA6LSksCisvKgorICogICAgaGV4MmFzY2lpLmMKKyAqICAgIGEgdXNlZnVsIGxpdHRsZSB0b29sIGZvciBjb252ZXJ0aW5nIGEgaGV4YWRlY2ltYWwgY29tbWFuZCBsaW5lIHRvIGFzY2lpCisgKgorICogICAgQXV0aG9yKHMpOiBEZW5pcyBKb3NlcGggQmFycm93IChkamJhcnJvd0BkZS5pYm0uY29tLGJhcnJvd19kakB5YWhvby5jb20pCisgKiAgICAoQykgMjAwMCBJQk0gRGV1dHNjaGxhbmQgRW50d2lja2x1bmcgR21iSCwgSUJNIENvcnBvcmF0aW9uLgorICovICAgCisjaW5jbHVkZSA8c3RkaW8uaD4KKworaW50IG1haW4oaW50IGFyZ2MsY2hhciAqYXJndltdKQoreworICBpbnQgY250MSxjbnQyLGxlbix0b2dnbGU9MDsKKyAgaW50IHN0YXJ0Y250PTE7CisgIHVuc2lnbmVkIGNoYXIgYyxoZXg7CisgIAorICBpZihhcmdjPjEmJihzdHJjbXAoYXJndlsxXSwiLWEiKT09MCkpCisgICAgIHN0YXJ0Y250PTI7CisgIHByaW50ZigiRGVjb2RlZCBIZXg6PSIpOworICBmb3IoY250MT1zdGFydGNudDtjbnQxPGFyZ2M7Y250MSsrKQorICB7CisgICAgbGVuPXN0cmxlbihhcmd2W2NudDFdKTsKKyAgICBmb3IoY250Mj0wO2NudDI8bGVuO2NudDIrKykKKyAgICB7CisgICAgICAgYz1hcmd2W2NudDFdW2NudDJdOworICAgICAgIGlmKGM+PScwJyYmYzw9JzknKQorCSAgYz1jLScwJzsKKyAgICAgICBpZihjPj0nQScmJmM8PSdGJykKKwkgIGM9Yy0nQScrMTA7CisgICAgICAgaWYoYz49J2EnJiZjPD0nZicpCisJICBjPWMtJ2EnKzEwOworICAgICAgIHN3aXRjaCh0b2dnbGUpCisgICAgICAgeworCSAgY2FzZSAwOgorCSAgICAgaGV4PWM8PDQ7CisJICAgICB0b2dnbGU9MTsKKwkgIGJyZWFrOworCSAgY2FzZSAxOgorCSAgICAgaGV4Kz1jOworCSAgICAgaWYoaGV4PDMyfHxoZXg+MTI3KQorCSAgICAgeworCQlpZihzdGFydGNudD09MSkKKwkJICAgcHJpbnRmKCIweCUwMlggIiwoaW50KWhleCk7CisJCWVsc2UKKwkJICAgcHJpbnRmKCIuIik7CisJICAgICB9CisJICAgICBlbHNlCisJICAgICB7CisJICAgICAgIHByaW50ZigiJWMiLGhleCk7CisJICAgICAgIGlmKHN0YXJ0Y250PT0xKQorCQkgIHByaW50ZigiICIpOworCSAgICAgfQorCSAgICAgdG9nZ2xlPTA7CisJICBicmVhazsKKyAgICAgICB9CisgICAgfQorICB9CisgIHByaW50ZigiXG4iKTsKK30KKworCisKKworU3RhY2sgdHJhY2luZyB1bmRlciBWTQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQSBiYXNpYyBiYWNrdHJhY2UKKy0tLS0tLS0tLS0tLS0tLS0tCisKK0hlcmUgYXJlIHRoZSB0cmlja3MgSSB1c2UgOSBvdXQgb2YgMTAgdGltZXMgaXQgd29ya3MgcHJldHR5IHdlbGwsCisKK1doZW4geW91ciBiYWNrY2hhaW4gcmVhY2hlcyBhIGRlYWQgZW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGhpcyBjYW4gaGFwcGVuIHdoZW4gYW4gZXhjZXB0aW9uIGhhcHBlbnMgaW4gdGhlIGtlcm5lbCAmIHRoZSBrZXJuZWwgaXMgZW50ZXJlZCB0d2ljZQoraWYgeW91IHJlYWNoIHRoZSBOVUxMIHBvaW50ZXIgYXQgdGhlIGVuZCBvZiB0aGUgYmFjayBjaGFpbiB5b3Ugc2hvdWxkIGJlCithYmxlIHRvIHNuaWZmIGZ1cnRoZXIgYmFjayBpZiB5b3UgZm9sbG93IHRoZSBmb2xsb3dpbmcgdHJpY2tzLgorMSkgQSBrZXJuZWwgYWRkcmVzcyBzaG91bGQgYmUgZWFzeSB0byByZWNvZ25pc2Ugc2luY2UgaXQgaXMgaW4KK3ByaW1hcnkgc3BhY2UgJiB0aGUgcHJvYmxlbSBzdGF0ZSBiaXQgaXNuJ3Qgc2V0ICYgYWxzbworVGhlIEhpIGJpdCBvZiB0aGUgYWRkcmVzcyBpcyBzZXQuCisyKSBBbm90aGVyIGJhY2tjaGFpbiBzaG91bGQgYWxzbyBiZSBlYXN5IHRvIHJlY29nbmlzZSBzaW5jZSBpdCBpcyBhbiAKK2FkZHJlc3MgcG9pbnRpbmcgdG8gYW5vdGhlciBhZGRyZXNzIGFwcHJveGltYXRlbHkgMTAwIGJ5dGVzIG9yIDB4NzAgaGV4CitiZWhpbmQgdGhlIGN1cnJlbnQgc3RhY2twb2ludGVyLgorCisKK0hlcmUgaXMgc29tZSBwcmFjdGljZS4KK2Jvb3QgdGhlIGtlcm5lbCAmIGhpdCBQQTEgYXQgc29tZSByYW5kb20gdGltZQorZCBnIHRvIGRpc3BsYXkgdGhlIGdwcnMsIHRoaXMgc2hvdWxkIGRpc3BsYXkgc29tZXRoaW5nIGxpa2UKK0dQUiAgMCA9ICAwMDAwMDAwMSAgMDAxNTYwMTggIDAwMTQzNTlDICAwMDAwMDAwMAorR1BSICA0ID0gIDAwMDAwMDAxICAwMDFCODg4OCAgMDAwMDAzRTAgIDAwMDAwMDAwCitHUFIgIDggPSAgMDAxMDAwODAgIDAwMTAwMDg0ICAwMDAwMDAwMCAgMDAwRkUwMDAKK0dQUiAxMiA9ICAwMDAxMDQwMCAgODAwMUIyREMgIDgwMDFCMzZBICAwMDBGRkVEOAorTm90ZSB0aGF0IEdQUjE0IGlzIGEgcmV0dXJuIGFkZHJlc3MgYnV0IGFzIHdlIGFyZSByZWFsIG1lbiB3ZSBhcmUgZ29pbmcgdG8KK3RyYWNlIHRoZSBzdGFjay4KK2Rpc3BsYXkgMHg0MCBieXRlcyBhZnRlciB0aGUgc3RhY2sgcG9pbnRlci4KKworVjAwMEZGRUQ4ICAwMDBGRkYzOCA4MDAxQjgzOCA4MDAxNEM4RSAwMDBGRkYzOAorVjAwMEZGRUU4ICAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDNFMCAwMDAwMDAwMAorVjAwMEZGRUY4ICAwMDEwMDA4MCAwMDEwMDA4NCAwMDAwMDAwMCAwMDBGRTAwMAorVjAwMEZGRjA4ICAwMDAxMDQwMCA4MDAxQjJEQyA4MDAxQjM2QSAwMDBGRkVEOAorCisKK0FoIG5vdyBsb29rIGF0IHdoYXRzIGluIHNwKzU2IChzcCsweDM4KSB0aGlzIGlzIDgwMDFCMzZBIG91ciBzYXZlZCByMTQgaWYKK3lvdSBsb29rIGFib3ZlIGF0IG91ciBzdGFja2ZyYW1lICYgYWxzbyBhZ3JlZXMgd2l0aCBHUFIxNC4KKworbm93IGJhY2tjaGFpbiAKK2QgMDAwRkZGMzguNDAKK3dlIG5vdyBhcmUgdGFraW5nIHRoZSBjb250ZW50cyBvZiBTUCB0byBnZXQgb3VyIGZpcnN0IGJhY2tjaGFpbi4KKworVjAwMEZGRjM4ICAwMDBGRkZBMCAwMDAwMDAwMCAwMDAxNDk5NSAwMDE0NzA5NAorVjAwMEZGRjQ4ICAwMDE0NzA5MCAwMDE0NzBBMCAwMDAwMDNFMCAwMDAwMDAwMAorVjAwMEZGRjU4ICAwMDEwMDA4MCAwMDEwMDA4NCAwMDAwMDAwMCAwMDFCRjFEMAorVjAwMEZGRjY4ICAwMDAxMDQwMCA4MDAxNDlCQSA4MDAxNENBNiAwMDBGRkYzOAorCitUaGlzIGRpc3BsYXlzIGEgMm5kIHJldHVybiBhZGRyZXNzIG9mIDgwMDE0Q0E2CisKK25vdyBkbyBkIDAwMEZGRkEwLjQwIGZvciBvdXIgM3JkIGJhY2tjaGFpbgorCitWMDAwRkZGQTAgIDA0QjUyMDAyIDAwMDExMDdGIDAwMDAwMDAwIDAwMDAwMDAwCitWMDAwRkZGQjAgIDAwMDAwMDAwIDAwMDAwMDAwIEZGMDAwMDAwIDAwMDExMDdGCitWMDAwRkZGQzAgIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwCitWMDAwRkZGRDAgIDAwMDEwNDAwIDgwMDEwODAyIDgwMDEwODVBIDAwMEZGRkEwCisKKworb3VyIDNyZCByZXR1cm4gYWRkcmVzcyBpcyA4MDAxMDg1QQorCithcyB0aGUgMDRCNTIwMDIgbG9va3Mgc3VzcGljaW91c2x5IGxpa2UgcnViYmlzaCBpdCBpcyBmYWlyIHRvIGFzc3VtZSB0aGF0IHRoZSBrZXJuZWwgZW50cnkgcm91dGluZXMKK2ZvciB0aGUgc2FrZSBvZiBvcHRpbWlzYXRpb24gZG9udCBzZXQgdXAgYSBiYWNrY2hhaW4uCisKK25vdyBsb29rIGF0IFN5c3RlbS5tYXAgdG8gc2VlIGlmIHRoZSBhZGRyZXNzZXMgbWFrZSBhbnkgc2Vuc2UuCisKK2dyZXAgLWkgMDAwMWIzIFN5c3RlbS5tYXAKK291dHB1dHMgYW1vbmcgb3RoZXIgdGhpbmdzCiswMDAxYjMwNCBUIGNwdV9pZGxlIAorc28gODAwMUIzNkEKK2lzIGNwdV9pZGxlKzB4NjYgKCBxdWlldCB0aGUgY3B1IGlzIGFzbGVlcCwgZG9uJ3Qgd2FrZSBpdCApCisKKworZ3JlcCAtaSAwMDAxNCBTeXN0ZW0ubWFwIAorcHJvZHVjZXMgYW1vbmcgb3RoZXIgdGhpbmdzCiswMDAxNGE3OCBUIHN0YXJ0X2tlcm5lbCAgCitzbyAwMDE0Q0E2IGlzIHN0YXJ0X2tlcm5lbCtzb21lIGhleCBudW1iZXIgSSBjYW4ndCBhZGQgaW4gbXkgaGVhZC4KKworZ3JlcCAtaSAwMDEwOCBTeXN0ZW0ubWFwIAordGhpcyBwcm9kdWNlcworMDAwMTA4MDAgVCBfc3RleHQKK3NvICAgODAwMTA4NUEgaXMgX3N0ZXh0KzB4NWEKKworQ29uZ3JhdHMgeW91J3ZlIGRvbmUgeW91ciBmaXJzdCBiYWNrY2hhaW4uCisKKworCitzLzM5MCAmIHovQXJjaGl0ZWN0dXJlIElPIE92ZXJ2aWV3Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0kgYW0gbm90IGdvaW5nIHRvIGdpdmUgYSBjb3Vyc2UgaW4gMzkwIElPIGFyY2hpdGVjdHVyZSBhcyB0aGlzIHdvdWxkIHRha2UgbWUgcXVpdGUgYQord2hpbGUgJiBJJ20gbm8gZXhwZXJ0LiBJbnN0ZWFkIEknbGwgZ2l2ZSBhIDM5MCBJTyBhcmNoaXRlY3R1cmUgc3VtbWFyeSBmb3IgRHVtbWllcyBpZiB5b3UgaGF2ZSAKK3RoZSBzLzM5MCBwcmluY2lwbGVzIG9mIG9wZXJhdGlvbiBhdmFpbGFibGUgcmVhZCB0aGlzIGluc3RlYWQuIElmIG5vdGhpbmcgZWxzZSB5b3UgbWF5IGZpbmQgYSBmZXcgCit1c2VmdWwga2V5d29yZHMgaW4gaGVyZSAmIGJlIGFibGUgdG8gdXNlIHRoZW0gb24gYSB3ZWIgc2VhcmNoIGVuZ2luZSBsaWtlIGFsdGF2aXN0YSB0byBmaW5kIAorbW9yZSB1c2VmdWwgaW5mb3JtYXRpb24uCisKK1VubGlrZSBvdGhlciBidXMgYXJjaGl0ZWN0dXJlcyBtb2Rlcm4gMzkwIHN5c3RlbXMgZG8gdGhlaXIgSU8gdXNpbmcgbW9zdGx5CitmaWJyZSBvcHRpY3MgJiBkZXZpY2VzIHN1Y2ggYXMgdGFwZXMgJiBkaXNrcyBjYW4gYmUgc2hhcmVkIGJldHdlZW4gc2V2ZXJhbCBtYWluZnJhbWVzLAorYWxzbyBTMzkwIGNhbiBzdXBwb3J0IHVwdG8gNjU1MzYgZGV2aWNlcyB3aGlsZSBhIGhpZ2ggZW5kIFBDIGJhc2VkIHN5c3RlbSBtaWdodCBiZSBjaG9raW5nIAord2l0aCBhcm91bmQgNjQuIEhlcmUgaXMgc29tZSBvZiB0aGUgY29tbW9uIElPIHRlcm1pbm9sb2d5CisKK1N1YmNoYW5uZWw6CitUaGlzIGlzIHRoZSBsb2dpY2FsIG51bWJlciBtb3N0IElPIGNvbW1hbmRzIHVzZSB0byB0YWxrIHRvIGFuIElPIGRldmljZSB0aGVyZSBjYW4gYmUgdXB0bworMHgxMDAwMCAoNjU1MzYpIG9mIHRoZXNlIGluIGEgY29uZmlndXJhdGlvbiB0eXBpY2FsbHkgdGhlcmUgaXMgYSBmZXcgaHVuZHJlZC4gVW5kZXIgVk0KK2ZvciBzaW1wbGljaXR5IHRoZXkgYXJlIGFsbG9jYXRlZCBjb250aWd1b3VzbHksIGhvd2V2ZXIgb24gdGhlIG5hdGl2ZSBoYXJkd2FyZSB0aGV5IGFyZSBub3QKK3RoZXkgdHlwaWNhbGx5IHN0YXkgY29uc2lzdGVudCBiZXR3ZWVuIGJvb3RzIHByb3ZpZGVkIG5vIG5ldyBoYXJkd2FyZSBpcyBpbnNlcnRlZCBvciByZW1vdmVkLgorVW5kZXIgTGludXggZm9yIDM5MCB3ZSB1c2UgdGhlc2UgYXMgSVJRJ3MgJiBhbHNvIHdoZW4gaXNzdWluZyBhbiBJTyBjb21tYW5kIChDTEVBUiBTVUJDSEFOTkVMLAorSEFMVCBTVUJDSEFOTkVMLE1PRElGWSBTVUJDSEFOTkVMLFJFU1VNRSBTVUJDSEFOTkVMLFNUQVJUIFNVQkNIQU5ORUwsU1RPUkUgU1VCQ0hBTk5FTCAmIAorVEVTVCBTVUJDSEFOTkVMICkgd2UgdXNlIHRoaXMgYXMgdGhlIElEIG9mIHRoZSBkZXZpY2Ugd2Ugd2lzaCB0byB0YWxrIHRvLCB0aGUgbW9zdAoraW1wb3J0YW50IG9mIHRoZXNlIGluc3RydWN0aW9ucyBhcmUgU1RBUlQgU1VCQ0hBTk5FTCAoIHRvIHN0YXJ0IElPICksIFRFU1QgU1VCQ0hBTk5FTCAoIHRvIGNoZWNrCit3aGV0aGVyIHRoZSBJTyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5ICksICYgSEFMVCBTVUJDSEFOTkVMICggdG8ga2lsbCBJTyApLCBhIHN1YmNoYW5uZWwKK2NhbiBoYXZlIHVwIHRvIDggY2hhbm5lbCBwYXRocyB0byBhIGRldmljZSB0aGlzIG9mZmVycyByZWR1bmFuY3kgaWYgb25lIGlzIG5vdCBhdmFpbGFibGUuCisKKworRGV2aWNlIE51bWJlcjoKK1RoaXMgbnVtYmVyIHJlbWFpbnMgc3RhdGljICYgSXMgY2xvc2VseSB0aWVkIHRvIHRoZSBoYXJkd2FyZSwgdGhlcmUgYXJlIDY1NTM2IG9mIHRoZXNlCithbHNvIHRoZXkgYXJlIG1hZGUgdXAgb2YgYSBDSFBJRCAoIENoYW5uZWwgUGF0aCBJRCwgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgOCBiaXRzICkgCismIGFub3RoZXIgbHNiIDggYml0cy4gVGhlc2UgcmVtYWluIHN0YXRpYyBldmVuIGlmIG1vcmUgZGV2aWNlcyBhcmUgaW5zZXJ0ZWQgb3IgcmVtb3ZlZAorZnJvbSB0aGUgaGFyZHdhcmUsIHRoZXJlIGlzIGEgMSB0byAxIG1hcHBpbmcgYmV0d2VlbiBTdWJjaGFubmVscyAmIERldmljZSBOdW1iZXJzIHByb3ZpZGVkCitkZXZpY2VzIGFyZW50IGluc2VydGVkIG9yIHJlbW92ZWQuCisKK0NoYW5uZWwgQ29udHJvbCBXb3JkczoKK0NDV1MgYXJlIGxpbmtlZCBsaXN0cyBvZiBpbnN0cnVjdGlvbnMgaW5pdGlhbGx5IHBvaW50ZWQgdG8gYnkgYW4gb3BlcmF0aW9uIHJlcXVlc3QgYmxvY2sgKE9SQiksCit3aGljaCBpcyBpbml0aWFsbHkgZ2l2ZW4gdG8gU3RhcnQgU3ViY2hhbm5lbCAoU1NDSCkgY29tbWFuZCBhbG9uZyB3aXRoIHRoZSBzdWJjaGFubmVsIG51bWJlcgorZm9yIHRoZSBJTyBzdWJzeXN0ZW0gdG8gcHJvY2VzcyB3aGlsZSB0aGUgQ1BVIGNvbnRpbnVlcyBleGVjdXRpbmcgbm9ybWFsIGNvZGUuCitUaGVzZSBjb21lIGluIHR3byBmbGF2b3VycywgRm9ybWF0IDAgKCAyNCBiaXQgZm9yIGJhY2t3YXJkICkKK2NvbXBhdGliaWxpdHkgJiBGb3JtYXQgMSAoIDMxIGJpdCApLiBUaGVzZSBhcmUgdHlwaWNhbGx5IHVzZWQgdG8gaXNzdWUgcmVhZCAmIHdyaXRlIAorKCAmIG1hbnkgb3RoZXIgaW5zdHJ1Y3Rpb25zICkgdGhleSBjb25zaXN0IG9mIGEgbGVuZ3RoIGZpZWxkICYgYW4gYWJzb2x1dGUgYWRkcmVzcyBmaWVsZC4KK0ZvciBlYWNoIElPIHR5cGljYWxseSBnZXQgMSBvciAyIGludGVycnVwdHMgb25lIGZvciBjaGFubmVsIGVuZCAoIHByaW1hcnkgc3RhdHVzICkgd2hlbiB0aGUKK2NoYW5uZWwgaXMgaWRsZSAmIHRoZSBzZWNvbmQgZm9yIGRldmljZSBlbmQgKCBzZWNvbmRhcnkgc3RhdHVzICkgc29tZXRpbWVzIHlvdSBnZXQgYm90aAorY29uY3VycmVudGx5LCB5b3UgY2hlY2sgaG93IHRoZSBJTyB3ZW50IG9uIGJ5IGlzc3VpbmcgYSBURVNUIFNVQkNIQU5ORUwgYXQgZWFjaCBpbnRlcnJ1cHQsCitmcm9tIHdoaWNoIHlvdSByZWNlaXZlIGFuIEludGVycnVwdGlvbiByZXNwb25zZSBibG9jayAoSVJCKS4gSWYgeW91IGdldCBjaGFubmVsICYgZGV2aWNlIGVuZCAKK3N0YXR1cyBpbiB0aGUgSVJCIHdpdGhvdXQgY2hhbm5lbCBjaGVja3MgZXRjLiB5b3VyIElPIHByb2JhYmx5IHdlbnQgb2theS4gSWYgeW91IGRpZG4ndCB5b3UKK3Byb2JhYmx5IG5lZWQgYSBkb2N0b3J0byBleGFtaW5lIHRoZSBJUkIgJiBleHRlbmRlZCBzdGF0dXMgd29yZCBldGMuCitJZiBhbiBlcnJvciBvY2N1cnMgbW9yZSBzb3BoaXN0b2NhdGVkIGNvbnRyb2wgdW5pdHMgaGF2ZSBhIGZhY2l0aXR5IGtub3duIGFzCitjb25jdXJyZW50IHNlbnNlIHRoaXMgbWVhbnMgdGhhdCBpZiBhbiBlcnJvciBvY2N1cnMgRXh0ZW5kZWQgc2Vuc2UgaW5mb3JtYXRpb24gd2lsbAorYmUgcHJlc2VudGVkIGluIHRoZSBFeHRlbmRlZCBzdGF0dXMgd29yZCBpbiB0aGUgSVJCIGlmIG5vdCB5b3UgaGF2ZSB0byBpc3N1ZSBhCitzdWJzZXF1ZW50IFNFTlNFIENDVyBjb21tYW5kIGFmdGVyIHRoZSB0ZXN0IHN1YmNoYW5uZWwuIAorCisKK1RQSSggVGVzdCBwZW5kaW5nIGludGVycnVwdCkgY2FuIGFsc28gYmUgdXNlZCBmb3IgcG9sbGVkIElPIGJ1dCBpbiBtdWx0aXRhc2tpbmcgbXVsdGlwcm9jZXNzb3IKK3N5c3RlbXMgaXQgaXNuJ3QgcmVjb21tZW5kZWQgZXhjZXB0IGZvciBjaGVja2luZyBzcGVjaWFsIGNhc2VzICggaS5lLiBub24gbG9vcGluZyBjaGVja3MgZm9yCitwZW5kaW5nIElPIGV0Yy4gKS4KKworU3RvcmUgU3ViY2hhbm5lbCAmIE1vZGlmeSBTdWJjaGFubmVsIGNhbiBiZSB1c2VkIHRvIGV4YW1pbmUgJiBtb2RpZnkgb3BlcmF0aW5nIGNoYXJhY3RlcmlzdGljcworb2YgYSBzdWJjaGFubmVsICggZS5nLiBjaGFubmVsIHBhdGhzICkuCisKK090aGVyIElPIHJlbGF0ZWQgVGVybXM6CitTeXNwbGV4OiBTMzkwJ3MgQ2x1c3RlcmluZyBUZWNobm9sb2d5CitRRElPOiBTMzkwJ3MgbmV3IGhpZ2ggc3BlZWQgSU8gYXJjaGl0ZWN0dXJlIHRvIHN1cHBvcnQgZGV2aWNlcyBzdWNoIGFzIGdpZ2FiaXQgZXRoZXJuZXQsCit0aGlzIGFyY2hpdGVjdHVyZSBpcyBhbHNvIGRlc2lnbmVkIHRvIGJlIGZvcndhcmQgY29tcGF0aWJsZSB3aXRoIHVwICYgY29taW5nIDY0IGJpdCBtYWNoaW5lcy4KKworCitHZW5lcmFsIENvbmNlcHRzIAorCitJbnB1dCBPdXRwdXQgUHJvY2Vzc29ycyAoSU9QJ3MpIGFyZSByZXNwb25zaWJsZSBmb3IgY29tbXVuaWNhdGluZyBiZXR3ZWVuCit0aGUgbWFpbmZyYW1lIENQVSdzICYgdGhlIGNoYW5uZWwgJiByZWxpZXZlIHRoZSBtYWluZnJhbWUgQ1BVJ3MgZnJvbSB0aGUKK2J1cmRlbiBvZiBjb21tdW5pY2F0aW5nIHdpdGggSU8gZGV2aWNlcyBkaXJlY3RseSwgdGhpcyBhbGxvd3MgdGhlIENQVSdzIHRvIAorY29uY2VudHJhdGUgb24gZGF0YSBwcm9jZXNzaW5nLiAKKworSU9QJ3MgY2FuIHVzZSBvbmUgb3IgbW9yZSBsaW5rcyAoIGtub3duIGFzIGNoYW5uZWwgcGF0aHMgKSB0byB0YWxrIHRvIGVhY2ggCitJTyBkZXZpY2UuIEl0IGZpcnN0IGNoZWNrcyBmb3IgcGF0aCBhdmFpbGFiaWxpdHkgJiBjaG9vc2VzIGFuIGF2YWlsYWJsZSBvbmUsCit0aGVuIHN0YXJ0cyAoICYgc29tZXRpbWVzIHRlcm1pbmF0ZXMgSU8gKS4KK1RoZXJlIGFyZSB0d28gdHlwZXMgb2YgY2hhbm5lbCBwYXRoIEVTQ09OICYgdGhlIFBhcmFsZWxsIElPIGludGVyZmFjZS4KKworSU8gZGV2aWNlcyBhcmUgYXR0YWNoZWQgdG8gY29udHJvbCB1bml0cywgY29udHJvbCB1bml0cyBwcm92aWRlIHRoZQorbG9naWMgdG8gaW50ZXJmYWNlIHRoZSBjaGFubmVsIHBhdGhzICYgY2hhbm5lbCBwYXRoIElPIHByb3RvY29scyB0byAKK3RoZSBJTyBkZXZpY2VzLCB0aGV5IGNhbiBiZSBpbnRlZ3JhdGVkIHdpdGggdGhlIGRldmljZXMgb3IgaG91c2VkIHNlcGFyYXRlbHkKKyYgb2Z0ZW4gdGFsayB0byBzZXZlcmFsIHNpbWlsYXIgZGV2aWNlcyAoIHR5cGljYWwgZXhhbXBsZXMgd291bGQgYmUgcmFpZCAKK2NvbnRyb2xsZXJzIG9yIGEgY29udHJvbCB1bml0IHdoaWNoIGNvbm5lY3RzIHRvIDEwMDAgMzI3MCB0ZXJtaW5hbHMgKS4KKworCisgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICB8ICstLS0tLSsgKy0tLS0tKyArLS0tLS0rICstLS0tLSsgICstLS0tLS0tLS0tKyAgKy0tLS0tLS0tLS0rICAgfAorICAgIHwgfCBDUFUgfCB8IENQVSB8IHwgQ1BVIHwgfCBDUFUgfCAgfCAgTWFpbiAgICB8ICB8IEV4cGFuZGVkIHwgICB8CisgICAgfCB8ICAgICB8IHwgICAgIHwgfCAgICAgfCB8ICAgICB8ICB8ICBNZW1vcnkgIHwgIHwgIFN0b3JhZ2UgfCAgIHwKKyAgICB8ICstLS0tLSsgKy0tLS0tKyArLS0tLS0rICstLS0tLSsgICstLS0tLS0tLS0tKyAgKy0tLS0tLS0tLS0rICAgfCAKKyAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgIHwgICBJT1AgICAgICAgIHwgICAgICBJT1AgICAgICB8ICAgICAgIElPUCAgICAgICAgICAgICAgICAgICAgICB8CisgICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIHwgQyB8IEMgfCBDIHwgQyB8IEMgfCBDIHwgQyB8IEMgfCBDIHwgQyB8IEMgfCBDIHwgQyB8IEMgfCBDIHwgQyB8IAorICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgIHx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8CisgICAgICAgICB8fCAgQnVzICYgVGFnIENoYW5uZWwgUGF0aCAgICAgICAgICAgICAgICAgICAgICB8fCBFU0NPTgorICAgICAgICAgfHwgID09PT09PT09PT09PT09PT09PT09PT0gICAgICAgICAgICAgICAgICAgICAgfHwgQ2hhbm5lbAorICAgICAgICAgfHwgIHx8ICAgICAgICAgICAgICAgICAgfHwgICAgICAgICAgICAgICAgICAgICAgfHwgUGF0aAorICAgICstLS0tLS0tLS0tKyAgICAgICAgICAgICAgICstLS0tLS0tLS0tKyAgICAgICAgICstLS0tLS0tLS0tKworICAgIHwgICAgICAgICAgfCAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgICAgIHwgICAgICAgICAgfAorICAgIHwgICAgQ1UgICAgfCAgICAgICAgICAgICAgIHwgICAgQ1UgICAgfCAgICAgICAgIHwgICAgQ1UgICAgfAorICAgIHwgICAgICAgICAgfCAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgICAgIHwgICAgICAgICAgfAorICAgICstLS0tLS0tLS0tKyAgICAgICAgICAgICAgICstLS0tLS0tLS0tKyAgICAgICAgICstLS0tLS0tLS0tKworICAgICAgIHwgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICB8ICAgICAgIHwKKystLS0tLS0tLS0tKyArLS0tLS0tLS0tLSsgICAgICArLS0tLS0tLS0tLSsgICArLS0tLS0tLS0tLSsgKy0tLS0tLS0tLS0rCit8SS9PIERldmljZXwgfEkvTyBEZXZpY2V8ICAgICAgfEkvTyBEZXZpY2V8ICAgfEkvTyBEZXZpY2V8IHxJL08gRGV2aWNlfAorKy0tLS0tLS0tLS0rICstLS0tLS0tLS0tKyAgICAgICstLS0tLS0tLS0tKyAgICstLS0tLS0tLS0tKyArLS0tLS0tLS0tLSsKKyAgQ1BVID0gQ2VudHJhbCBQcm9jZXNzaW5nIFVuaXQgICAgCisgIEMgPSBDaGFubmVsICAgICAgICAgICAgICAgICAgICAgIAorICBJT1AgPSBJUCBQcm9jZXNzb3IgICAgICAgICAgICAgICAKKyAgQ1UgPSBDb250cm9sIFVuaXQKKworVGhlIDM5MCBJTyBzeXN0ZW1zIGNvbWUgaW4gMiBmbGF2b3VycyB0aGUgY3VycmVudCAzOTAgbWFjaGluZXMgc3VwcG9ydCBib3RoCisKK1RoZSBPbGRlciAzNjAgJiAzNzAgSW50ZXJmYWNlLHNvbWV0aW1lcyBjYWxsZWQgdGhlIHBhcmFsZWxsIEkvTyBpbnRlcmZhY2UsCitzb21ldGltZXMgY2FsbGVkIEJ1cy1hbmQgVGFnICYgc29tZXRpbWVzIE9yaWdpbmFsIEVxdWlwbWVudCBNYW51ZmFjdHVyZXJzCitJbnRlcmZhY2UgKE9FTUkpLgorCitUaGlzIGJ5dGUgd2lkZSBwYXJhbGVsbCBjaGFubmVsIHBhdGgvYnVzIGhhcyBwYXJpdHkgJiBkYXRhIG9uIHRoZSAiQnVzIiBjYWJsZSAKKyYgY29udHJvbCBsaW5lcyBvbiB0aGUgIlRhZyIgY2FibGUuIFRoZXNlIGNhbiBvcGVyYXRlIGluIGJ5dGUgbXVsdGlwbGV4IG1vZGUgZm9yCitzaGFyaW5nIGJldHdlZW4gc2V2ZXJhbCBzbG93IGRldmljZXMgb3IgYnVyc3QgbW9kZSAmIG1vbm9wb2xpemUgdGhlIGNoYW5uZWwgZm9yIHRoZQord2hvbGUgYnVyc3QuIFVwdG8gMjU2IGRldmljZXMgY2FuIGJlIGFkZHJlc3NlZCAgb24gb25lIG9mIHRoZXNlIGNhYmxlcy4gVGhlc2UgY2FibGVzIGFyZQorYWJvdXQgb25lIGluY2ggaW4gZGlhbWV0ZXIuIFRoZSBtYXhpbXVtIHVuZXh0ZW5kZWQgbGVuZ3RoIHN1cHBvcnRlZCBieSB0aGVzZSBjYWJsZXMgaXMKKzEyNSBNZXRlcnMgYnV0IHRoaXMgY2FuIGJlIGV4dGVuZGVkIHVwIHRvIDJrbSB3aXRoIGEgZmlicmUgb3B0aWMgY2hhbm5lbCBleHRlbmRlZCAKK3N1Y2ggYXMgYSAzMDQ0LiBUaGUgbWF4aW11bSBidXJzdCBzcGVlZCBzdXBwb3J0ZWQgaXMgNC41IG1lZ2FieXRlcyBwZXIgc2Vjb25kIGhvd2V2ZXIKK3NvbWUgcmVhbGx5IG9sZCBwcm9jZXNzb3JzIHN1cHBvcnQgb25seSB0cmFuc2ZlciByYXRlcyBvZiAzLjAsIDIuMCAmIDEuMCBNQi9zZWMuCitPbmUgb2YgdGhlc2UgcGF0aHMgY2FuIGJlIGRhaXN5IGNoYWluZWQgdG8gdXAgdG8gOCBjb250cm9sIHVuaXRzLgorCisKK0VTQ09OIGlmIGZpYnJlIG9wdGljIGl0IGlzIGFsc28gY2FsbGVkIEZJQ09OIAorV2FzIGludHJvZHVjZWQgYnkgSUJNIGluIDE5OTAuIEhhcyAyIGZpYnJlIG9wdGljIGNhYmxlcyAmIHVzZXMgZWl0aGVyIGxlZHMgb3IgbGFzZXJzCitmb3IgY29tbXVuaWNhdGlvbiBhdCBhIHNpZ25hbGluZyByYXRlIG9mIHVwdG8gMjAwIG1lZ2FiaXRzL3NlYy4gQXMgMTBiaXRzIGFyZSB0cmFuc2ZlcnJlZAorZm9yIGV2ZXJ5IDggYml0cyBpbmZvIHRoaXMgZHJvcHMgdG8gMTYwIG1lZ2FiaXRzL3NlYyAmIHRvIDE4LjYgTWVnYWJ5dGVzL3NlYyBvbmNlCitjb250cm9sIGluZm8gJiBDUkMgYXJlIGFkZGVkLiBFU0NPTiBvbmx5IG9wZXJhdGVzIGluIGJ1cnN0IG1vZGUuCisgCitFU0NPTnMgdHlwaWNhbCBtYXggY2FibGUgbGVuZ3RoIGlzIDNrbSBmb3IgdGhlIGxlZCB2ZXJzaW9uICYgMjBrbSBmb3IgdGhlIGxhc2VyIHZlcnNpb24KK2tub3duIGFzIFhERiAoIGV4dGVuZGVkIGRpc3RhbmNlIGZhY2lsaXR5ICkuIFRoaXMgY2FuIGJlIGZ1cnRoZXIgZXh0ZW5kZWQgYnkgdXNpbmcgYW4KK0VTQ09OIGRpcmVjdG9yIHdoaWNoIHRyaXBsZXMgdGhlIGFib3ZlIG1lbnRpb25lZCByYW5nZXMuIFVubGlrZSBCdXMgJiBUYWcgYXMgRVNDT04gaXMKK3NlcmlhbCBpdCB1c2VzIGEgcGFja2V0IHN3aXRjaGluZyBhcmNoaXRlY3R1cmUgdGhlIHN0YW5kYXJkIEJ1cyAmIFRhZyBjb250cm9sIHByb3RvY29sCitpcyBob3dldmVyIHByZXNlbnQgd2l0aGluIHRoZSBwYWNrZXRzLiBVcHRvIDI1NiBkZXZpY2VzIGNhbiBiZSBhdHRhY2hlZCB0byBlYWNoIGNvbnRyb2wgCit1bml0IHRoYXQgdXNlcyBvbmUgb2YgdGhlc2UgaW50ZXJmYWNlcy4KKworQ29tbW9uIDM5MCBEZXZpY2VzIGluY2x1ZGU6CitOZXR3b3JrIGFkYXB0ZXJzIHR5cGljYWxseSBPU0EyLDMxNzIncywyMTE2J3MgJiBPU0EtRSBnaWdhYml0IGV0aGVybmV0IGFkYXB0ZXJzLAorQ29uc29sZXMgMzI3MCAmIDMyMTUgKCBhIHRlbGV0eXBlIGVtdWxhdGVkIHVuZGVyIGxpbnV4IGZvciBhIGxpbmUgbW9kZSBjb25zb2xlICkuCitEQVNEJ3MgZGlyZWN0IGFjY2VzcyBzdG9yYWdlIGRldmljZXMgKCBvdGhlcndpc2Uga25vd24gYXMgaGFyZCBkaXNrcyApLgorVGFwZSBEcml2ZXMuCitDVEMgKCBDaGFubmVsIHRvIENoYW5uZWwgQWRhcHRlcnMgKSwKK0VTQ09OIG9yIFBhcmFsZWxsIENhYmxlcyB1c2VkIGFzIGEgdmVyeSBoaWdoIHNwZWVkIHNlcmlhbCBsaW5rCitiZXR3ZWVuIDIgbWFjaGluZXMuIFdlIHVzZSAyIGNhYmxlcyB1bmRlciBsaW51eCB0byBkbyBhIGJpLWRpcmVjdGlvbmFsIHNlcmlhbCBsaW5rLgorCisKK0RlYnVnZ2luZyBJTyBvbiBzLzM5MCAmIHovQXJjaGl0ZWN0dXJlIHVuZGVyIFZNCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitOb3cgd2UgYXJlIHJlYWR5IHRvIGdvIG9uIHdpdGggSU8gdHJhY2luZyBjb21tYW5kcyB1bmRlciBWTQorCitBIGZldyBzZWxmIGV4cGxhbmF0b3J5IHF1ZXJpZXM6CitRIE9TQQorUSBDVEMKK1EgRElTSyAoIFRoaXMgY29tbWFuZCBpcyBDTVMgc3BlY2lmaWMgKQorUSBEQVNECisKKworCisKKworCitRIE9TQSBvbiBteSBtYWNoaW5lIHJldHVybnMKK09TQSAgN0MwOCBPTiBPU0EgICA3QzA4IFNVQkNIQU5ORUwgPSAwMDAwCitPU0EgIDdDMDkgT04gT1NBICAgN0MwOSBTVUJDSEFOTkVMID0gMDAwMQorT1NBICA3QzE0IE9OIE9TQSAgIDdDMTQgU1VCQ0hBTk5FTCA9IDAwMDIKK09TQSAgN0MxNSBPTiBPU0EgICA3QzE1IFNVQkNIQU5ORUwgPSAwMDAzCisKK0lmIHlvdSBoYXZlIGEgZ3Vlc3Qgd2l0aCBjZXJ0YWluIHByaXZpbGlnZXMgeW91IG1heSBiZSBhYmxlIHRvIHNlZSBkZXZpY2VzCit3aGljaCBkb24ndCBiZWxvbmcgdG8geW91IHRvIGF2b2lkIHRoaXMgZG8gYWRkIHRoZSBvcHRpb24gVi4KK2UuZy4KK1EgViBPU0EKKworTm93IHVzaW5nIHRoZSBkZXZpY2UgbnVtYmVycyByZXR1cm5lZCBieSB0aGlzIGNvbW1hbmQgd2Ugd2lsbAorVHJhY2UgdGhlIGlvIHN0YXJ0aW5nIHVwIG9uIHRoZSBmaXJzdCBkZXZpY2UgN2MwOCAmIDdjMDkKK0luIG91ciBzaW1wbGVzdCBjYXNlIHdlIGNhbiB0cmFjZSB0aGUgCitzdGFydCBzdWJjaGFubmVscworbGlrZSBUUiBTU0NIIDdDMDgtN0MwOQorb3IgdGhlIGhhbHQgc3ViY2hhbm5lbHMKK29yIFRSIEhTQ0ggN0MwOC03QzA5CitNU0NIJ3MgLFNUU0NIJ3MgSSB0aGluayB5b3UgY2FuIGd1ZXNzIHRoZSByZXN0CisKK0luZ28ncyBmYXZvdXJpdGUgdHJpY2sgaXMgdHJhY2luZyBhbGwgdGhlIElPJ3MgJiBDQ1dTICYgc3Bvb2xpbmcgdGhlbSBpbnRvIHRoZSByZWFkZXIgb2YgYW5vdGhlcgorVk0gZ3Vlc3Qgc28gaGUgY2FuIGZ0cCB0aGUgbG9nZmlsZSBiYWNrIHRvIGhpcyBvd24gbWFjaGluZS5JJ2xsIGRvIGEgc21hbGwgYml0IG9mIHRoaXMgJiBnaXZlIHlvdQorIGEgbG9vayBhdCB0aGUgb3V0cHV0LgorCisxKSBTcG9vbCBzdGRvdXQgdG8gVk0gcmVhZGVyCitTUCBQUlQgVE8gKGFub3RoZXIgdm0gZ3Vlc3QgKSBvciAqIGZvciB0aGUgbG9jYWwgdm0gZ3Vlc3QKKzIpIEZpbGwgdGhlIHJlYWRlciB3aXRoIHRoZSB0cmFjZQorVFIgSU8gN2MwOC03YzA5IElOU1QgSU5UIENDVyBQUlQgUlVOCiszKSBTdGFydCB1cCBsaW51eCAKK2kgMDBjICAKKzQpIEZpbmlzaCB0aGUgdHJhY2UKK1RSIEVORAorNSkgY2xvc2UgdGhlIHJlYWRlcgorQyBQUlQKKzYpIGxpc3QgcmVhZGVyIGNvbnRlbnRzCitSRFJMSVNUCis3KSBjb3B5IGl0IHRvIGxpbnV4NCdzIG1pbmlkaXNrIAorUkVDRUlWRSAvIExPRyBUWFQgQTEgKCByZXBsYWNlCis4KQorZmlsZWwgJiBwcmVzcyBGMTEgdG8gbG9vayBhdCBpdAorWW91IHNob3VsZCBzZWUgc29tZXRpbmcgbGlrZS4KKworMDAwMjA5NDInIFNTQ0ggIEIyMzM0MDAwICAgIDAwNDg4MTNDICAgIENDIDAgICAgU0NIIDAwMDAgICAgREVWIDdDMDgKKyAgICAgICAgICBDUEEgMDAwRkZERjAgICBQQVJNIDAwRTJDOUM0ICAgIEtFWSAwICBGUEkgQzAgIExQTSA4MAorICAgICAgICAgIENDVyAgICAwMDBGRkRGMCAgRTQyMDAxMDAgMDA0ODdGRTggICAwMDAwICBFNDI0MDEwMCAuLi4uLi4uLgorICAgICAgICAgIElEQUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQzRDhBRkU4CisgICAgICAgICAgSURBTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMEZCNzYwMDAKKzAwMDIwQjBBJyAgIEkvTyBERVYgN0MwOCAtPiAwMDAxOTdCQycgICBTQ0ggMDAwMCAgIFBBUk0gMDBFMkM5QzQKKzAwMDIxNjI4JyBUU0NIICBCMjM1NDAwMCA+PiAwMDQ4ODE2NCAgICBDQyAwICAgIFNDSCAwMDAwICAgIERFViA3QzA4CisgICAgICAgICAgQ0NXQSAwMDBGRkRGOCAgIERFViBTVFMgMEMgIFNDSCBTVFMgMDAgIENOVCAwMEVDCisgICAgICAgICAgIEtFWSAwICAgRlBJIEMwICBDQyAwICAgQ1RMUyA0MDA3CiswMDAyMjIzOCcgU1RTQ0ggQjIzNDQwMDAgPj4gMDA0ODgxMDggICAgQ0MgMCAgICBTQ0ggMDAwMCAgICBERVYgN0MwOAorCitJZiB5b3UgZG9uJ3QgbGlrZSBtZXNzaW5nIHVwIHlvdXIgcmVhZGVkICggYmVjYXVzZSB5b3UgcG9zc2libHkgYm9vdGVkIGZyb20gaXQgKQoreW91IGNhbiBhbHRlcm5hdGl2ZWx5IHNwb29sIGl0IHRvIGFub3RoZXIgcmVhZGVycyBndWVzdC4KKworCitPdGhlciBjb21tb24gVk0gZGV2aWNlIHJlbGF0ZWQgY29tbWFuZHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGhlc2UgY29tbWFuZHMgYXJlIGxpc3RlZCBvbmx5IGJlY2F1c2UgdGhleSBoYXZlCitiZWVuIG9mIHVzZSB0byBtZSBpbiB0aGUgcGFzdCAmIG1heSBiZSBvZiB1c2UgdG8KK3lvdSB0b28uIEZvciBtb3JlIGNvbXBsZXRlIGluZm8gb24gZWFjaCBvZiB0aGUgY29tbWFuZHMKK3VzZSB0eXBlIEhFTFAgPGNvbW1hbmQ+IGZyb20gQ01TLgorZGV0YWNoaW5nIGRldmljZXMKK0RFVCA8ZGV2bm8gcmFuZ2U+CitBVFQgPGRldm5vIHJhbmdlPiA8Z3Vlc3Q+IAorYXR0YWNoIGEgZGV2aWNlIHRvIGd1ZXN0ICogZm9yIHlvdXIgb3duIGd1ZXN0CitSRUFEWSA8ZGV2bm8+IGNhdXNlIFZNIHRvIGlzc3VlIGEgZmFrZSBpbnRlcnJ1cHQuCisKK1RoZSBWQVJZIGNvbW1hbmQgaXMgbm9ybWFsbHkgb25seSBhdmFpbGFibGUgdG8gVk0gYWRtaW5pc3RyYXRvcnMuCitWQVJZIE9OIFBBVEggPHBhdGg+IFRPIDxkZXZubyByYW5nZT4KK1ZBUlkgT0ZGIFBBVEggPFBBVEg+IEZST00gPGRldm5vIHJhbmdlPgorVGhpcyBpcyB1c2VkIHRvIHN3aXRjaCBvbiBvciBvZmYgY2hhbm5lbCBwYXRocyB0byBkZXZpY2VzLgorCitRIENIUElEIDxjaGFubmVsIHBhdGggSUQ+CitUaGlzIGRpc3BsYXlzIHN0YXRlIG9mIGRldmljZXMgdXNpbmcgdGhpcyBjaGFubmVsIHBhdGgKK0QgU0NISUIgPHN1YmNoYW5uZWw+CitUaGlzIGRpc3BsYXlzIHRoZSBzdWJjaGFubmVsIGluZm9ybWF0aW9uIFNDSElCIGJsb2NrIGZvciB0aGUgZGV2aWNlLgordGhpcyBJIGJlbGlldmUgaXMgYWxzbyBvbmx5IGF2YWlsYWJsZSB0byBhZG1pbmlzdHJhdG9ycy4KK0RFRklORSBDVEMgPGRldm5vPgorZGVmaW5lcyBhIHZpcnR1YWwgQ1RDIGNoYW5uZWwgdG8gY2hhbm5lbCBjb25uZWN0aW9uCisyIG5lZWQgdG8gYmUgZGVmaW5lZCBvbiBlYWNoIGd1ZXN0IGZvciB0aGUgQ1RDIGRyaXZlciB0byB1c2UuCitDT1VQTEUgIGRldm5vIHVzZXJpZCByZW1vdGUgZGV2bm8KK0pvaW5zIGEgbG9jYWwgdmlydHVhbCBkZXZpY2UgdG8gYSByZW1vdGUgdmlydHVhbCBkZXZpY2UKKyggY29tbW9ubHkgdXNlZCBmb3IgdGhlIENUQyBkcml2ZXIgKS4KKworQnVpbGRpbmcgYSBWTSByYW1kaXNrIHVuZGVyIENNUyB3aGljaCBsaW51eCBjYW4gdXNlCitkZWYgdmZiLTxibG9ja3NpemU+IDxzdWJjaGFubmVsPiA8bnVtYmVyIGJsb2Nrcz4KK2Jsb2Nrc2l6ZSBpcyBjb21tb25seSA0MDk2IGZvciBsaW51eC4KK0Zvcm1hdHRpbmcgaXQKK2Zvcm1hdCA8c3ViY2hhbm5lbD4gPGRyaXZlciBsZXR0ZXIgZS5nLiB4PiAoYmxrc2l6ZSA8YmxvY2tzaXplPgorCitTaGFyaW5nIGEgZGlzayBiZXR3ZWVuIG11bHRpcGxlIGd1ZXN0cworTElOSyB1c2VyaWQgZGV2bm8xIGRldm5vMiBtb2RlIHBhc3N3b3JkCisKKworCitHREIgb24gUzM5MAorPT09PT09PT09PT0KK04uQi4gaWYgY29tcGlsaW5nIGZvciBkZWJ1Z2dpbmcgZ2RiIHdvcmtzIGJldHRlciB3aXRob3V0IG9wdGltaXNhdGlvbiAKKyggc2VlIENvbXBpbGluZyBwcm9ncmFtcyBmb3IgZGVidWdnaW5nICkKKworaW52b2NhdGlvbgorLS0tLS0tLS0tLQorZ2RiIDx2aWN0aW0gcHJvZ3JhbT4gPG9wdGlvbmFsIGNvcmVmaWxlPgorCitPbmxpbmUgaGVscAorLS0tLS0tLS0tLS0KK2hlbHA6IGdpdmVzIGhlbHAgb24gY29tbWFuZHMKK2UuZy4KK2hlbHAKK2hlbHAgZGlzcGxheQorTm90ZSBnZGIncyBvbmxpbmUgaGVscCBpcyB2ZXJ5IGdvb2QgdXNlIGl0LgorCisKK0Fzc2VtYmx5CistLS0tLS0tLQoraW5mbyByZWdpc3RlcnM6IGRpc3BsYXlzIHJlZ2lzdGVycyBvdGhlciB0aGFuIGZsb2F0aW5nIHBvaW50LgoraW5mbyBhbGwtcmVnaXN0ZXJzOiBkaXNwbGF5cyBmbG9hdGluZyBwb2ludHMgYXMgd2VsbC4KK2Rpc2Fzc2VtYmxlOiBkaXNzYXNzZW1ibGVzCitlLmcuCitkaXNhc3NlbWJsZSB3aXRob3V0IHBhcmFtZXRlcnMgd2lsbCBkaXNhc3NlbWJsZSB0aGUgY3VycmVudCBmdW5jdGlvbgorZGlzYXNzZW1ibGUgJHBjICRwYysxMCAKKworVmlld2luZyAmIG1vZGlmeWluZyB2YXJpYWJsZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitwcmludCBvciBwOiBkaXNwbGF5cyB2YXJpYWJsZSBvciByZWdpc3RlcgorZS5nLiBwL3ggJHNwIHdpbGwgZGlzcGxheSB0aGUgc3RhY2sgcG9pbnRlcgorCitkaXNwbGF5OiBwcmludHMgdmFyaWFibGUgb3IgcmVnaXN0ZXIgZWFjaCB0aW1lIHByb2dyYW0gc3RvcHMKK2UuZy4KK2Rpc3BsYXkveCAkcGMgd2lsbCBkaXNwbGF5IHRoZSBwcm9ncmFtIGNvdW50ZXIKK2Rpc3BsYXkgYXJnYworCit1bmRpc3BsYXkgOiB1bmRvJ3MgZGlzcGxheSdzCisKK2luZm8gYnJlYWtwb2ludHM6IHNob3dzIGFsbCBjdXJyZW50IGJyZWFrcG9pbnRzCisKK2luZm8gc3RhY2s6IHNob3dzIHN0YWNrIGJhY2sgdHJhY2UgKCBpZiB0aGlzIGRvc2VudCB3b3JrIHRvbyB3ZWxsLCBJJ2xsIHNob3cgeW91IHRoZQorc3RhY2t0cmFjZSBieSBoYW5kIGJlbG93ICkuCisKK2luZm8gbG9jYWxzOiBkaXNwbGF5cyBsb2NhbCB2YXJpYWJsZXMuCisKK2luZm8gYXJnczogZGlzcGxheSBjdXJyZW50IHByb2NlZHVyZSBhcmd1bWVudHMuCisKK3NldCBhcmdzOiB3aWxsIHNldCBhcmdjICYgYXJndiBlYWNoIHRpbWUgdGhlIHZpY3RpbSBwcm9ncmFtIGlzIGludm9rZWQuCisKK3NldCA8dmFyaWFibGU+PXZhbHVlCitzZXQgYXJnYz0xMDAKK3NldCAkcGM9MAorCisKKworTW9kaWZ5aW5nIGV4ZWN1dGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLQorc3RlcDogc3RlcHMgbiBsaW5lcyBvZiBzb3VyY2Vjb2RlCitzdGVwIHN0ZXBzIDEgbGluZS4KK3N0ZXAgMTAwIHN0ZXBzIDEwMCBsaW5lcyBvZiBjb2RlLgorCituZXh0OiBsaWtlIHN0ZXAgZXhjZXB0IHRoaXMgd2lsbCBub3Qgc3RlcCBpbnRvIHN1YnJvdXRpbmVzCisKK3N0ZXBpOiBzdGVwcyBhIHNpbmdsZSBtYWNoaW5lIGNvZGUgaW5zdHJ1Y3Rpb24uCitlLmcuIHN0ZXBpIDEwMAorCituZXh0aTogc3RlcHMgYSBzaW5nbGUgbWFjaGluZSBjb2RlIGluc3RydWN0aW9uIGJ1dCB3aWxsIG5vdCBzdGVwIGludG8gc3Vicm91dGluZXMuCisKK2ZpbmlzaDogd2lsbCBydW4gdW50aWwgZXhpdCBvZiB0aGUgY3VycmVudCByb3V0aW5lCisKK3J1bjogKHJlKXN0YXJ0cyBhIHByb2dyYW0KKworY29udDogY29udGludWVzIGEgcHJvZ3JhbQorCitxdWl0OiBleGl0cyBnZGIuCisKKworYnJlYWtwb2ludHMKKy0tLS0tLS0tLS0tLQorCiticmVhaworc2V0cyBhIGJyZWFrcG9pbnQKK2UuZy4KKworYnJlYWsgbWFpbgorCiticmVhayAqJHBjCisKK2JyZWFrICoweDQwMDYxOAorCitoZXJlcyBhIHJlYWxseSB1c2VmdWwgb25lIGZvciBsYXJnZSBwcm9ncmFtcworcmJyCitTZXQgYSBicmVha3BvaW50IGZvciBhbGwgZnVuY3Rpb25zIG1hdGNoaW5nIFJFR0VYUAorZS5nLgorcmJyIDM5MAord2lsbCBzZXQgYSBicmVha3BvaW50IHdpdGggYWxsIGZ1bmN0aW9ucyB3aXRoIDM5MCBpbiB0aGVpciBuYW1lLgorCitpbmZvIGJyZWFrcG9pbnRzCitsaXN0cyBhbGwgYnJlYWtwb2ludHMKKworZGVsZXRlOiBkZWxldGUgYnJlYWtwb2ludCBieSBudW1iZXIgb3IgZGVsZXRlIHRoZW0gYWxsCitlLmcuCitkZWxldGUgMSB3aWxsIGRlbGV0ZSB0aGUgZmlyc3QgYnJlYWtwb2ludAorZGVsZXRlIHdpbGwgZGVsZXRlIHRoZW0gYWxsCisKK3dhdGNoOiBUaGlzIHdpbGwgc2V0IGEgd2F0Y2hwb2ludCAoIHVzdWFsbHkgaGFyZHdhcmUgYXNzaXN0ZWQgKSwKK1RoaXMgd2lsbCB3YXRjaCBhIHZhcmlhYmxlIHRpbGwgaXQgY2hhbmdlcworZS5nLgord2F0Y2ggY250LCB3aWxsIHdhdGNoIHRoZSB2YXJpYWJsZSBjbnQgdGlsbCBpdCBjaGFuZ2VzLgorQXMgYW4gYXNpZGUgdW5mb3J0dW5hdGVseSBnZGIncywgYXJjaGl0ZWN0dXJlIGluZGVwZW5kZW50IHdhdGNocG9pbnQgY29kZQoraXMgaW5jb25zaXN0ZW50ICYgbm90IHZlcnkgZ29vZCwgd2F0Y2hwb2ludHMgdXN1YWxseSB3b3JrIGJ1dCBub3QgYWx3YXlzLgorCitpbmZvIHdhdGNocG9pbnRzOiBEaXNwbGF5IGN1cnJlbnRseSBhY3RpdmUgd2F0Y2hwb2ludHMKKworY29uZGl0aW9uOiAoIGFub3RoZXIgdXNlZnVsIG9uZSApCitTcGVjaWZ5IGJyZWFrcG9pbnQgbnVtYmVyIE4gdG8gYnJlYWsgb25seSBpZiBDT05EIGlzIHRydWUuCitVc2FnZSBpcyBgY29uZGl0aW9uIE4gQ09ORCcsIHdoZXJlIE4gaXMgYW4gaW50ZWdlciBhbmQgQ09ORCBpcyBhbgorZXhwcmVzc2lvbiB0byBiZSBldmFsdWF0ZWQgd2hlbmV2ZXIgYnJlYWtwb2ludCBOIGlzIHJlYWNoZWQuCisKKworCitVc2VyIGRlZmluZWQgZnVuY3Rpb25zL21hY3JvcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RlZmluZTogKCBOb3RlIHRoaXMgaXMgdmVyeSB2ZXJ5IHVzZWZ1bCxzaW1wbGUgJiBwb3dlcmZ1bCApCit1c2FnZSBkZWZpbmUgPG5hbWU+IDxsaXN0IG9mIGNvbW1hbmRzPiBlbmQKKworZXhhbXBsZXMgd2hpY2ggeW91IHNob3VsZCBjb25zaWRlciBwdXR0aW5nIGludG8gLmdkYmluaXQgaW4geW91ciBob21lIGRpcmVjdG9yeQorZGVmaW5lIGQKK3N0ZXBpCitkaXNhc3NlbWJsZSAkcGMgJHBjKzEwCitlbmQKKworZGVmaW5lIGUKK25leHRpCitkaXNhc3NlbWJsZSAkcGMgJHBjKzEwCitlbmQKKworCitPdGhlciBoYXJkIHRvIGNsYXNzaWZ5IHN0dWZmCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitzaWduYWwgbjoKK3NlbmRzIHRoZSB2aWN0aW0gcHJvZ3JhbSBhIHNpZ25hbC4KK2UuZy4gc2lnbmFsIDMgd2lsbCBzZW5kIGEgU0lHUVVJVC4KKworaW5mbyBzaWduYWxzOgord2hhdCBnZGIgZG9lcyB3aGVuIHRoZSB2aWN0aW0gcmVjZWl2ZXMgY2VydGFpbiBzaWduYWxzLgorCitsaXN0OgorZS5nLgorbGlzdCBsaXN0cyBjdXJyZW50IGZ1bmN0aW9uIHNvdXJjZQorbGlzdCAxLDEwIGxpc3QgZmlyc3QgMTAgbGluZXMgb2YgY3VycmV0IGZpbGUuCitsaXN0IHRlc3QuYzoxLDEwCisKKworZGlyZWN0b3J5OgorQWRkcyBkaXJlY3RvcmllcyB0byBiZSBzZWFyY2hlZCBmb3Igc291cmNlIGlmIGdkYiBjYW5ub3QgZmluZCB0aGUgc291cmNlLgorKG5vdGUgaXQgaXMgYSBiaXQgc2Vuc2l0aXRpdmUgYWJvdXQgc2xhc2hlcyApIAorZS5nLiBUbyBhZGQgdGhlIHJvb3Qgb2YgdGhlIGZpbGVzeXN0ZW0gdG8gdGhlIHNlYXJjaHBhdGggZG8KK2RpcmVjdG9yeSAvLworCisKK2NhbGwgPGZ1bmN0aW9uPgorVGhpcyBjYWxscyBhIGZ1bmN0aW9uIGluIHRoZSB2aWN0aW0gcHJvZ3JhbSwgdGhpcyBpcyBwcmV0dHkgcG93ZXJmdWwKK2UuZy4KKyhnZGIpIGNhbGwgcHJpbnRmKCJoZWxsbyB3b3JsZCIpCitvdXRwdXRzOgorJDEgPSAxMSAKKworWW91IG1pZ2h0IG5vdyBiZSB0aGlua2luZyB0aGF0IHRoZSBsaW5lIGFib3ZlIGRpZG4ndCB3b3JrLCBzb21ldGhpbmcgZXh0cmEgaGFkIHRvIGJlIGRvbmUuCisoZ2RiKSBjYWxsIGZmbHVzaChzdGRvdXQpCitoZWxsbyB3b3JsZCQyID0gMAorQXMgYW4gYXNpZGUgdGhlIGRlYnVnZ2VyIGFsc28gY2FsbHMgbWFsbG9jICYgZnJlZSB1bmRlciB0aGUgaG9vZCAKK3RvIG1ha2Ugc3BhY2UgZm9yIHRoZSAiaGVsbG8gd29ybGQiIHN0cmluZy4KKworCisKK2hpbnRzCistLS0tLQorMSkgY29tbWFuZCBjb21wbGV0aW9uIHdvcmtzIGp1c3QgbGlrZSBiYXNoIAorKCBpZiB5b3UgYXJlIGEgYmFkIHR5cGlzdCBsaWtlIG1lIHRoaXMgcmVhbGx5IGhlbHBzICkKK2UuZy4gaGl0IGJyIDxUQUI+ICYgY3Vyc29yIHVwICYgZG93biA6LSkuCisKKzIpIGlmIHlvdSBoYXZlIGEgZGVidWdnaW5nIHByb2JsZW0gdGhhdCB0YWtlcyBhIGZldyBzdGVwcyB0byByZWNyZWF0ZQorcHV0IHRoZSBzdGVwcyBpbnRvIGEgZmlsZSBjYWxsZWQgLmdkYmluaXQgaW4geW91ciBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5CitpZiB5b3UgaGF2ZSBkZWZpbmVkIGEgZmV3IGV4dHJhIHVzZWZ1bCB1c2VyIGRlZmluZWQgY29tbWFuZHMgcHV0IHRoZXNlIGluIAoreW91ciBob21lIGRpcmVjdG9yeSAmIHRoZXkgd2lsbCBiZSByZWFkIGVhY2ggdGltZSBnZGIgaXMgbGF1bmNoZWQuCisKK0EgdHlwaWNhbCAuZ2RiaW5pdCBmaWxlIG1pZ2h0IGJlLgorYnJlYWsgbWFpbgorcnVuCiticmVhayBydW50aW1lX2V4Y2VwdGlvbgorY29udCAKKworCitzdGFjayBjaGFpbmluZyBpbiBnZGIgYnkgaGFuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RoaXMgaXMgZG9uZSB1c2luZyBhIHRoZSBzYW1lIHRyaWNrIGRlc2NyaWJlZCBmb3IgVk0gCitwL3ggKCooJHNwKzU2KSkmMHg3ZmZmZmZmZiBnZXQgdGhlIGZpcnN0IGJhY2tjaGFpbi4KKworRm9yIHovQXJjaGl0ZWN0dXJlCitSZXBsYWNlIDU2IHdpdGggMTEyICYgaWdub3JlIHRoZSAmMHg3ZmZmZmZmZgoraW4gdGhlIG1hY3JvcyBiZWxvdyAmIGRvIG5hc3R5IGNhc3RzIHRvIGxvbmdzIGxpa2UgdGhlIGZvbGxvd2luZworYXMgZ2RiIHVuZm9ydHVuYXRlbHkgZGVhbHMgd2l0aCBwcmludGVkIGFyZ3VtZW50cyBhcyBpbnRzIHdoaWNoCittZXNzZXMgdXAgZXZlcnl0aGluZy4KK2kuZS4gaGVyZSBpcyBhIDNyZCBiYWNrY2hhaW4gZGVyZWZlcmVuY2UKK3AveCAqKGxvbmcgKikoKioqKGxvbmcgKioqKSRzcCsxMTIpCisKKwordGhpcyBvdXRwdXRzIAorJDUgPSAweDUyOGYxOCAKK29uIG15IG1hY2hpbmUuCitOb3cgeW91IGNhbiB1c2UgCitpbmZvIHN5bWJvbCAoKigkc3ArNTYpKSYweDdmZmZmZmZmIAoreW91IG1pZ2h0IHNlZSBzb21ldGhpbmcgbGlrZS4KK3JsX2dldGMgKyAzNiBpbiBzZWN0aW9uIC50ZXh0ICB0ZWxsaW5nIHlvdSB3aGF0IGlzIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDUyOGYxOAorTm93IGRvLgorcC94ICgqKCokc3ArNTYpKSYweDdmZmZmZmZmIAorVGhpcyBvdXRwdXRzCiskNiA9IDB4NTI4ZWQwCitOb3cgZG8uCitpbmZvIHN5bWJvbCAoKigqJHNwKzU2KSkmMHg3ZmZmZmZmZgorcmxfcmVhZF9rZXkgKyAxODAgaW4gc2VjdGlvbiAudGV4dAorbm93IGRvCitwL3ggKCooKiokc3ArNTYpKSYweDdmZmZmZmZmCismIHNvIG9uLgorCitEaXNhc3NlbWJsaW5nIGluc3RydWN0aW9ucyB3aXRob3V0IGRlYnVnIGluZm8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZ2RiIHR5cGljYWxseSBjb21wYWlucyBpZiB0aGVyZSBpcyBhIGxhY2sgb2YgZGVidWdnaW5nCitzeW1ib2xzIGluICB0aGUgZGlzYXNzZW1ibGUgY29tbWFuZCB3aXRoIAorIk5vIGZ1bmN0aW9uIGNvbnRhaW5zIHNwZWNpZmllZCBhZGRyZXNzLiIgdG8gZ2V0IGFyb3VuZAordGhpcyBkbyAKK3gvPG51bWJlciBsaW5lcyB0byBkaXNhc3NlbWJsZT54aSA8YWRkcmVzcz4KK2UuZy4KK3gvMjB4aSAweDQwMDczMAorCisKKworTm90ZTogUmVtZW1iZXIgZ2RiIGhhcyBoaXN0b3J5IGp1c3QgbGlrZSBiYXNoIHlvdSBkb24ndCBuZWVkIHRvIHJldHlwZSB0aGUKK3dob2xlIGxpbmUganVzdCB1c2UgdGhlIHVwICYgZG93biBhcnJvd3MuCisKKworCitGb3IgbW9yZSBpbmZvCistLS0tLS0tLS0tLS0tCitGcm9tIHlvdXIgbGludXhib3ggZG8gCittYW4gZ2RiIG9yIGluZm8gZ2RiLgorCitjb3JlIGR1bXBzCistLS0tLS0tLS0tCitXaGF0IGEgY29yZSBkdW1wID8sCitBIGNvcmUgZHVtcCBpcyBhIGZpbGUgZ2VuZXJhdGVkIGJ5IHRoZSBrZXJuZWwgKCBpZiBhbGxvd2VkICkgd2hpY2ggY29udGFpbnMgdGhlIHJlZ2lzdGVycywKKyYgYWxsIGFjdGl2ZSBwYWdlcyBvZiB0aGUgcHJvZ3JhbSB3aGljaCBoYXMgY3Jhc2hlZC4KK0Zyb20gdGhpcyBmaWxlIGdkYiB3aWxsIGFsbG93IHlvdSB0byBsb29rIGF0IHRoZSByZWdpc3RlcnMgJiBzdGFjayB0cmFjZSAmIG1lbW9yeSBvZiB0aGUKK3Byb2dyYW0gYXMgaWYgaXQganVzdCBjcmFzaGVkIG9uIHlvdXIgc3lzdGVtLCBpdCBpcyB1c3VhbGx5IGNhbGxlZCBjb3JlICYgY3JlYXRlZCBpbiB0aGUKK2N1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuCitUaGlzIGlzIHZlcnkgdXNlZnVsIGluIHRoYXQgYSBjdXN0b21lciBjYW4gbWFpbCBhIGNvcmUgZHVtcCB0byBhIHRlY2huaWNhbCBzdXBwb3J0IGRlcGFydG1lbnQKKyYgdGhlIHRlY2huaWNhbCBzdXBwb3J0IGRlcGFydG1lbnQgY2FuIHJlY29uc3RydWN0IHdoYXQgaGFwcGVuZWQuCitQcm92aWRlZCB0aGUgaGF2ZSBhbiBpZGVudGljYWwgY29weSBvZiB0aGlzIHByb2dyYW0gd2l0aCBkZWJ1Z2dpbmcgc3ltYm9scyBjb21waWxlZCBpbiAmIAordGhlIHNvdXJjZSBiYXNlIG9mIHRoaXMgYnVpbGQgaXMgYXZhaWxhYmxlLgorSW4gc2hvcnQgaXQgaXMgZmFyIG1vcmUgdXNlZnVsIHRoYW4gc29tZXRoaW5nIGxpa2UgYSBjcmFzaCBsb2cgY291bGQgZXZlciBob3BlIHRvIGJlLgorCitJbiB0aGVvcnkgYWxsIHRoYXQgaXMgbWlzc2luZyB0byByZXN0YXJ0IGEgY29yZSBkdW1wZWQgcHJvZ3JhbSBpcyBhIGtlcm5lbCBwYXRjaCB3aGljaAord2lsbCBkbyB0aGUgZm9sbG93aW5nLgorMSkgTWFrZSBhIG5ldyBrZXJuZWwgdGFzayBzdHJ1Y3R1cmUKKzIpIFJlbG9hZCBhbGwgdGhlIGR1bXBlZCBwYWdlcyBiYWNrIGludG8gdGhlIGtlcm5lbCdzIG1lbW9yeSBtYW5hZ2VtZW50IHN0cnVjdHVyZXMuCiszKSBEbyB0aGUgcmVxdWlyZWQgY2xvY2sgZml4dXBzCis0KSBHZXQgYWxsIGZpbGVzICYgbmV0d29yayBjb25uZWN0aW9ucyBmb3IgdGhlIHByb2Nlc3MgYmFjayBpbnRvIGFuIGlkZW50aWNhbCBzdGF0ZSAoIHJlYWxseSBkaWZmaWN1bHQgKS4KKzUpIEEgZmV3IG1vcmUgZGlmZmljdWx0IHRoaW5ncyBJIGhhdmVuJ3QgdGhvdWdodCBvZi4KKworCisKK1doeSBoYXZlIEkgbmV2ZXIgc2VlbiBvbmUgPy4KK1Byb2JhYmx5IGJlY2F1c2UgeW91IGhhdmVuJ3QgdXNlZCB0aGUgY29tbWFuZCAKK3VsaW1pdCAtYyB1bmxpbWl0ZWQgaW4gYmFzaAordG8gYWxsb3cgY29yZSBkdW1wcywgbm93IGRvIAordWxpbWl0IC1hIAordG8gdmVyaWZ5IHRoYXQgdGhlIGxpbWl0IHdhcyBhY2NlcHRlZC4KKworQSBzYW1wbGUgY29yZSBkdW1wCitUbyBjcmVhdGUgdGhpcyBJJ20gZ29pbmcgdG8gZG8KK3VsaW1pdCAtYyB1bmxpbWl0ZWQKK2dkYiAKK3RvIGxhdW5jaCBnZGIgKG15IHZpY3RpbSBhcHAuICkgbm93IGJlIGJhZCAmIGRvIHRoZSBmb2xsb3dpbmcgZnJvbSBhbm90aGVyIAordGVsbmV0L3h0ZXJtIHNlc3Npb24gdG8gdGhlIHNhbWUgbWFjaGluZQorcHMgLWF1eCB8IGdyZXAgZ2RiCitraWxsIC1TSUdTRUdWIDxnZGIncyBwaWQ+CitvciBhbHRlcm5hdGl2ZWx5IHVzZSBraWxsYWxsIC1TSUdTRUdWIGdkYiBpZiB5b3UgaGF2ZSB0aGUga2lsbGFsbCBjb21tYW5kLgorTm93IGxvb2sgYXQgdGhlIGNvcmUgZHVtcC4KKy4vZ2RiIC4vZ2RiIGNvcmUKK0Rpc3BsYXlzIHRoZSBmb2xsb3dpbmcKK0dOVSBnZGIgNC4xOAorQ29weXJpZ2h0IDE5OTggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitHREIgaXMgZnJlZSBzb2Z0d2FyZSwgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFuZCB5b3UgYXJlCit3ZWxjb21lIHRvIGNoYW5nZSBpdCBhbmQvb3IgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgaXQgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zLgorVHlwZSAic2hvdyBjb3B5aW5nIiB0byBzZWUgdGhlIGNvbmRpdGlvbnMuCitUaGVyZSBpcyBhYnNvbHV0ZWx5IG5vIHdhcnJhbnR5IGZvciBHREIuICBUeXBlICJzaG93IHdhcnJhbnR5IiBmb3IgZGV0YWlscy4KK1RoaXMgR0RCIHdhcyBjb25maWd1cmVkIGFzICJzMzkwLWlibS1saW51eCIuLi4KK0NvcmUgd2FzIGdlbmVyYXRlZCBieSBgLi9nZGInLgorUHJvZ3JhbSB0ZXJtaW5hdGVkIHdpdGggc2lnbmFsIDExLCBTZWdtZW50YXRpb24gZmF1bHQuCitSZWFkaW5nIHN5bWJvbHMgZnJvbSAvdXNyL2xpYi9saWJuY3Vyc2VzLnNvLjQuLi5kb25lLgorUmVhZGluZyBzeW1ib2xzIGZyb20gL2xpYi9saWJtLnNvLjYuLi5kb25lLgorUmVhZGluZyBzeW1ib2xzIGZyb20gL2xpYi9saWJjLnNvLjYuLi5kb25lLgorUmVhZGluZyBzeW1ib2xzIGZyb20gL2xpYi9sZC1saW51eC5zby4yLi4uZG9uZS4KKyMwICAweDQwMTI2ZDFhIGluIHJlYWQgKCkgZnJvbSAvbGliL2xpYmMuc28uNgorU2V0dGluZyB1cCB0aGUgZW52aXJvbm1lbnQgZm9yIGRlYnVnZ2luZyBnZGIuCitCcmVha3BvaW50IDEgYXQgMHg0ZGM2Zjg6IGZpbGUgdXRpbHMuYywgbGluZSA0NzEuCitCcmVha3BvaW50IDIgYXQgMHg0ZDg3YTQ6IGZpbGUgdG9wLmMsIGxpbmUgMjYwOS4KKyh0b3AtZ2RiKSBpbmZvIHN0YWNrCisjMCAgMHg0MDEyNmQxYSBpbiByZWFkICgpIGZyb20gL2xpYi9saWJjLnNvLjYKKyMxICAweDUyOGYyNiBpbiBybF9nZXRjIChzdHJlYW09MHg3ZmZmZmRlOCkgYXQgaW5wdXQuYzo0MDIKKyMyICAweDUyOGVkMCBpbiBybF9yZWFkX2tleSAoKSBhdCBpbnB1dC5jOjM4MQorIzMgIDB4NTE2N2U2IGluIHJlYWRsaW5lX2ludGVybmFsX2NoYXIgKCkgYXQgcmVhZGxpbmUuYzo0NTQKKyM0ICAweDUxNjhlZSBpbiByZWFkbGluZV9pbnRlcm5hbF9jaGFybG9vcCAoKSBhdCByZWFkbGluZS5jOjUwNworIzUgIDB4NTE2OTJjIGluIHJlYWRsaW5lX2ludGVybmFsICgpIGF0IHJlYWRsaW5lLmM6NTIxCisjNiAgMHg1MTY0ZmUgaW4gcmVhZGxpbmUgKHByb21wdD0weDdmZmZmODEwICJcMTc3gf+B+HhcMTc3gf+B94HYXDE3N4H/gfh4gcAiKQorICAgIGF0IHJlYWRsaW5lLmM6MzQ5CisjNyAgMHg0ZDdhOGEgaW4gY29tbWFuZF9saW5lX2lucHV0IChwcnJvbXB0PTB4NTY0NDIwICIoZ2RiKSAiLCByZXBlYXQ9MSwKKyAgICBhbm5vdGF0aW9uX3N1ZmZpeD0weDRkNmI0NCAicHJvbXB0IikgYXQgdG9wLmM6MjA5MQorIzggIDB4NGQ2Y2YwIGluIGNvbW1hbmRfbG9vcCAoKSBhdCB0b3AuYzoxMzQ1CisjOSAgMHg0ZTI1YmMgaW4gbWFpbiAoYXJnYz0xLCBhcmd2PTB4N2ZmZmZkZjQpIGF0IG1haW4uYzo2MzUKKworCitMREQKKz09PQorVGhpcyBpcyBhIHByb2dyYW0gd2hpY2ggbGlzdHMgdGhlIHNoYXJlZCBsaWJyYXJpZXMgd2hpY2ggYSBsaWJyYXJ5IG5lZWRzLAorTm90ZSB5b3UgYWxzbyBnZXQgdGhlIHJlbG9jYXRpb25zIG9mIHRoZSBzaGFyZWQgbGlicmFyeSB0ZXh0IHNlZ21lbnRzIHdoaWNoCitoZWxwIHdoZW4gdXNpbmcgb2JqZHVtcCAtLXNvdXJjZS4KK2UuZy4KKyBsZGQgLi9nZGIKK291dHB1dHMKK2xpYm5jdXJzZXMuc28uNCA9PiAvdXNyL2xpYi9saWJuY3Vyc2VzLnNvLjQgKDB4NDAwMTgwMDApCitsaWJtLnNvLjYgPT4gL2xpYi9saWJtLnNvLjYgKDB4NDAwNWUwMDApCitsaWJjLnNvLjYgPT4gL2xpYi9saWJjLnNvLjYgKDB4NDAwODQwMDApCisvbGliL2xkLWxpbnV4LnNvLjIgPT4gL2xpYi9sZC1saW51eC5zby4yICgweDQwMDAwMDAwKQorCisKK0RlYnVnZ2luZyBzaGFyZWQgbGlicmFyaWVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorTW9zdCBwcm9ncmFtcyB1c2Ugc2hhcmVkIGxpYnJhcmllcywgaG93ZXZlciBpdCBjYW4gYmUgdmVyeSBwYWluZnVsCit3aGVuIHlvdSBzaW5nbGUgc3RlcCBpbnN0cnVjdGlvbiBpbnRvIGEgZnVuY3Rpb24gbGlrZSBwcmludGYgZm9yIHRoZSAKK2ZpcnN0IHRpbWUgJiB5b3UgZW5kIHVwIGluIGZ1bmN0aW9ucyBsaWtlIF9kbF9ydW50aW1lX3Jlc29sdmUgdGhpcyBpcwordGhlIGxkLnNvIGRvaW5nIGxhenkgYmluZGluZywgbGF6eSBiaW5kaW5nIGlzIGEgY29uY2VwdCBpbiBFTEYgd2hlcmUgCitzaGFyZWQgbGlicmFyeSBmdW5jdGlvbnMgYXJlIG5vdCBsb2FkZWQgaW50byBtZW1vcnkgdW5sZXNzIHRoZXkgYXJlIAorYWN0dWFsbHkgdXNlZCwgZ3JlYXQgZm9yIHNhdmluZyBtZW1vcnkgYnV0IGEgcGFpbiB0byBkZWJ1Zy4KK1RvIGdldCBhcm91bmQgdGhpcyBlaXRoZXIgcmVsaW5rIHRoZSBwcm9ncmFtIC1zdGF0aWMgb3IgZXhpdCBnZGIgdHlwZSAKK2V4cG9ydCBMRF9CSU5EX05PVz10cnVlIHRoaXMgd2lsbCBzdG9wIGxhenkgYmluZGluZyAmIHJlc3RhcnQgdGhlIGdkYidpbmcgCit0aGUgcHJvZ3JhbSBpbiBxdWVzdGlvbi4KKyAKKworCitEZWJ1Z2dpbmcgbW9kdWxlcworPT09PT09PT09PT09PT09PT0KK0FzIG1vZHVsZXMgYXJlIGR5bmFtaWNhbGx5IGxvYWRlZCBpbnRvIHRoZSBrZXJuZWwgdGhlaXIgYWRkcmVzcyBjYW4gYmUKK2FueXdoZXJlIHRvIGdldCBhcm91bmQgdGhpcyB1c2UgdGhlIC1tIG9wdGlvbiB3aXRoIGluc21vZCB0byBlbWl0IGEgbG9hZAorbWFwIHdoaWNoIGNhbiBiZSBwaXBlZCBpbnRvIGEgZmlsZSBpZiByZXF1aXJlZC4KKworVGhlIHByb2MgZmlsZSBzeXN0ZW0KKz09PT09PT09PT09PT09PT09PT09CitXaGF0IGlzIGl0ID8uCitJdCBpcyBhIGZpbGVzeXN0ZW0gY3JlYXRlZCBieSB0aGUga2VybmVsIHdpdGggZmlsZXMgd2hpY2ggYXJlIGNyZWF0ZWQgb24gZGVtYW5kCitieSB0aGUga2VybmVsIGlmIHJlYWQsIG9yIGNhbiBiZSB1c2VkIHRvIG1vZGlmeSBrZXJuZWwgcGFyYW1ldGVycywKK2l0IGlzIGEgcG93ZXJmdWwgY29uY2VwdC4KKworZS5nLgorCitjYXQgL3Byb2Mvc3lzL25ldC9pcHY0L2lwX2ZvcndhcmQgCitPbiBteSBtYWNoaW5lIG91dHB1dHMgCiswIAordGVsbGluZyBtZSBpcF9mb3J3YXJkaW5nIGlzIG5vdCBvbiB0byBzd2l0Y2ggaXQgb24gSSBjYW4gZG8KK2VjaG8gMSA+ICAvcHJvYy9zeXMvbmV0L2lwdjQvaXBfZm9yd2FyZAorY2F0IGl0IGFnYWluCitjYXQgL3Byb2Mvc3lzL25ldC9pcHY0L2lwX2ZvcndhcmQgCitPbiBteSBtYWNoaW5lIG5vdyBvdXRwdXRzCisxCitJUCBmb3J3YXJkaW5nIGlzIG9uLgorVGhlcmUgaXMgYSBsb3Qgb2YgdXNlZnVsIGluZm8gaW4gaGVyZSBiZXN0IGZvdW5kIGJ5IGdvaW5nIGluICYgaGF2aW5nIGEgbG9vayBhcm91bmQsCitzbyBJJ2xsIHRha2UgeW91IHRocm91Z2ggc29tZSBlbnRyaWVzIEkgY29uc2lkZXIgaW1wb3J0YW50LgorCitBbGwgdGhlIHByb2Nlc3NlcyBydW5uaW5nIG9uIHRoZSBtYWNoaW5lIGhhdmUgdGhlcmUgb3duIGVudHJ5IGRlZmluZWQgYnkKKy9wcm9jLzxwaWQ+CitTbyBsZXRzIGhhdmUgYSBsb29rIGF0IHRoZSBpbml0IHByb2Nlc3MKK2NkIC9wcm9jLzEKKworY2F0IGNtZGxpbmUKK2VtaXRzCitpbml0IFsyXQorCitjZCAvcHJvYy8xL2ZkCitUaGlzIGNvbnRhaW5zIG51bWVyaWNhbCBlbnRyaWVzIG9mIGFsbCB0aGUgb3BlbiBmaWxlcywKK3NvbWUgb2YgdGhlc2UgeW91IGNhbiBjYXQgZS5nLiBzdGRvdXQgKDIpCisKK2NhdCAvcHJvYy8yOS9tYXBzCitvbiBteSBtYWNoaW5lIGVtaXRzCisKKzAwNDAwMDAwLTAwNDc4MDAwIHIteHAgMDAwMDAwMDAgNWY6MDAgNDEwMyAgICAgICAvYmluL2Jhc2gKKzAwNDc4MDAwLTAwNDdlMDAwIHJ3LXAgMDAwNzcwMDAgNWY6MDAgNDEwMyAgICAgICAvYmluL2Jhc2gKKzAwNDdlMDAwLTAwNDkyMDAwIHJ3eHAgMDAwMDAwMDAgMDA6MDAgMAorNDAwMDAwMDAtNDAwMTUwMDAgci14cCAwMDAwMDAwMCA1ZjowMCAxNDM4MiAgICAgIC9saWIvbGQtMi4xLjIuc28KKzQwMDE1MDAwLTQwMDE2MDAwIHJ3LXAgMDAwMTQwMDAgNWY6MDAgMTQzODIgICAgICAvbGliL2xkLTIuMS4yLnNvCis0MDAxNjAwMC00MDAxNzAwMCByd3hwIDAwMDAwMDAwIDAwOjAwIDAKKzQwMDE3MDAwLTQwMDE4MDAwIHJ3LXAgMDAwMDAwMDAgMDA6MDAgMAorNDAwMTgwMDAtNDAwMWIwMDAgci14cCAwMDAwMDAwMCA1ZjowMCAxNDQzNSAgICAgIC9saWIvbGlidGVybWNhcC5zby4yLjAuOAorNDAwMWIwMDAtNDAwMWMwMDAgcnctcCAwMDAwMjAwMCA1ZjowMCAxNDQzNSAgICAgIC9saWIvbGlidGVybWNhcC5zby4yLjAuOAorNDAwMWMwMDAtNDAxMGQwMDAgci14cCAwMDAwMDAwMCA1ZjowMCAxNDM4NyAgICAgIC9saWIvbGliYy0yLjEuMi5zbworNDAxMGQwMDAtNDAxMTEwMDAgcnctcCAwMDBmMDAwMCA1ZjowMCAxNDM4NyAgICAgIC9saWIvbGliYy0yLjEuMi5zbworNDAxMTEwMDAtNDAxMTQwMDAgcnctcCAwMDAwMDAwMCAwMDowMCAwCis0MDExNDAwMC00MDExZTAwMCByLXhwIDAwMDAwMDAwIDVmOjAwIDE0NDA4ICAgICAgL2xpYi9saWJuc3NfZmlsZXMtMi4xLjIuc28KKzQwMTFlMDAwLTQwMTFmMDAwIHJ3LXAgMDAwMDkwMDAgNWY6MDAgMTQ0MDggICAgICAvbGliL2xpYm5zc19maWxlcy0yLjEuMi5zbworN2ZmZmQwMDAtODAwMDAwMDAgcnd4cCBmZmZmZTAwMCAwMDowMCAwCisKKworU2hvd2luZyB1cyB0aGUgc2hhcmVkIGxpYnJhcmllcyBpbml0IHVzZXMgd2hlcmUgdGhleSBhcmUgaW4gbWVtb3J5CismIG1lbW9yeSBhY2Nlc3MgcGVybWlzc2lvbnMgZm9yIGVhY2ggdmlydHVhbCBtZW1vcnkgYXJlYS4KKworL3Byb2MvMS9jd2QgaXMgYSBzb2Z0bGluayB0byB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4KKy9wcm9jLzEvcm9vdCBpcyB0aGUgcm9vdCBvZiB0aGUgZmlsZXN5c3RlbSBmb3IgdGhpcyBwcm9jZXNzLiAKKworL3Byb2MvMS9tZW0gaXMgdGhlIGN1cnJlbnQgcnVubmluZyBwcm9jZXNzZXMgbWVtb3J5IHdoaWNoIHlvdQorY2FuIHJlYWQgJiB3cml0ZSB0byBsaWtlIGEgZmlsZS4KK3N0cmFjZSB1c2VzIHRoaXMgc29tZXRpbWVzIGFzIGl0IGlzIGEgYml0IGZhc3RlciB0aGFuIHRoZQorcmF0aGVyIGluZWZmaWNlbnQgcHRyYWNlIGludGVyZmFjZSBmb3IgcGVla2luZyBhdCBEQVRBLgorCisKK2NhdCBzdGF0dXMgCisKK05hbWU6ICAgaW5pdAorU3RhdGU6ICBTIChzbGVlcGluZykKK1BpZDogICAgMQorUFBpZDogICAwCitVaWQ6ICAgIDAgICAgICAgMCAgICAgICAwICAgICAgIDAKK0dpZDogICAgMCAgICAgICAwICAgICAgIDAgICAgICAgMAorR3JvdXBzOgorVm1TaXplOiAgICAgIDQwOCBrQgorVm1MY2s6ICAgICAgICAgMCBrQgorVm1SU1M6ICAgICAgIDIwOCBrQgorVm1EYXRhOiAgICAgICAyNCBrQgorVm1TdGs6ICAgICAgICAgOCBrQgorVm1FeGU6ICAgICAgIDM2OCBrQgorVm1MaWI6ICAgICAgICAgMCBrQgorU2lnUG5kOiAwMDAwMDAwMDAwMDAwMDAwCitTaWdCbGs6IDAwMDAwMDAwMDAwMDAwMDAKK1NpZ0lnbjogN2ZmZmZmZmZkN2YwZDhmYworU2lnQ2d0OiAwMDAwMDAwMDI4MGIyNjAzCitDYXBJbmg6IDAwMDAwMDAwZmZmZmZlZmYKK0NhcFBybTogMDAwMDAwMDBmZmZmZmZmZgorQ2FwRWZmOiAwMDAwMDAwMGZmZmZmZWZmCisKK1VzZXIgUFNXOiAgICAwNzBkZTAwMCA4MDQxNDE0NgordGFzazogMDA0YjYwMDAgdHNzOiAwMDRiNjJkOCBrc3A6IDAwNGI3Y2E4IHB0X3JlZ3M6IDAwNGI3ZjY4CitVc2VyIEdQUlM6CiswMDAwMDQwMCAgMDAwMDAwMDAgIDAwMDAwMDBiICA3ZmZmZmE5MAorMDAwMDAwMDAgIDAwMDAwMDAwICAwMDAwMDAwMCAgMDA0NWQ5ZjQKKzAwNDVjYWZjICA3ZmZmZmE5MCAgN2ZmZmZmMTggIDAwNDVjYjA4CiswMDAxMDQwMCAgODA0MDM5ZTggIDgwNDAzYWY4ICA3ZmZmZjhiMAorVXNlciBBQ1JTOgorMDAwMDAwMDAgIDAwMDAwMDAwICAwMDAwMDAwMCAgMDAwMDAwMDAKKzAwMDAwMDAxICAwMDAwMDAwMCAgMDAwMDAwMDAgIDAwMDAwMDAwCiswMDAwMDAwMCAgMDAwMDAwMDAgIDAwMDAwMDAwICAwMDAwMDAwMAorMDAwMDAwMDAgIDAwMDAwMDAwICAwMDAwMDAwMCAgMDAwMDAwMDAKK0tlcm5lbCBCYWNrQ2hhaW4gIENhbGxDaGFpbiAgICBCYWNrQ2hhaW4gIENhbGxDaGFpbgorICAgICAgIDAwNGI3Y2E4ICAgODAwMmJkMGMgICAgIDAwNGI3ZDE4ICAgODAwMmI5MmMKKyAgICAgICAwMDRiN2RiOCAgIDgwMDVjZDUwICAgICAwMDRiN2UzOCAgIDgwMDVkMTJhCisgICAgICAgMDA0YjdmMDggICA4MDAxOTExNCAgICAgICAgICAgICAgICAgICAgIAorU2hvd2luZyBhbW9uZyBvdGhlciB0aGluZ3MgbWVtb3J5IHVzYWdlICYgc3RhdHVzIG9mIHNvbWUgc2lnbmFscyAmCit0aGUgcHJvY2Vzc2VzJ2VzIHJlZ2lzdGVycyBmcm9tIHRoZSBrZXJuZWwgdGFza19zdHJ1Y3R1cmUKK2FzIHdlbGwgYXMgYSBiYWNrY2hhaW4gd2hpY2ggbWF5IGJlIHVzZWZ1bCBpZiBhIHByb2Nlc3MgY3Jhc2hlcworaW4gdGhlIGtlcm5lbCBmb3Igc29tZSB1bmtub3duIHJlYXNvbi4KKworU29tZSBkcml2ZXIgZGVidWdnaW5nIHRlY2huaXF1ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitkZWJ1ZyBmZWF0dXJlCistLS0tLS0tLS0tLS0tCitTb21lIG9mIG91ciBkcml2ZXJzIG5vdyBzdXBwb3J0IGEgImRlYnVnIGZlYXR1cmUiIGluCisvcHJvYy9zMzkwZGJmIHNlZSBzMzkwZGJmLnR4dCBpbiB0aGUgbGludXgvRG9jdW1lbnRhdGlvbiBkaXJlY3RvcnkKK2ZvciBtb3JlIGluZm8uCitlLmcuIAordG8gc3dpdGNoIG9uIHRoZSBsY3MgImRlYnVnIGZlYXR1cmUiCitlY2hvIDUgPiAvcHJvYy9zMzkwZGJmL2xjcy9sZXZlbAorJiB0aGVuIGFmdGVyIHRoZSBlcnJvciBvY2N1cnJlZC4KK2NhdCAvcHJvYy9zMzkwZGJmL2xjcy9zcHJpbnRmID4vbG9nZmlsZQordGhlIGxvZ2ZpbGUgbm93IGNvbnRhaW5zIHNvbWUgaW5mb3JtYXRpb24gd2hpY2ggbWF5IGhlbHAKK3RlY2ggc3VwcG9ydCByZXNvbHZlIGEgcHJvYmxlbSBpbiB0aGUgZmllbGQuCisKKworCitoaWdoIGxldmVsIGRlYnVnZ2luZyBuZXR3b3JrIGRyaXZlcnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoraWZjb25maWcgaXMgYSBxdWl0ZSB1c2VmdWwgY29tbWFuZAoraXQgZ2l2ZXMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgbmV0d29yayBkcml2ZXJzLgorCitJZiB5b3Ugc3VzcGVjdCB5b3VyIG5ldHdvcmsgZGV2aWNlIGRyaXZlciBpcyBkZWFkCitvbmUgd2F5IHRvIGNoZWNrIGlzIHR5cGUgCitpZmNvbmZpZyA8bmV0d29yayBkZXZpY2U+IAorZS5nLiB0cjAKK1lvdSBzaG91bGQgc2VlIHNvbWV0aGluZyBsaWtlCit0cjAgICAgICAgTGluayBlbmNhcDoxNi80IE1icHMgVG9rZW4gUmluZyAoTmV3KSAgSFdhZGRyIDAwOjA0OkFDOjIwOjhFOjQ4CisgICAgICAgICAgaW5ldCBhZGRyOjkuMTY0LjE4NS4xMzIgIEJjYXN0OjkuMTY0LjE5MS4yNTUgIE1hc2s6MjU1LjI1NS4yMjQuMAorICAgICAgICAgIFVQIEJST0FEQ0FTVCBSVU5OSU5HIE1VTFRJQ0FTVCAgTVRVOjIwMDAgIE1ldHJpYzoxCisgICAgICAgICAgUlggcGFja2V0czoyNDYxMzQgZXJyb3JzOjAgZHJvcHBlZDowIG92ZXJydW5zOjAgZnJhbWU6MAorICAgICAgICAgIFRYIHBhY2tldHM6NSBlcnJvcnM6MCBkcm9wcGVkOjAgb3ZlcnJ1bnM6MCBjYXJyaWVyOjAKKyAgICAgICAgICBjb2xsaXNpb25zOjAgdHhxdWV1ZWxlbjoxMDAKKworaWYgdGhlIGRldmljZSBkb2Vzbid0IHNheSB1cAordHJ5CisvZXRjL3JjLmQvaW5pdC5kL25ldHdvcmsgc3RhcnQgCisoIHRoaXMgc3RhcnRzIHRoZSBuZXR3b3JrIHN0YWNrICYgaG9wZWZ1bGx5IGNhbGxzIGlmY29uZmlnIHRyMCB1cCApLgoraWZjb25maWcgbG9va3MgYXQgdGhlIG91dHB1dCBvZiAvcHJvYy9uZXQvZGV2ICYgcHJlc2VudHMgaXQgaW4gYSBtb3JlIHByZXNlbnRhYmxlIGZvcm0KK05vdyBwaW5nIHRoZSBkZXZpY2UgZnJvbSBhIG1hY2hpbmUgaW4gdGhlIHNhbWUgc3VibmV0LgoraWYgdGhlIFJYIHBhY2tldHMgY291bnQgJiBUWCBwYWNrZXRzIGNvdW50cyBkb24ndCBpbmNyZW1lbnQgeW91IHByb2JhYmx5CitoYXZlIHByb2JsZW1zLgorbmV4dCAKK2NhdCAvcHJvYy9uZXQvYXJwCitEbyB5b3Ugc2VlIGFueSBoYXJkd2FyZSBhZGRyZXNzZXMgaW4gdGhlIGNhY2hlIGlmIG5vdCB5b3UgbWF5IGhhdmUgcHJvYmxlbXMuCitOZXh0IHRyeQorcGluZyAtYyA1IDxicm9hZGNhc3RfYWRkcj4gaS5lLiB0aGUgQmNhc3QgZmllbGQgYWJvdmUgaW4gdGhlIG91dHB1dCBvZgoraWZjb25maWcuIERvIHlvdSBzZWUgYW55IHJlcGxpZXMgZnJvbSBtYWNoaW5lcyBvdGhlciB0aGFuIHRoZSBsb2NhbCBtYWNoaW5lCitpZiBub3QgeW91IG1heSBoYXZlIHByb2JsZW1zLiBhbHNvIGlmIHRoZSBUWCBwYWNrZXRzIGNvdW50IGluIGlmY29uZmlnCitoYXNuJ3QgaW5jcmVtZW50ZWQgZWl0aGVyIHlvdSBoYXZlIHNlcmlvdXMgcHJvYmxlbXMgaW4geW91ciBkcml2ZXIgCisoZS5nLiB0aGUgdHhidXN5IGZpZWxkIG9mIHRoZSBuZXR3b3JrIGRldmljZSBiZWluZyBzdHVjayBvbiApIAorb3IgeW91IG1heSBoYXZlIG11bHRpcGxlIG5ldHdvcmsgZGV2aWNlcyBjb25uZWN0ZWQuCisKKworY2hhbmRldgorLS0tLS0tLQorVGhlcmUgaXMgYSBuZXcgZGV2aWNlIGxheWVyIGZvciBjaGFubmVsIGRldmljZXMsIHNvbWUKK2RyaXZlcnMgZS5nLiBsY3MgYXJlIHJlZ2lzdGVyZWQgd2l0aCB0aGlzIGxheWVyLgorSWYgdGhlIGRldmljZSB1c2VzIHRoZSBjaGFubmVsIGRldmljZSBsYXllciB5b3UnbGwgYmUKK2FibGUgdG8gZmluZCB3aGF0IGludGVycnVwdHMgaXQgdXNlcyAmIHRoZSBjdXJyZW50IHN0YXRlIAorb2YgdGhlIGRldmljZS4KK1NlZSB0aGUgbWFucGFnZSBjaGFuZGV2LjggJnR5cGUgY2F0IC9wcm9jL2NoYW5kZXYgZm9yIG1vcmUgaW5mby4KKworCisKK1N0YXJ0aW5nIHBvaW50cyBmb3IgZGVidWdnaW5nIHNjcmlwdGluZyBsYW5ndWFnZXMgZXRjLgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2Jhc2gvc2gKKworYmFzaCAteCA8c2NyaXB0bmFtZT4KK2UuZy4gYmFzaCAteCAvdXNyL2Jpbi9iYXNoYnVnCitkaXNwbGF5cyB0aGUgZm9sbG93aW5nIGxpbmVzIGFzIGl0IGV4ZWN1dGVzIHRoZW0uCisrIE1BQ0hJTkU9aTU4NgorKyBPUz1saW51eC1nbnUKKysgQ0M9Z2NjCisrIENGTEFHUz0gLURQUk9HUkFNPSdiYXNoJyAtREhPU1RUWVBFPSdpNTg2JyAtRE9TVFlQRT0nbGludXgtZ251JyAtRE1BQ0hUWVBFPSdpNTg2LXBjLWxpbnV4LWdudScgLURTSEVMTCAtREhBVkVfQ09ORklHX0ggICAtSS4gLUkuIC1JLi9saWIgLU8yIC1waXBlCisrIFJFTEVBU0U9Mi4wMQorKyBQQVRDSExFVkVMPTEKKysgUkVMU1RBVFVTPXJlbGVhc2UKKysgTUFDSFRZUEU9aTU4Ni1wYy1saW51eC1nbnUgICAKKworcGVybCAtZCA8c2NyaXB0bmFtZT4gcnVucyB0aGUgcGVybHNjcmlwdCBpbiBhIGZ1bGx5IGludGVyY2F0aXZlIGRlYnVnZ2VyCis8bGlrZSBnZGI+LgorVHlwZSAnaCcgaW4gdGhlIGRlYnVnZ2VyIGZvciBoZWxwLgorCitmb3IgZGVidWdnaW5nIGphdmEgdHlwZQoramRiIDxmaWxlbmFtZT4gYW5vdGhlciBmdWxseSBpbnRlcmFjdGl2ZSBnZGIgc3R5bGUgZGVidWdnZXIuCismIHR5cGUgPyBpbiB0aGUgZGVidWdnZXIgZm9yIGhlbHAuCisKKworCitEdW1wdG9vbCAmIExjcmFzaCAoIGxrY2QgKQorPT09PT09PT09PT09PT09PT09PT09PT09PT0KK01pY2hhZWwgSG9semhldSAmIG90aGVycyBoZXJlIGF0IElCTSBoYXZlIGEgZmFpcmx5IG1hdHVyZSBwb3J0IG9mIAorU0dJJ3MgbGNyYXNoIHRvb2wgd2hpY2ggYWxsb3dzIG9uZSB0byBsb29rIGF0IGtlcm5lbCBzdHJ1Y3R1cmVzIGluIGEKK3J1bm5pbmcga2VybmVsLgorCitJdCBhbHNvIGNvbXBsZW1lbnRzIGEgdG9vbCBjYWxsZWQgZHVtcHRvb2wgd2hpY2ggZHVtcHMgYWxsIHRoZSBrZXJuZWwncworbWVtb3J5IHBhZ2VzICYgcmVnaXN0ZXJzIHRvIGVpdGhlciBhIHRhcGUgb3IgYSBkaXNrLgorVGhpcyBjYW4gYmUgdXNlZCBieSB0ZWNoIHN1cHBvcnQgb3IgYW4gYW1iaXRpb3VzIGVuZCB1c2VyIGRvCitwb3N0IG1vcnRlbSBkZWJ1Z2dpbmcgb2YgYSBtYWNoaW5lIGxpa2UgZ2RiIGNvcmUgZHVtcHMuCisKK0dvaW5nIGludG8gaG93IHRvIHVzZSB0aGlzIHRvb2wgaW4gZGV0YWlsIHdpbGwgYmUgZXhwbGFpbmVkCitpbiBvdGhlciBkb2N1bWVudGF0aW9uIHN1cHBsaWVkIGJ5IElCTSB3aXRoIHRoZSBwYXRjaGVzICYgdGhlIAorbGNyYXNoIGhvbWVwYWdlIGh0dHA6Ly9vc3Muc2dpLmNvbS9wcm9qZWN0cy9sa2NkLyAmIHRoZSBsY3Jhc2ggbWFucGFnZS4KKworSG93IHRoZXkgd29yaworLS0tLS0tLS0tLS0tLQorTGNyYXNoIGlzIGEgcGVyZmVjdGx5IG5vcm1hbCBwcm9ncmFtLGhvd2V2ZXIsIGl0IHJlcXVpcmVzIDIgCithZGRpdGlvbmFsIGZpbGVzLCBLZXJudHlwZXMgd2hpY2ggaXMgYnVpbHQgdXNpbmcgYSBwYXRjaCB0byB0aGUgCitsaW51eCBrZXJuZWwgc291cmNlcyBpbiB0aGUgbGludXggcm9vdCBkaXJlY3RvcnkgJiB0aGUgU3lzdGVtLm1hcC4KKworS2VybnR5cGVzIGlzIGFuIGFuIG9iamVjdGZpbGUgd2hvc2Ugc29sZSBwdXJwb3NlIGluIGxpZmUKK2lzIHRvIHByb3ZpZGUgc3RhYnMgZGVidWcgaW5mbyB0byBsY3Jhc2gsIHRvIGRvIHRoaXMKK0tlcm50eXBlcyBpcyBidWlsdCBmcm9tIGtlcm50eXBlcy5jIHdoaWNoIGp1c3QgaW5jbHVkZXMgdGhlIG1vc3QgY29tbW9ubHkKK3JlZmVyZW5jZWQgaGVhZGVyIGZpbGVzIHVzZWQgd2hlbiBkZWJ1Z2dpbmcsIGxjcmFzaCBjYW4gdGhlbiByZWFkIHRoZQorLnN0YWJzIHNlY3Rpb24gb2YgdGhpcyBmaWxlLgorCitEZWJ1Z2dpbmcgYSBsaXZlIHN5c3RlbSBpdCB1c2VzIC9kZXYvbWVtCithbHRlcm5hdGl2ZWx5IGZvciBwb3N0IG1vcnRlbSBkZWJ1Z2dpbmcgaXQgdXNlcyB0aGUgZGF0YSAKK2NvbGxlY3RlZCBieSBkdW1wdG9vbC4KKworCisKK1N5c1JxCis9PT09PQorVGhpcyBpcyBub3cgc3VwcG9ydGVkIGJ5IGxpbnV4IGZvciBzLzM5MCAmIHovQXJjaGl0ZWN0dXJlLgorVG8gZW5hYmxlIGl0IGRvIGNvbXBpbGUgdGhlIGtlcm5lbCB3aXRoIAorS2VybmVsIEhhY2tpbmcgLT4gTWFnaWMgU3lzUnEgS2V5IEVuYWJsZWQKK2VjaG8gIjEiID4gL3Byb2Mvc3lzL2tlcm5lbC9zeXNycQorYWxzbyB0eXBlCitlY2hvICI4IiA+L3Byb2Mvc3lzL2tlcm5lbC9wcmludGsKK1RvIG1ha2UgcHJpbnRrIG91dHB1dCBnbyB0byBjb25zb2xlLgorT24gMzkwIGFsbCBjb21tYW5kcyBhcmUgcHJlZml4ZWQgd2l0aAorXi0KK2UuZy4KK14tdCB3aWxsIHNob3cgdGFza3MuCiteLT8gb3Igc29tZSB1bmtub3duIGNvbW1hbmQgd2lsbCBkaXNwbGF5IGhlbHAuCitUaGUgc3lzcnEga2V5IHJlYWRpbmcgaXMgdmVyeSBwaWNreSAoIEkgaGF2ZSB0byB0eXBlIHRoZSBrZXlzIGluIGFuCisgeHRlcm0gc2Vzc2lvbiAmIHBhc3RlIHRoZW0gIGludG8gdGhlIHgzMjcwIGNvbnNvbGUgKQorJiBpdCBtYXkgYmUgd2lzZSB0byBwcmVkZWZpbmUgdGhlIGtleXMgYXMgZGVzY3JpYmVkIGluIHRoZSBWTSBoaW50cyBhYm92ZQorCitUaGlzIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIHN5bmNpbmcgZGlza3MgdW5tb3VudGluZyAmIHJlYm9vdGluZworaWYgdGhlIG1hY2hpbmUgZ2V0cyBwYXJ0aWFsbHkgaHVuZy4KKworUmVhZCBEb2N1bWVudGF0aW9uL3N5c3JxLnR4dCBmb3IgbW9yZSBpbmZvCisKK1JlZmVyZW5jZXM6Cis9PT09PT09PT09PQorRW50ZXJwcmlzZSBTeXN0ZW1zIEFyY2hpdGVjdHVyZSBSZWZlcmVuY2UgU3VtbWFyeQorRW50ZXJwcmlzZSBTeXN0ZW1zIEFyY2hpdGVjdHVyZSBQcmluY2lwbGVzIG9mIE9wZXJhdGlvbgorSGFydG11dCBQZW5uZXJzIHMzOTAgc3RhY2sgZnJhbWUgc2hlZXQuCitJQk0gTWFpbmZyYW1lIENoYW5uZWwgQXR0YWNobWVudCBhIHRlY2hub2xvZ3kgYnJpZWYgZnJvbSBhIENJU0NPIHdlYnBhZ2UKK1ZhcmlvdXMgYml0cyBvZiBtYW4gJiBpbmZvIHBhZ2VzIG9mIExpbnV4LgorTGludXggJiBHREIgc291cmNlLgorVmFyaW91cyBpbmZvICYgbWFuIHBhZ2VzLgorQ01TIEhlbHAgb24gdHJhY2luZyBjb21tYW5kcy4KK0xpbnV4IGZvciBzLzM5MCBFbGYgQXBwbGljYXRpb24gQmluYXJ5IEludGVyZmFjZQorTGludXggZm9yIHovU2VyaWVzIEVsZiBBcHBsaWNhdGlvbiBCaW5hcnkgSW50ZXJmYWNlICggQm90aCBIaWdobHkgUmVjb21tZW5kZWQgKQorei9BcmNoaXRlY3R1cmUgUHJpbmNpcGxlcyBvZiBPcGVyYXRpb24gU0EyMi03ODMyLTAwCitFbnRlcnByaXNlIFN5c3RlbXMgQXJjaGl0ZWN0dXJlLzM5MCBSZWZlcmVuY2UgU3VtbWFyeSBTQTIyLTcyMDktMDEgJiB0aGUKK0VudGVycHJpc2UgU3lzdGVtcyBBcmNoaXRlY3R1cmUvMzkwIFByaW5jaXBsZXMgb2YgT3BlcmF0aW9uIFNBMjItNzIwMS0wNQorCitTcGVjaWFsIFRoYW5rcworPT09PT09PT09PT09PT0KK1NwZWNpYWwgdGhhbmtzIHRvIE5lYWxlIEZlcmd1c29uIHdobyBtYWludGFpbnMgYSBtdWNoCitwcmV0dGllciBIVE1MIHZlcnNpb24gb2YgdGhpcyBwYWdlIGF0CitodHRwOi8vcGVuZ3VpbnZtLnByaW5jZXRvbi5lZHUvbm90ZXMuaHRtbCNEZWJ1ZzM5MAorQm9iIEdyYWluZ2VyIFN0ZWZhbiBCYWRlciAmIG90aGVycyBmb3IgcmVwb3J0aW5nIGJ1Z3MKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vczM5MC9UQVBFIGIvRG9jdW1lbnRhdGlvbi9zMzkwL1RBUEUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzYzOWFhNQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vczM5MC9UQVBFCkBAIC0wLDAgKzEsMTIyIEBACitDaGFubmVsIGF0dGFjaGVkIFRhcGUgZGV2aWNlIGRyaXZlciAKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1XQVJOSU5HLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RoaXMgZHJpdmVyIGlzIGNvbnNpZGVyZWQgdG8gYmUgRVhQRVJJTUVOVEFMLiBEbyBOT1QgdXNlIGl0IGluIAorcHJvZHVjdGlvbiBlbnZpcm9ubWVudHMuIEZlZWwgZnJlZSB0byB0ZXN0IGl0IGFuZCByZXBvcnQgcHJvYmxlbXMgYmFjayB0byB1cy4gCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgTElOVVggZm9yIHpTZXJpZXMgdGFwZSBkZXZpY2UgZHJpdmVyIG1hbmFnZXMgY2hhbm5lbCBhdHRhY2hlZCB0YXBlIGRyaXZlcyAKK3doaWNoIGFyZSBjb21wYXRpYmxlIHRvIElCTSAzNDgwIG9yIElCTSAzNDkwIG1hZ25ldGljIHRhcGUgc3Vic3lzdGVtcy4gVGhpcyAKK2luY2x1ZGVzIHZhcmlvdXMgbW9kZWxzIG9mIHRoZXNlIGRldmljZXMgKGZvciBleGFtcGxlIHRoZSAzNDkwRSkuIAorCisKK1RhcGUgZHJpdmVyIGZlYXR1cmVzIAorCitUaGUgZGV2aWNlIGRyaXZlciBzdXBwb3J0cyBhIG1heGltdW0gb2YgMTI4IHRhcGUgZGV2aWNlcy4gCitObyBvZmZpY2lhbCBMSU5VWCBkZXZpY2UgbWFqb3IgbnVtYmVyIGlzIGFzc2lnbmVkIHRvIHRoZSB6U2VyaWVzIHRhcGUgZGV2aWNlIAorZHJpdmVyLiBJdCBhbGxvY2F0ZXMgbWFqb3IgbnVtYmVycyBkeW5hbWljYWxseSBhbmQgcmVwb3J0cyB0aGVtIG9uIHN5c3RlbSAKK3N0YXJ0dXAuIAorVHlwaWNhbGx5IGl0IHdpbGwgZ2V0IG1ham9yIG51bWJlciAyNTQgZm9yIGJvdGggdGhlIGNoYXJhY3RlciBkZXZpY2UgZnJvbnQtZW5kIAorYW5kIHRoZSBibG9jayBkZXZpY2UgZnJvbnQtZW5kLiAKKworVGhlIHRhcGUgZGV2aWNlIGRyaXZlciBuZWVkcyBubyBrZXJuZWwgcGFyYW1ldGVycy4gQWxsIHN1cHBvcnRlZCBkZXZpY2VzIAorcHJlc2VudCBhcmUgZGV0ZWN0ZWQgb24gZHJpdmVyIGluaXRpYWxpemF0aW9uIGF0IHN5c3RlbSBzdGFydHVwIG9yIG1vZHVsZSBsb2FkLgorVGhlIGRldmljZXMgZGV0ZWN0ZWQgYXJlIG9yZGVyZWQgYnkgdGhlaXIgc3ViY2hhbm5lbCBudW1iZXJzLiBUaGUgZGV2aWNlIHdpdGggCit0aGUgbG93ZXN0IHN1YmNoYW5uZWwgbnVtYmVyIGJlY29tZXMgZGV2aWNlIDAsIHRoZSBuZXh0IG9uZSB3aWxsIGJlIGRldmljZSAxIAorYW5kIHNvIG9uLiAKKworCitUYXBlIGNoYXJhY3RlciBkZXZpY2UgZnJvbnQtZW5kIAorCitUaGUgdXN1YWwgd2F5IHRvIHJlYWQgb3Igd3JpdGUgdG8gdGhlIHRhcGUgZGV2aWNlIGlzIHRocm91Z2ggdGhlIGNoYXJhY3RlciAKK2RldmljZSBmcm9udC1lbmQuIFRoZSB6U2VyaWVzIHRhcGUgZGV2aWNlIGRyaXZlciBwcm92aWRlcyB0d28gY2hhcmFjdGVyIGRldmljZXMKK2ZvciBlYWNoIHBoeXNpY2FsIGRldmljZSAtLSB0aGUgZmlyc3Qgb2YgdGhlc2Ugd2lsbCByZXdpbmQgYXV0b21hdGljYWxseSB3aGVuIAoraXQgaXMgY2xvc2VkLCB0aGUgc2Vjb25kIHdpbGwgbm90IHJld2luZCBhdXRvbWF0aWNhbGx5LiAKKworVGhlIGNoYXJhY3RlciBkZXZpY2Ugbm9kZXMgYXJlIG5hbWVkIC9kZXYvcnRpYm0wIChyZXdpbmRpbmcpIGFuZCAvZGV2L250aWJtMCAKKyhub24tcmV3aW5kaW5nKSBmb3IgdGhlIGZpcnN0IGRldmljZSwgL2Rldi9ydGlibTEgYW5kIC9kZXYvbnRpYm0xIGZvciB0aGUgCitzZWNvbmQsIGFuZCBzbyBvbi4gCisKK1RoZSBjaGFyYWN0ZXIgZGV2aWNlIGZyb250LWVuZCBjYW4gYmUgdXNlZCBhcyBhbnkgb3RoZXIgTElOVVggdGFwZSBkZXZpY2UuIFlvdSAKK2NhbiB3cml0ZSB0byBpdCBhbmQgcmVhZCBmcm9tIGl0IHVzaW5nIExJTlVYIGZhY2lsaXRpZXMgc3VjaCBhcyBHTlUgdGFyLiBUaGUgCit0b29sIG10IGNhbiBiZSB1c2VkIHRvIHBlcmZvcm0gY29udHJvbCBvcGVyYXRpb25zLCBzdWNoIGFzIHJld2luZGluZyB0aGUgdGFwZSAKK29yIHNraXBwaW5nIGEgZmlsZS4gCisKK01vc3QgTElOVVggdGFwZSBzb2Z0d2FyZSBzaG91bGQgd29yayB3aXRoIGVpdGhlciB0YXBlIGNoYXJhY3RlciBkZXZpY2UuIAorCisKK1RhcGUgYmxvY2sgZGV2aWNlIGZyb250LWVuZCAKKworVGhlIHRhcGUgZGV2aWNlIG1heSBhbHNvIGJlIGFjY2Vzc2VkIGFzIGEgYmxvY2sgZGV2aWNlIGluIHJlYWQtb25seSBtb2RlLiAKK1RoaXMgY291bGQgYmUgdXNlZCBmb3Igc29mdHdhcmUgaW5zdGFsbGF0aW9uIGluIHRoZSBzYW1lIHdheSBhcyBpdCBpcyB1c2VkIHdpdGggCitvdGhlciBvcGVyYXRpb24gc3lzdGVtcyBvbiB0aGUgelNlcmllcyBwbGF0Zm9ybSAoYW5kIG1vc3QgTElOVVggCitkaXN0cmlidXRpb25zIGFyZSBzaGlwcGVkIG9uIGNvbXBhY3QgZGlzayB1c2luZyBJU085NjYwIGZpbGVzeXN0ZW1zKS4gCisKK09uZSBibG9jayBkZXZpY2Ugbm9kZSBpcyBwcm92aWRlZCBmb3IgZWFjaCBwaHlzaWNhbCBkZXZpY2UuIFRoZXNlIGFyZSBuYW1lZCAKKy9kZXYvYnRpYm0wIGZvciB0aGUgZmlyc3QgZGV2aWNlLCAvZGV2L2J0aWJtMSBmb3IgdGhlIHNlY29uZCBhbmQgc28gb24uIAorWW91IHNob3VsZCBvbmx5IHVzZSB0aGUgSVNPOTY2MCBmaWxlc3lzdGVtIG9uIExJTlVYIGZvciB6U2VyaWVzIHRhcGVzIGJlY2F1c2UgCit0aGUgcGh5c2ljYWwgdGFwZSBkZXZpY2VzIGNhbm5vdCBwZXJmb3JtIGZhc3Qgc2Vla3MgYW5kIHRoZSBJU085NjYwIHN5c3RlbSBpcyAKK29wdGltaXplZCBmb3IgdGhpcyBzaXR1YXRpb24uIAorCisKK1RhcGUgYmxvY2sgZGV2aWNlIGV4YW1wbGUgCisKK0luIHRoaXMgZXhhbXBsZSBhIHRhcGUgd2l0aCBhbiBJU085NjYwIGZpbGVzeXN0ZW0gaXMgY3JlYXRlZCB1c2luZyB0aGUgZmlyc3QgCit0YXBlIGRldmljZS4gSVNPOTY2MCBmaWxlc3lzdGVtIHN1cHBvcnQgbXVzdCBiZSBidWlsdCBpbnRvIHlvdXIgc3lzdGVtIGtlcm5lbAorZm9yIHRoaXMuIAorVGhlIG10IGNvbW1hbmQgaXMgdXNlZCB0byBpc3N1ZSB0YXBlIGNvbW1hbmRzIGFuZCB0aGUgbWtpc29mcyBjb21tYW5kIHRvIAorY3JlYXRlIGFuIElTTzk2NjAgZmlsZXN5c3RlbTogCisKKy0gY3JlYXRlIGEgTElOVVggZGlyZWN0b3J5IChzb21lZGlyKSB3aXRoIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZXN5c3RlbSAKKyAgICAgbWtkaXIgc29tZWRpcgorICAgICBjcCBjb250ZW50cyBzb21lZGlyIAorCistIGluc2VydCBhIHRhcGUgCisKKy0gZW5zdXJlIHRoZSB0YXBlIGlzIGF0IHRoZSBiZWdpbm5pbmcgCisgICAgIG10IC1mIC9kZXYvbnRpYm0wIHJld2luZCAKKworLSBzZXQgdGhlIGJsb2Nrc2l6ZSBvZiB0aGUgY2hhcmFjdGVyIGRyaXZlci4gVGhlIGJsb2Nrc2l6ZSAyMDQ4IGJ5dGVzCisgIGlzIGNvbW1vbmx5IHVzZWQgb24gSVNPOTY2MCBDRC1Sb21zCisgICAgIG10IC1mIC9kZXYvbnRpYm0wIHNldGJsayAyMDQ4IAorCistIHdyaXRlIHRoZSBmaWxlc3lzdGVtIHRvIHRoZSBjaGFyYWN0ZXIgZGV2aWNlIGRyaXZlciAKKyAgICAgbWtpc29mcyAtbyAvZGV2L250aWJtMCBzb21lZGlyIAorCistIHJld2luZCB0aGUgdGFwZSBhZ2FpbiAKKyAgICAgbXQgLWYgL2Rldi9udGlibTAgcmV3aW5kIAorCistIE5vdyB5b3UgY2FuIG1vdW50IHlvdXIgbmV3IGZpbGVzeXN0ZW0gYXMgYSBibG9jayBkZXZpY2U6IAorICAgICBtb3VudCAtdCBpc285NjYwIC1vIHJvLGJsb2NrPTIwNDggL2Rldi9idGlibTAgL21udCAKKworVE9ETyBMaXN0IAorCisgICAtIERyaXZlciBoYXMgdG8gYmUgc3RhYmlsaXplZCBzdGlsbAorCitCVUdTIAorCitUaGlzIGRyaXZlciBpcyBjb25zaWRlcmVkIEJFVEEsIHdoaWNoIG1lYW5zIHNvbWUgd2Vha25lc3NlcyBtYXkgc3RpbGwKK2JlIGluIGl0LgorSWYgYW4gZXJyb3Igb2NjdXJzIHdoaWNoIGNhbm5vdCBiZSBoYW5kbGVkIGJ5IHRoZSBjb2RlIHlvdSB3aWxsIGdldCBhIAorc2Vuc2UtZGF0YSBkdW1wLkluIHRoYXQgY2FzZSBwbGVhc2UgZG8gdGhlIGZvbGxvd2luZzogCisKKzEuIHNldCB0aGUgdGFwZSBkcml2ZXIgZGVidWcgbGV2ZWwgdG8gbWF4aW11bTogCisgICAgIGVjaG8gNiA+L3Byb2MvczM5MGRiZi90YXBlL2xldmVsIAorCisyLiByZS1wZXJmb3JtIHRoZSBhY3Rpb25zIHdoaWNoIHByb2R1Y2VkIHRoZSBidWcuIChIb3BlZnVsbHkgdGhlIGJ1ZyB3aWxsIAorICAgcmVhcHBlYXIuKSAKKworMy4gZ2V0IGEgc25hcHNob3QgZnJvbSB0aGUgZGVidWctZmVhdHVyZTogCisgICAgIGNhdCAvcHJvYy9zMzkwZGJmL3RhcGUvaGV4X2FzY2lpID5zb21lZmlsZSAKKworNC4gTm93IHB1dCB0aGUgc25hcHNob3QgdG9nZXRoZXIgd2l0aCBhIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIHRoZSBzaXR1YXRpb24gCisgICB0aGF0IGxlZCB0byB0aGUgYnVnOiAKKyAtIFdoaWNoIHRvb2wgZGlkIHlvdSB1c2U/IAorIC0gV2hpY2ggaGFyZHdhcmUgZG8geW91IGhhdmU/IAorIC0gV2FzIHlvdXIgdGFwZSB1bml0IG9ubGluZT8gCisgLSBJcyBpdCBhIHNoYXJlZCB0YXBlIHVuaXQ/IAorCis1LiBTZW5kIGFuIGVtYWlsIHdpdGggeW91ciBidWcgcmVwb3J0IHRvOiAKKyAgICAgbWFpbHRvOkxpbnV4MzkwQGRlLmlibS5jb20gCisKKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zMzkwL2Nkcy50eHQgYi9Eb2N1bWVudGF0aW9uL3MzOTAvY2RzLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTM5NzE3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zMzkwL2Nkcy50eHQKQEAgLTAsMCArMSw1MTMgQEAKK0xpbnV4IGZvciBTLzM5MCBhbmQgelNlcmllcworCitDb21tb24gRGV2aWNlIFN1cHBvcnQgKENEUykKK0RldmljZSBEcml2ZXIgSS9PIFN1cHBvcnQgUm91dGluZXMKKworQXV0aG9ycyA6IEluZ28gQWRsdW5nCisJICBDb3JuZWxpYSBIdWNrCisKK0NvcHlyaWdodCwgSUJNIENvcnAuIDE5OTktMjAwMgorCitJbnRyb2R1Y3Rpb24KKworVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgdGhlIGNvbW1vbiBkZXZpY2Ugc3VwcG9ydCByb3V0aW5lcyBmb3IgTGludXgvMzkwLgorRGlmZmVyZW50IHRoYW4gb3RoZXIgaGFyZHdhcmUgYXJjaGl0ZWN0dXJlcywgRVNBLzM5MCBoYXMgZGVmaW5lZCBhIHVuaWZpZWQKK0kvTyBhY2Nlc3MgbWV0aG9kLiBUaGlzIGdpdmVzIHJlbGllZiB0byB0aGUgZGV2aWNlIGRyaXZlcnMgYXMgdGhleSBkb24ndAoraGF2ZSB0byBkZWFsIHdpdGggZGlmZmVyZW50IGJ1cyB0eXBlcywgcG9sbGluZyB2ZXJzdXMgaW50ZXJydXB0Citwcm9jZXNzaW5nLCBzaGFyZWQgdmVyc3VzIG5vbi1zaGFyZWQgaW50ZXJydXB0IHByb2Nlc3NpbmcsIERNQSB2ZXJzdXMgcG9ydAorSS9PIChQSU8pLCBhbmQgb3RoZXIgaGFyZHdhcmUgZmVhdHVyZXMgbW9yZS4gSG93ZXZlciwgdGhpcyBpbXBsaWVzIHRoYXQKK2VpdGhlciBldmVyeSBzaW5nbGUgZGV2aWNlIGRyaXZlciBuZWVkcyB0byBpbXBsZW1lbnQgdGhlIGhhcmR3YXJlIEkvTworYXR0YWNobWVudCBmdW5jdGlvbmFsaXR5IGl0c2VsZiwgb3IgdGhlIG9wZXJhdGluZyBzeXN0ZW0gcHJvdmlkZXMgZm9yIGEKK3VuaWZpZWQgbWV0aG9kIHRvIGFjY2VzcyB0aGUgaGFyZHdhcmUsIHByb3ZpZGluZyBhbGwgdGhlIGZ1bmN0aW9uYWxpdHkgdGhhdAorZXZlcnkgc2luZ2xlIGRldmljZSBkcml2ZXIgd291bGQgaGF2ZSB0byBwcm92aWRlIGl0c2VsZi4KKworVGhlIGRvY3VtZW50IGRvZXMgbm90IGludGVuZCB0byBleHBsYWluIHRoZSBFU0EvMzkwIGhhcmR3YXJlIGFyY2hpdGVjdHVyZSBpbgorZXZlcnkgZGV0YWlsLlRoaXMgaW5mb3JtYXRpb24gY2FuIGJlIG9idGFpbmVkIGZyb20gdGhlIEVTQS8zOTAgUHJpbmNpcGxlcyBvZgorT3BlcmF0aW9uIG1hbnVhbCAoSUJNIEZvcm0uIE5vLiBTQTIyLTcyMDEpLgorCitJbiBvcmRlciB0byBidWlsZCBjb21tb24gZGV2aWNlIHN1cHBvcnQgZm9yIEVTQS8zOTAgSS9PIGludGVyZmFjZXMsIGEKK2Z1bmN0aW9uYWwgbGF5ZXIgd2FzIGludHJvZHVjZWQgdGhhdCBwcm92aWRlcyBnZW5lcmljIEkvTyBhY2Nlc3MgbWV0aG9kcyB0bwordGhlIGhhcmR3YXJlLiAKKworVGhlIGNvbW1vbiBkZXZpY2Ugc3VwcG9ydCBsYXllciBjb21wcmlzZXMgdGhlIEkvTyBzdXBwb3J0IHJvdXRpbmVzIGRlZmluZWQgCitiZWxvdy4gU29tZSBvZiB0aGVtIGltcGxlbWVudCBjb21tb24gTGludXggZGV2aWNlIGRyaXZlciBpbnRlcmZhY2VzLCB3aGlsZSAKK3NvbWUgb2YgdGhlbSBhcmUgRVNBLzM5MCBwbGF0Zm9ybSBzcGVjaWZpYy4KKworTm90ZToKK0luIG9yZGVyIHRvIHdyaXRlIGEgZHJpdmVyIGZvciBTLzM5MCwgeW91IGFsc28gbmVlZCB0byBsb29rIGludG8gdGhlIGludGVyZmFjZQorZGVzY3JpYmVkIGluIERvY3VtZW50YXRpb24vczM5MC9kcml2ZXItbW9kZWwudHh0LgorCitOb3RlIGZvciBwb3J0aW5nIGRyaXZlcnMgZnJvbSAyLjQ6CitUaGUgbWFqb3IgY2hhbmdlcyBhcmU6CisqIFRoZSBmdW5jdGlvbnMgdXNlIGEgY2N3X2RldmljZSBpbnN0ZWFkIG9mIGFuIGlycSAoc3ViY2hhbm5lbCkuCisqIEFsbCBkcml2ZXJzIG11c3QgZGVmaW5lIGEgY2N3X2RyaXZlciAoc2VlIGRyaXZlci1tb2RlbC50eHQpIGFuZCB0aGUgYXNzb2NpYXRlZAorICBmdW5jdGlvbnMuCisqIHJlcXVlc3RfaXJxKCkgYW5kIGZyZWVfaXJxKCkgYXJlIG5vIGxvbmdlciBkb25lIGJ5IHRoZSBkcml2ZXIuCisqIFRoZSBvcGVyX2hhbmRsZXIgaXMgKGtpbmRvZikgcmVwbGFjZWQgYnkgdGhlIHByb2JlKCkgYW5kIHNldF9vbmxpbmUoKSBmdW5jdGlvbnMKKyAgb2YgdGhlIGNjd19kcml2ZXIuCisqIFRoZSBub3Rfb3Blcl9oYW5kbGVyIGlzIChraW5kb2YpIHJlcGxhY2VkIGJ5IHRoZSByZW1vdmUoKSBhbmQgc2V0X29mZmxpbmUoKQorICBmdW5jdGlvbnMgb2YgdGhlIGNjd19kcml2ZXIuCisqIFRoZSBjaGFubmVsIGRldmljZSBsYXllciBpcyBnb25lLgorKiBUaGUgaW50ZXJydXB0IGhhbmRsZXJzIG11c3QgYmUgYWRhcHRlZCB0byB1c2UgYSBjY3dfZGV2aWNlIGFzIGFyZ3VtZW50LgorICBNb3Jlb3ZlciwgdGhleSBkb24ndCByZXR1cm4gYSBkZXZzdGF0LCBidXQgYW4gaXJiLgorKiBCZWZvcmUgaW5pdGlhdGluZyBhbiBpbywgdGhlIG9wdGlvbnMgbXVzdCBiZSBzZXQgdmlhIGNjd19kZXZpY2Vfc2V0X29wdGlvbnMoKS4KKworcmVhZF9kZXZfY2hhcnMoKQkKKyAgIHJlYWQgZGV2aWNlIGNoYXJhY3RlcmlzdGljcworICAgCityZWFkX2NvbmZfZGF0YSgpCisgICByZWFkIGNvbmZpZ3VyYXRpb24gZGF0YS4KKworY2N3X2RldmljZV9nZXRfY2l3KCkKKyAgIGdldCBjb21tYW5kcyBmcm9tIGV4dGVuZGVkIHNlbnNlIGRhdGEuCisKK2Njd19kZXZpY2Vfc3RhcnQoKQkKKyAgIGluaXRpYXRlIGFuIEkvTyByZXF1ZXN0LgorCitjY3dfZGV2aWNlX3Jlc3VtZSgpCisgICByZXN1bWUgY2hhbm5lbCBwcm9ncmFtIGV4ZWN1dGlvbi4KKworY2N3X2RldmljZV9oYWx0KCkJCisgICB0ZXJtaW5hdGUgdGhlIGN1cnJlbnQgSS9PIHJlcXVlc3QgcHJvY2Vzc2VkIG9uIHRoZSBkZXZpY2UuCisKK2RvX0lSUSgpCQorICAgZ2VuZXJpYyBpbnRlcnJ1cHQgcm91dGluZS4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIGludGVycnVwdCBlbnRyeQorICAgcm91dGluZSB3aGVuZXZlciBhbiBJL08gaW50ZXJydXB0IGlzIHByZXNlbnRlZCB0byB0aGUgc3lzdGVtLiBUaGUgZG9fSVJRKCkKKyAgIHJvdXRpbmUgZGV0ZXJtaW5lcyB0aGUgaW50ZXJydXB0IHN0YXR1cyBhbmQgY2FsbHMgdGhlIGRldmljZSBzcGVjaWZpYworICAgaW50ZXJydXB0IGhhbmRsZXIgYWNjb3JkaW5nIHRvIHRoZSBydWxlcyAoZmxhZ3MpIGRlZmluZWQgZHVyaW5nIEkvTyByZXF1ZXN0CisgICBpbml0aWF0aW9uIHdpdGggZG9fSU8oKS4KKworVGhlIG5leHQgY2hhcHRlcnMgZGVzY3JpYmUgdGhlIGZ1bmN0aW9ucyBvdGhlciB0aGFuIGRvX0lSUSgpIGluIG1vcmUgZGV0YWlscy4KK1RoZSBkb19JUlEoKSBpbnRlcmZhY2UgaXMgbm90IGRlc2NyaWJlZCwgYXMgaXQgaXMgY2FsbGVkIGZyb20gdGhlIExpbnV4LzM5MAorZmlyc3QgbGV2ZWwgaW50ZXJydXB0IGhhbmRsZXIgb25seSBhbmQgZG9lcyBub3QgY29tcHJpc2UgYSBkZXZpY2UgZHJpdmVyCitjYWxsYWJsZSBpbnRlcmZhY2UuIEluc3RlYWQsIHRoZSBmdW5jdGlvbmFsIGRlc2NyaXB0aW9uIG9mIGRvX0lPKCkgYWxzbworZGVzY3JpYmVzIHRoZSBpbnB1dCB0byB0aGUgZGV2aWNlIHNwZWNpZmljIGludGVycnVwdCBoYW5kbGVyLgorCitOb3RlOiBBbGwgZXhwbGFuYXRpb25zIGFwcGx5IGFsc28gdG8gdGhlIDY0IGJpdCBhcmNoaXRlY3R1cmUgczM5MHguCisKKworQ29tbW9uIERldmljZSBTdXBwb3J0IChDRFMpIGZvciBMaW51eC8zOTAgRGV2aWNlIERyaXZlcnMKKworR2VuZXJhbCBJbmZvcm1hdGlvbgorCitUaGUgZm9sbG93aW5nIGNoYXB0ZXJzIGRlc2NyaWJlIHRoZSBJL08gcmVsYXRlZCBpbnRlcmZhY2Ugcm91dGluZXMgdGhlCitMaW51eC8zOTAgY29tbW9uIGRldmljZSBzdXBwb3J0IChDRFMpIHByb3ZpZGVzIHRvIGFsbG93IGZvciBkZXZpY2Ugc3BlY2lmaWMKK2RyaXZlciBpbXBsZW1lbnRhdGlvbnMgb24gdGhlIElCTSBFU0EvMzkwIGhhcmR3YXJlIHBsYXRmb3JtLiBUaG9zZSBpbnRlcmZhY2VzCitpbnRlbmQgdG8gcHJvdmlkZSB0aGUgZnVuY3Rpb25hbGl0eSByZXF1aXJlZCBieSBldmVyeSBkZXZpY2UgZHJpdmVyCitpbXBsZW1lbnRhaW9uIHRvIGFsbG93IHRvIGRyaXZlIGEgc3BlY2lmaWMgaGFyZHdhcmUgZGV2aWNlIG9uIHRoZSBFU0EvMzkwCitwbGF0Zm9ybS4gU29tZSBvZiB0aGUgaW50ZXJmYWNlIHJvdXRpbmVzIGFyZSBzcGVjaWZpYyB0byBMaW51eC8zOTAgYW5kIHNvbWUKK29mIHRoZW0gY2FuIGJlIGZvdW5kIG9uIG90aGVyIExpbnV4IHBsYXRmb3JtcyBpbXBsZW1lbnRhdGlvbnMgdG9vLgorTWlzY2VsbGFuZW91cyBmdW5jdGlvbiBwcm90b3R5cGVzLCBkYXRhIGRlY2xhcmF0aW9ucywgYW5kIG1hY3JvIGRlZmluaXRpb25zCitjYW4gYmUgZm91bmQgaW4gdGhlIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBDIGhlYWRlciBmaWxlCitsaW51eC9pbmNsdWRlL2FzbS1zMzkwL2lycS5oLgorCitPdmVydmlldyBvZiBDRFMgaW50ZXJmYWNlIGNvbmNlcHRzCisKK0RpZmZlcmVudCB0byBvdGhlciBoYXJkd2FyZSBwbGF0Zm9ybXMsIHRoZSBFU0EvMzkwIGFyY2hpdGVjdHVyZSBkb2Vzbid0IGRlZmluZQoraW50ZXJydXB0IGxpbmVzIG1hbmFnZWQgYnkgYSBzcGVjaWZpYyBpbnRlcnJ1cHQgY29udHJvbGxlciBhbmQgYnVzIHN5c3RlbXMKK3RoYXQgbWF5IG9yIG1heSBub3QgYWxsb3cgZm9yIHNoYXJlZCBpbnRlcnJ1cHRzLCBETUEgcHJvY2Vzc2luZywgZXRjLi4gSW5zdGVhZCwKK3RoZSBFU0EvMzkwIGFyY2hpdGVjdHVyZSBoYXMgaW1wbGVtZW50ZWQgYSBzbyBjYWxsZWQgY2hhbm5lbCBzdWJzeXN0ZW0sIHRoYXQKK3Byb3ZpZGVzIGEgdW5pZmllZCB2aWV3IG9mIHRoZSBkZXZpY2VzIHBoeXNpY2FsbHkgYXR0YWNoZWQgdG8gdGhlIHN5c3RlbXMuCitUaG91Z2ggdGhlIEVTQS8zOTAgaGFyZHdhcmUgcGxhdGZvcm0ga25vd3MgYWJvdXQgYSBodWdlIHZhcmlldHkgb2YgZGlmZmVyZW50CitwZXJpcGhlcmFsIGF0dGFjaG1lbnRzIGxpa2UgZGlzayBkZXZpY2VzIChha2EuIERBU0RzKSwgdGFwZXMsIGNvbW11bmljYXRpb24KK2NvbnRyb2xsZXJzLCBldGMuIHRoZXkgY2FuIGFsbCBieSBhY2Nlc3NlZCBieSBhIHdlbGwgZGVmaW5lZCBhY2Nlc3MgbWV0aG9kIGFuZAordGhleSBhcmUgcHJlc2VudGluZyBJL08gY29tcGxldGlvbiBhIHVuaWZpZWQgd2F5IDogSS9PIGludGVycnVwdGlvbnMuIEV2ZXJ5CitzaW5nbGUgZGV2aWNlIGlzIHVuaXF1ZWx5IGlkZW50aWZpZWQgdG8gdGhlIHN5c3RlbSBieSBhIHNvIGNhbGxlZCBzdWJjaGFubmVsLAord2hlcmUgdGhlIEVTQS8zOTAgYXJjaGl0ZWN0dXJlIGFsbG93cyBmb3IgNjRrIGRldmljZXMgYmUgYXR0YWNoZWQuCisKK0xpbnV4LCBob3dldmVyLCB3YXMgZmlyc3QgYnVpbHQgb24gdGhlIEludGVsIFBDIGFyY2hpdGVjdHVyZSwgd2l0aCBpdHMgdHdvCitjYXNjYWRlZCA4MjU5IHByb2dyYW1tYWJsZSBpbnRlcnJ1cHQgY29udHJvbGxlcnMgKFBJQ3MpLCB0aGF0IGFsbG93IGZvciBhCittYXhpbXVtIG9mIDE1IGRpZmZlcmVudCBpbnRlcnJ1cHQgbGluZXMuIEFsbCBkZXZpY2VzIGF0dGFjaGVkIHRvIHN1Y2ggYSBzeXN0ZW0KK3NoYXJlIHRob3NlIDE1IGludGVycnVwdCBsZXZlbHMuIERldmljZXMgYXR0YWNoZWQgdG8gdGhlIElTQSBidXMgc3lzdGVtIG11c3QKK25vdCBzaGFyZSBpbnRlcnJ1cHQgbGV2ZWxzIChha2EuIElSUXMpLCBhcyB0aGUgSVNBIGJ1cyBiYXNlcyBvbiBlZGdlIHRyaWdnZXJlZAoraW50ZXJydXB0cy4gTUNBLCBFSVNBLCBQQ0kgYW5kIG90aGVyIGJ1cyBzeXN0ZW1zIGJhc2Ugb24gbGV2ZWwgdHJpZ2dlcmVkCitpbnRlcnJ1cHRzLCBhbmQgdGhlcmV3aXRoIGFsbG93IGZvciBzaGFyZWQgSVJRcy4gSG93ZXZlciwgaWYgbXVsdGlwbGUgZGV2aWNlcworcHJlc2VudCB0aGVpciBoYXJkd2FyZSBzdGF0dXMgYnkgdGhlIHNhbWUgKHNoYXJlZCkgSVJRLCB0aGUgb3BlcmF0aW5nIHN5c3RlbQoraGFzIHRvIGNhbGwgZXZlcnkgc2luZ2xlIGRldmljZSBkcml2ZXIgcmVnaXN0ZXJlZCBvbiB0aGlzIElSUSBpbiBvcmRlciB0bworZGV0ZXJtaW5lIHRoZSBkZXZpY2UgZHJpdmVyIG93bmluZyB0aGUgZGV2aWNlIHRoYXQgcmFpc2VkIHRoZSBpbnRlcnJ1cHQuCisKK0luIG9yZGVyIG5vdCB0byBpbnRyb2R1Y2UgYSBuZXcgSS9PIGNvbmNlcHQgdG8gdGhlIGNvbW1vbiBMaW51eCBjb2RlLAorTGludXgvMzkwIHByZXNlcnZlcyB0aGUgSVJRIGNvbmNlcHQgYW5kIHNlbWFudGljYWxseSBtYXBzIHRoZSBFU0EvMzkwCitzdWJjaGFubmVscyB0byBMaW51eCBhcyBJUlFzLiBUaGlzIGFsbG93cyBMaW51eC8zOTAgdG8gc3VwcG9ydCB1cCB0byA2NGsKK2RpZmZlcmVudCBJUlFzLCB1bmlxdWVseSByZXByZXNlbnRpZyBhIHNpbmdsZSBkZXZpY2UgZWFjaC4KKworVXAgdG8ga2VybmVsIDIuNCwgTGludXgvMzkwIHVzZWQgdG8gcHJvdmlkZSBpbnRlcmZhY2VzIHZpYSB0aGUgSVJRIChzdWJjaGFubmVsKS4KK0ZvciBpbnRlcm5hbCB1c2Ugb2YgdGhlIGNvbW1vbiBJL08gbGF5ZXIsIHRoZXNlIGFyZSBzdGlsbCB0aGVyZS4gSG93ZXZlciwgCitkZXZpY2UgZHJpdmVycyBzaG91bGQgdXNlIHRoZSBuZXcgY2FsbGluZyBpbnRlcmZhY2UgdmlhIHRoZSBjY3dfZGV2aWNlIG9ubHkuCisKK0R1cmluZyBpdHMgc3RhcnR1cCB0aGUgTGludXgvMzkwIHN5c3RlbSBjaGVja3MgZm9yIHBlcmlwaGVyYWwgZGV2aWNlcy4gRWFjaAorb2YgdGhvc2UgZGV2aWNlcyBpcyB1bmlxdWVseSBkZWZpbmVkIGJ5IGEgc28gY2FsbGVkIHN1YmNoYW5uZWwgYnkgdGhlIEVTQS8zOTAKK2NoYW5uZWwgc3Vic3lzdGVtLiBXaGlsZSB0aGUgc3ViY2hhbm5lbCBudW1iZXJzIGFyZSBzeXN0ZW0gZ2VuZXJhdGVkLCBlYWNoCitzdWJjaGFubmVsIGFsc28gdGFrZXMgYSB1c2VyIGRlZmluZWQgYXR0cmlidXRlLCB0aGUgc28gY2FsbGVkIGRldmljZSBudW1iZXIuCitCb3RoIHN1YmNoYW5uZWwgbnVtYmVyIGFuZCBkZXZpY2UgbnVtYmVyIGNhbiBub3QgZXhjZWVkIDY1NTM1LiBEdXJpbmcgZHJpdmVyZnMKK2luaXRpYWxpc2F0aW9uLCB0aGUgaW5mb3JtYXRpb24gYWJvdXQgY29udHJvbCB1bml0IHR5cGUgYW5kIGRldmljZSB0eXBlcyB0aGF0IAoraW1wbHkgc3BlY2lmaWMgSS9PIGNvbW1hbmRzIChjaGFubmVsIGNvbW1hbmQgd29yZHMgLSBDQ1dzKSBpbiBvcmRlciB0byBvcGVyYXRlCit0aGUgZGV2aWNlIGFyZSBnYXRoZXJlZC4gRGV2aWNlIGRyaXZlcnMgY2FuIHJldHJpZXZlIHRoaXMgc2V0IG9mIGhhcmR3YXJlCitpbmZvcm1hdGlvbiBkdXJpbmcgdGhlaXIgaW5pdGlhbGl6YXRpb24gc3RlcCB0byByZWNvZ25pemUgdGhlIGRldmljZXMgdGhleQorc3VwcG9ydCB1c2luZyB0aGUgaW5mb3JtYXRpb24gc2F2ZWQgaW4gdGhlIHN0cnVjdCBjY3dfZGV2aWNlIGdpdmVuIHRvIHRoZW0uCitUaGlzIG1ldGhvZHMgaW1wbGllcyB0aGF0IExpbnV4LzM5MCBkb2Vzbid0IHJlcXVpcmUgdG8gcHJvYmUgZm9yIGZyZWUgKG5vdAorYXJtZWQpIGludGVycnVwdCByZXF1ZXN0IGxpbmVzIChJUlFzKSB0byBkcml2ZSBpdHMgZGV2aWNlcyB3aXRoLiBXaGVyZQorYXBwbGljYWJsZSwgdGhlIGRldmljZSBkcml2ZXJzIGNhbiB1c2UgdGhlIHJlYWRfZGV2X2NoYXJzKCkgdG8gcmV0cmlldmUgZGV2aWNlCitjaGFyYWN0ZXJpc3RpY3MuIFRoaXMgY2FuIGJlIGRvbmUgd2l0aG91dCBoYXZpbmcgdG8gcmVxdWVzdCBkZXZpY2Ugb3duZXJzaGlwCitwcmV2aW91c2x5LgorCitJbiBvcmRlciB0byBhbGxvdyBmb3IgZWFzeSBJL08gaW5pdGlhdGlvbiB0aGUgQ0RTIGxheWVyIHByb3ZpZGVzIGEKK2Njd19kZXZpY2Vfc3RhcnQoKSBpbnRlcmZhY2UgdGhhdCB0YWtlcyBhIGRldmljZSBzcGVjaWZpYyBjaGFubmVsIHByb2dyYW0gKG9uZQorb3IgbW9yZSBDQ1dzKSBhcyBpbnB1dCBzZXRzIHVwIHRoZSByZXF1aXJlZCBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgY29udHJvbCBibG9ja3MKK2FuZCBpbml0aWF0ZXMgYW4gSS9PIHJlcXVlc3Qgb24gYmVoYWxmIG9mIHRoZSBkZXZpY2UgZHJpdmVyLiBUaGUKK2Njd19kZXZpY2Vfc3RhcnQoKSByb3V0aW5lIGFsbG93cyB0byBzcGVjaWZ5IHdoZXRoZXIgaXQgZXhwZWN0cyB0aGUgQ0RTIGxheWVyCit0byBub3RpZnkgdGhlIGRldmljZSBkcml2ZXIgZm9yIGV2ZXJ5IGludGVycnVwdCBpdCBvYnNlcnZlcywgb3Igd2l0aCBmaW5hbCBzdGF0dXMKK29ubHkuIFNlZSBjY3dfZGV2aWNlX3N0YXJ0KCkgZm9yIG1vcmUgZGV0YWlscy4gQSBkZXZpY2UgZHJpdmVyIG11c3QgbmV2ZXIgaXNzdWUKK0VTQS8zOTAgSS9PIGNvbW1hbmRzIGl0c2VsZiwgYnV0IG11c3QgdXNlIHRoZSBMaW51eC8zOTAgQ0RTIGludGVyZmFjZXMgaW5zdGVhZC4KKworRm9yIGxvbmcgcnVubmluZyBJL08gcmVxdWVzdCB0byBiZSBjYW5jZWxlZCwgdGhlIENEUyBsYXllciBwcm92aWRlcyB0aGUKK2Njd19kZXZpY2VfaGFsdCgpIGZ1bmN0aW9uLiBTb21lIGRldmljZXMgcmVxdWlyZSB0byBpbml0aWFsbHkgaXNzdWUgYSBIQUxUCitTVUJDSEFOTkVMIChIU0NIKSBjb21tYW5kIHdpdGhvdXQgaGF2aW5nIHBlbmRpbmcgSS9PIHJlcXVlc3RzLiBUaGlzIGZ1bmN0aW9uIGlzCithbHNvIGNvdmVyZWQgYnkgY2N3X2RldmljZV9oYWx0KCkuCisKKworcmVhZF9kZXZfY2hhcnMoKSAtIFJlYWQgRGV2aWNlIENoYXJhY3RlcmlzdGljcworCitUaGlzIHJvdXRpbmUgcmV0dXJucyB0aGUgY2hhcmFjdGVyaXN0aWNzIGZvciB0aGUgZGV2aWNlIHNwZWNpZmllZC4KKworVGhlIGZ1bmN0aW9uIGlzIG1lYW50IHRvIGJlIGNhbGxlZCB3aXRoIGFuIGlycSBoYW5kbGVyIGluIHBsYWNlOyB0aGF0IGlzLAorYXQgZWFybGllc3QgZHVyaW5nIHNldF9vbmxpbmUoKSBwcm9jZXNzaW5nLgorCitXaGlsZSB0aGUgcmVxdWVzdCBpcyBwcm9jZXNlZCBzeW5jaHJvbm91c2x5LCB0aGUgZGV2aWNlIGludGVycnVwdAoraGFuZGxlciBpcyBjYWxsZWQgZm9yIGZpbmFsIGVuZGluZyBzdGF0dXMuIEluIGNhc2Ugb2YgZXJyb3Igc2l0dWF0aW9ucyB0aGUKK2ludGVycnVwdCBoYW5kbGVyIG1heSByZWNvdmVyIGFwcHJvcHJpYXRlbHkuIFRoZSBkZXZpY2UgaXJxIGhhbmRsZXIgY2FuCityZWNvZ25pemUgdGhlIGNvcnJlc3BvbmRpbmcgaW50ZXJydXB0cyBieSB0aGUgaW50ZXJydXB0aW9uIHBhcmFtZXRlciBiZQorMHgwMDUyNDQ0My5UaGUgY2N3X2RldmljZSBtdXN0IG5vdCBiZSBsb2NrZWQgcHJpb3IgdG8gY2FsbGluZyByZWFkX2Rldl9jaGFycygpLgorCitUaGUgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBlbmFibGVkIG9yIGRpc2FibGVkLgorCitpbnQgcmVhZF9kZXZfY2hhcnMoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYsIHZvaWQgKipidWZmZXIsIGludCBsZW5ndGggKTsKKworY2RldiAgIC0gdGhlIGNjd19kZXZpY2UgdGhlIGluZm9ybWF0aW9uIGlzIHJlcXVlc3RlZCBmb3IuCitidWZmZXIgLSBwb2ludGVyIHRvIGEgYnVmZmVyIHBvaW50ZXIuIFRoZSBidWZmZXIgcG9pbnRlciBpdHNlbGYKKyAgICAgICAgIG11c3QgY29udGFpbiBhIHZhbGlkIGJ1ZmZlciBhcmVhLgorbGVuZ3RoIC0gbGVuZ3RoIG9mIHRoZSBidWZmZXIgcHJvdmlkZWQuCisKK1RoZSByZWFkX2Rldl9jaGFycygpIGZ1bmN0aW9uIHJldHVybnMgOgorCisgICAgICAwIC0gc3VjY2Vzc2Z1bCBjb21wbGV0aW9uCistRU5PREVWIC0gY2RldiBpbnZhbGlkCistRUlOVkFMIC0gYW4gaW52YWxpZCBwYXJhbWV0ZXIgd2FzIGRldGVjdGVkLCBvciB0aGUgZnVuY3Rpb24gd2FzIGNhbGxlZCBlYXJseS4KKy1FQlVTWSAgLSBhbiBpcnJlY292ZXJhYmxlIEkvTyBlcnJvciBvY2N1cnJlZCBvciB0aGUgZGV2aWNlIGlzIG5vdAorICAgICAgICAgIG9wZXJhdGlvbmFsLgorCisKK3JlYWRfY29uZl9kYXRhKCkgLSBSZWFkIENvbmZpZ3VyYXRpb24gRGF0YQorCitSZXRyaWV2ZSB0aGUgZGV2aWNlIGRlcGVuZGVudCBjb25maWd1cmF0aW9uIGRhdGEuIFBsZWFzZSBoYXZlIGEgbG9vayBhdCB5b3VyIAorZGV2aWNlIGRlcGVuZGVudCBJL08gY29tbWFuZHMgZm9yIHRoZSBkZXZpY2Ugc3BlY2lmaWMgbGF5b3V0IG9mIHRoZSBub2RlIAorZGVzY3JpcHRvciBlbGVtZW50cy4gCisKK1RoZSBmdW5jdGlvbiBpcyBtZWFudCB0byBiZSBjYWxsZWQgd2l0aCBhbiBpcnEgaGFuZGxlciBpbiBwbGFjZTsgdGhhdCBpcywKK2F0IGVhcmxpZXN0IGR1cmluZyBzZXRfb25saW5lKCkgcHJvY2Vzc2luZy4KKworVGhlIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgZW5hYmxlZCBvciBkaXNhYmxlZCwgYnV0IHRoZSBkZXZpY2UgbXVzdCBub3QgYmUKK2xvY2tlZAorCitpbnQgcmVhZF9jb25mX2RhdGEoc3RydWN0IGNjd19kZXZpY2UsIHZvaWQgKipidWZmZXIsIGludCAqbGVuZ3RoLCBfX3U4IGxwbSk7CisKK2NkZXYgICAtIHRoZSBjY3dfZGV2aWNlIHRoZSBkYXRhIGlzIHJlcXVlc3RlZCBmb3IuCitidWZmZXIgLSBQb2ludGVyIHRvIGEgYnVmZmVyIHBvaW50ZXIuIFRoZSByZWFkX2NvbmZfZGF0YSgpIHJvdXRpbmUKKyAgICAgICAgIHdpbGwgYWxsb2NhdGUgYSBidWZmZXIgYW5kIGluaXRpYWxpemUgdGhlIGJ1ZmZlciBwb2ludGVyCisgICAgICAgICBhY2NvcmRpbmdseS4gSXQncyB0aGUgZGV2aWNlIGRyaXZlcidzIHJlc3BvbnNpYmlsaXR5IHRvCisgICAgICAgICByZWxlYXNlIHRoZSBrZXJuZWwgbWVtb3J5IGlmIG5vIGxvbmdlciBuZWVkZWQuIAorbGVuZ3RoIC0gTGVuZ3RoIG9mIHRoZSBidWZmZXIgYWxsb2NhdGVkIGFuZCByZXRyaWV2ZWQuCitscG0gICAgLSBMb2dpY2FsIHBhdGggbWFzayB0byBiZSB1c2VkIGZvciByZXRyaWV2aW5nIHRoZSBkYXRhLiBJZgorICAgICAgICAgemVybyB0aGUgZGF0YSBpcyByZXRyaWV2ZWQgb24gdGhlIG5leHQgcGF0aCBhdmFpbGFibGUuCisKK1RoZSByZWFkX2NvbmZfZGF0YSgpIGZ1bmN0aW9uIHJldHVybnMgOgorICAgICAgICAgIDAgLSBTdWNjZXNzZnVsIGNvbXBsZXRpb24KKy1FTk9ERVYgICAgIC0gY2RldiBpbnZhbGlkLgorLUVJTlZBTCAgICAgLSBBbiBpbnZhbGlkIHBhcmFtZXRlciB3YXMgZGV0ZWN0ZWQsIG9yIHRoZSBmdW5jdGlvbiB3YXMgY2FsbGVkIGVhcmx5LgorLUVJTyAgICAgICAgLSBBbiBpcnJlY292ZXJhYmxlIEkvTyBlcnJvciBvY2N1cnJlZCBvciB0aGUgZGV2aWNlIGlzCisgICAgICAgICAgICAgIG5vdCBvcGVyYXRpb25hbC4KKy1FTk9NRU0gICAgIC0gVGhlIHJlYWRfY29uZl9kYXRhKCkgcm91dGluZSBjb3VsZG4ndCBvYnRhaW4gc3RvcmFnZS4KKy1FT1BOT1RTVVBQIC0gVGhlIGRldmljZSBkb2Vzbid0IHN1cHBvcnQgdGhlIHJlYWQgY29uZmlndXJhdGlvbiAKKyAgICAgICAgICAgICAgZGF0YSBjb21tYW5kLgorCisKK2dldF9jaXcoKSAtIGdldCBjb21tYW5kIGluZm9ybWF0aW9uIHdvcmQKKworVGhpcyBjYWxsIGVuYWJsZXMgYSBkZXZpY2UgZHJpdmVyIHRvIGdldCBpbmZvcm1hdGlvbiBhYm91dCBzdXBwb3J0ZWQgY29tbWFuZHMKK2Zyb20gdGhlIGV4dGVuZGVkIFNlbnNlSUQgZGF0YS4KKworc3RydWN0IGNpdyAqCitjY3dfZGV2aWNlX2dldF9jaXcoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYsIF9fdTMyIGNtZCk7CisKK2NkZXYgLSBUaGUgY2N3X2RldmljZSBmb3Igd2hpY2ggdGhlIGNvbW1hbmQgaXMgdG8gYmUgcmV0cmlldmVkLgorY21kICAtIFRoZSBjb21tYW5kIHR5cGUgdG8gYmUgcmV0cmlldmVkLgorCitjY3dfZGV2aWNlX2dldF9jaXcoKSByZXR1cm5zOgorTlVMTCAgICAtIE5vIGV4dGVuZGVkIGRhdGEgYXZhaWxhYmxlLCBpbnZhbGlkIGRldmljZSBvciBjb21tYW5kIG5vdCBmb3VuZC4KKyFOVUxMICAgLSBUaGUgY29tbWFuZCByZXF1ZXN0ZWQuCisKKworY2N3X2RldmljZV9zdGFydCgpIC0gSW5pdGlhdGUgSS9PIFJlcXVlc3QKKworVGhlIGNjd19kZXZpY2Vfc3RhcnQoKSByb3V0aW5lcyBpcyB0aGUgSS9PIHJlcXVlc3QgZnJvbnQtZW5kIHByb2Nlc3Nvci4gQWxsCitkZXZpY2UgZHJpdmVyIEkvTyByZXF1ZXN0cyBtdXN0IGJlIGlzc3VlZCB1c2luZyB0aGlzIHJvdXRpbmUuIEEgZGV2aWNlIGRyaXZlcgorbXVzdCBub3QgaXNzdWUgRVNBLzM5MCBJL08gY29tbWFuZHMgaXRzZWxmLiBJbnN0ZWFkIHRoZSBjY3dfZGV2aWNlX3N0YXJ0KCkKK3JvdXRpbmUgcHJvdmlkZXMgYWxsIGludGVyZmFjZXMgcmVxdWlyZWQgdG8gZHJpdmUgYXJiaXRyYXJ5IGRldmljZXMuCisKK1RoaXMgZGVzY3JpcHRpb24gYWxzbyBjb3ZlcnMgdGhlIHN0YXR1cyBpbmZvcm1hdGlvbiBwYXNzZWQgdG8gdGhlIGRldmljZQorZHJpdmVyJ3MgaW50ZXJydXB0IGhhbmRsZXIgYXMgdGhpcyBpcyByZWxhdGVkIHRvIHRoZSBydWxlcyAoZmxhZ3MpIGRlZmluZWQKK3dpdGggdGhlIGFzc29jaWF0ZWQgSS9PIHJlcXVlc3Qgd2hlbiBjYWxsaW5nIGNjd19kZXZpY2Vfc3RhcnQoKS4KKworaW50IGNjd19kZXZpY2Vfc3RhcnQoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYsCisJCSAgICAgc3RydWN0IGNjdzEgKmNwYSwKKwkJICAgICB1bnNpZ25lZCBsb25nIGludHBhcm0sCisJCSAgICAgX191OCBscG0sCisJCSAgICAgdW5zaWduZWQgbG9uZyBmbGFncyk7CisKK2NkZXYgICAgICAgICA6IGNjd19kZXZpY2UgdGhlIEkvTyBpcyBkZXN0aW5lZCBmb3IKK2NwYSAgICAgICAgICA6IGxvZ2ljYWwgc3RhcnQgYWRkcmVzcyBvZiBjaGFubmVsIHByb2dyYW0KK3VzZXJfaW50cGFybSA6IHVzZXIgc3BlY2lmaWMgaW50ZXJydXB0IGluZm9ybWF0aW9uOyB3aWxsIGJlIHByZXNlbnRlZAorCSAgICAgICBiYWNrIHRvIHRoZSBkZXZpY2UgZHJpdmVyJ3MgaW50ZXJydXB0IGhhbmRsZXIuIEFsbG93cyBhCisgICAgICAgICAgICAgICBkZXZpY2UgZHJpdmVyIHRvIGFzc29jaWF0ZSB0aGUgaW50ZXJydXB0IHdpdGggYQorICAgICAgICAgICAgICAgcGFydGljdWxhciBJL08gcmVxdWVzdC4KK2xwbSAgICAgICAgICA6IGRlZmluZXMgdGhlIGNoYW5uZWwgcGF0aCB0byBiZSB1c2VkIGZvciBhIHNwZWNpZmljIEkvTworICAgICAgICAgICAgICAgcmVxdWVzdC4gQSB2YWx1ZSBvZiAwIHdpbGwgbWFrZSBjaW8gdXNlIHRoZSBvcG0uCitmbGFnICAgICAgICAgOiBkZWZpbmVzIHRoZSBhY3Rpb24gdG8gYmUgcGVyZm9ybWVkIGZvciBJL08gcHJvY2Vzc2luZworCitQb3NzaWJsZSBmbGFnIHZhbHVlcyBhcmUgOgorCitET0lPX0FMTE9XX1NVU1BFTkQgICAgICAgLSBjaGFubmVsIHByb2dyYW0gbWF5IGJlY29tZSBzdXNwZW5kZWQKK0RPSU9fREVOWV9QUkVGRVRDSCAgICAgICAtIGRvbid0IGFsbG93IGZvciBDQ1cgcHJlZmV0Y2g7IHVzdWFsbHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgaW1wbGllcyB0aGUgY2hhbm5lbCBwcm9ncmFtIG1pZ2h0CisgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWNvbWUgbW9kaWZpZWQKK0RPSU9fU1VQUFJFU1NfSU5URVIgICAgIC0gZG9uJ3QgY2FsbCB0aGUgaGFuZGxlciBvbiBpbnRlcm1lZGlhdGUgc3RhdHVzCisKK1RoZSBjcGEgcGFyYW1ldGVyIHBvaW50cyB0byB0aGUgZmlyc3QgZm9ybWF0IDEgQ0NXIG9mIGEgY2hhbm5lbCBwcm9ncmFtIDoKKworc3RydWN0IGNjdzEgeworICAgICAgX191OCAgY21kX2NvZGU7LyogY29tbWFuZCBjb2RlICovCisgICAgICBfX3U4ICBmbGFnczsgICAvKiBmbGFncywgbGlrZSBJREEgYWRkcmVzc2luZywgZXRjLiAqLworICAgICAgX191MTYgY291bnQ7ICAgLyogYnl0ZSBjb3VudCAqLworICAgICAgX191MzIgY2RhOyAgICAgLyogZGF0YSBhZGRyZXNzICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQsYWxpZ25lZCg4KSkpOworCit3aXRoIHRoZSBmb2xsb3dpbmcgQ0NXIGZsYWdzIHZhbHVlcyBkZWZpbmVkIDoKKworQ0NXX0ZMQUdfREMgICAgICAgIC0gZGF0YSBjaGFpbmluZworQ0NXX0ZMQUdfQ0MgICAgICAgIC0gY29tbWFuZCBjaGFpbmluZworQ0NXX0ZMQUdfU0xJICAgICAgIC0gc3VwcHJlc3MgaW5jb3JyY3QgbGVuZ3RoCitDQ1dfRkxBR19TS0lQICAgICAgLSBza2lwCitDQ1dfRkxBR19QQ0kgICAgICAgLSBQQ0kKK0NDV19GTEFHX0lEQSAgICAgICAtIGluZGlyZWN0IGFkZHJlc3NpbmcKK0NDV19GTEFHX1NVU1BFTkQgICAtIHN1c3BlbmQKKworCitWaWEgY2N3X2RldmljZV9zZXRfb3B0aW9ucygpLCB0aGUgZGV2aWNlIGRyaXZlciBtYXkgc3BlY2lmeSB0aGUgZm9sbG93aW5nCitvcHRpb25zIGZvciB0aGUgZGV2aWNlOgorCitET0lPX0VBUkxZX05PVElGSUNBVElPTiAgLSBhbGxvdyBmb3IgZWFybHkgaW50ZXJydXB0IG5vdGlmaWNhdGlvbgorRE9JT19SRVBPUlRfQUxMICAgICAgICAgIC0gcmVwb3J0IGFsbCBpbnRlcnJ1cHQgY29uZGl0aW9ucworCisKK1RoZSBjY3dfZGV2aWNlX3N0YXJ0KCkgZnVuY3Rpb24gcmV0dXJucyA6CisKKyAgICAgIDAgLSBzdWNjZXNzZnVsIGNvbXBsZXRpb24gb3IgcmVxdWVzdCBzdWNjZXNzZnVsbHkgaW5pdGlhdGVkCistRUJVU1kgIC0gVGhlIGRldmljZSBpcyBjdXJyZW50bHkgcHJvY2Vzc2luZyBhIHByZXZpb3VzIEkvTyByZXF1ZXN0LCBvciB0aGVyIGlzCisgICAgICAgICAgYSBzdGF0dXMgcGVuZGluZyBhdCB0aGUgZGV2aWNlLgorLUVOT0RFViAtIGNkZXYgaXMgaW52YWxpZCwgdGhlIGRldmljZSBpcyBub3Qgb3BlcmF0aW9uYWwgb3IgdGhlIGNjd19kZXZpY2UgaXMKKyAgICAgICAgICBub3Qgb25saW5lLgorCitXaGVuIHRoZSBJL08gcmVxdWVzdCBjb21wbGV0ZXMsIHRoZSBDRFMgZmlyc3QgbGV2ZWwgaW50ZXJydXB0IGhhbmRsZXIgd2lsbAorYWNjdW1hbGF0ZSB0aGUgc3RhdHVzIGluIGEgc3RydWN0IGlyYiBhbmQgdGhlbiBjYWxsIHRoZSBkZXZpY2UgaW50ZXJydXB0IGhhbmRsZXIuCitUaGUgaW50cGFybSBmaWVsZCB3aWxsIGNvbnRhaW4gdGhlIHZhbHVlIHRoZSBkZXZpY2UgZHJpdmVyIGhhcyBhc3NvY2lhdGVkIHdpdGggYSAKK3BhcnRpY3VsYXIgSS9PIHJlcXVlc3QuIElmIGEgcGVuZGluZyBkZXZpY2Ugc3RhdHVzIHdhcyByZWNvZ25pemVkLCAKK2ludHBhcm0gd2lsbCBiZSBzZXQgdG8gMCAoemVybykuIFRoaXMgbWF5IGhhcHBlbiBkdXJpbmcgSS9PIGluaXRpYXRpb24gb3IgZGVsYXllZAorYnkgYW4gYWxlcnQgc3RhdHVzIG5vdGlmaWNhdGlvbi4gSW4gYW55IGNhc2UgdGhpcyBzdGF0dXMgaXMgbm90IHJlbGF0ZWQgdG8gdGhlCitjdXJyZW50IChsYXN0KSBJL08gcmVxdWVzdC4gSW4gY2FzZSBvZiBhIGRlbGF5ZWQgc3RhdHVzIG5vdGlmaWNhdGlvbiBubyBzcGVjaWFsCitpbnRlcnJ1cHQgd2lsbCBiZSBwcmVzZW50ZWQgdG8gaW5kaWNhdGUgSS9PIGNvbXBsZXRpb24gYXMgdGhlIEkvTyByZXF1ZXN0IHdhcworbmV2ZXIgc3RhcnRlZCwgZXZlbiB0aG91Z2ggY2N3X2RldmljZV9zdGFydCgpIHJldHVybmVkIHdpdGggc3VjY2Vzc2Z1bCBjb21wbGV0aW9uLgorCitJZiB0aGUgY29uY3VycmVudCBzZW5zZSBmbGFnIGluIHRoZSBleHRlbmRlZCBzdGF0dXMgd29yZCBpbiB0aGUgaXJiIGlzIHNldCwgdGhlCitmaWVsZCBpcmItPnNjc3cuY291bnQgZGVzY3JpYmVzIHRoZSBudW1lciBvZiBkZXZpY2Ugc3BlY2lmaWMgc2Vuc2UgYnl0ZXMKK2F2YWlsYWJsZSBpbiB0aGUgZXh0ZW5kZWQgY29udHJvbCB3b3JkIGlyYi0+c2Nzdy5lY3dbMF0uIE5vIGRldmljZSBzZW5zaW5nIGJ5Cit0aGUgZGV2aWNlIGRyaXZlciBpdHNlbGYgaXMgcmVxdWlyZWQuCisKK1RoZSBkZXZpY2UgaW50ZXJydXB0IGhhbmRsZXIgY2FuIHVzZSB0aGUgZm9sbG93aW5nIGRlZmluaXRpb25zIHRvIGludmVzdGlnYXRlCit0aGUgcHJpbWFyeSB1bml0IGNoZWNrIHNvdXJjZSBjb2RlZCBpbiBzZW5zZSBieXRlIDAgOgorCitTTlMwX0NNRF9SRUpFQ1QgICAgICAgICAweDgwCitTTlMwX0lOVEVSVkVOVElPTl9SRVEgICAweDQwCitTTlMwX0JVU19PVVRfQ0hFQ0sgICAgICAweDIwCitTTlMwX0VRVUlQTUVOVF9DSEVDSyAgICAweDEwCitTTlMwX0RBVEFfQ0hFQ0sgICAgICAgICAweDA4CitTTlMwX09WRVJSVU4gICAgICAgICAgICAweDA0CitTTlMwX0lOQ09NUExfRE9NQUlOICAgICAweDAxCisKK0RlcGVuZGluZyBvbiB0aGUgZGV2aWNlIHN0YXR1cywgbXVsdGlwbGUgb2YgdGhvc2UgdmFsdWVzIG1heSBiZSBzZXQgdG9nZXRoZXIuCitQbGVhc2UgcmVmZXIgdG8gdGhlIGRldmljZSBzcGVjaWZpYyBkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzLgorCitUaGUgaXJiLT5zY3N3LmNzdGF0IGZpZWxkIHByb3ZpZGVzIHRoZSAoYWNjdW11bGF0ZWQpIHN1YmNoYW5uZWwgc3RhdHVzIDoKKworU0NITl9TVEFUX1BDSSAgICAgICAgICAgIC0gcHJvZ3JhbSBjb250cm9sbGVkIGludGVycnVwdAorU0NITl9TVEFUX0lOQ09SUl9MRU4gICAgIC0gaW5jb3JyZWN0IGxlbmd0aAorU0NITl9TVEFUX1BST0dfQ0hFQ0sgICAgIC0gcHJvZ3JhbSBjaGVjaworU0NITl9TVEFUX1BST1RfQ0hFQ0sgICAgIC0gcHJvdGVjdGlvbiBjaGVjaworU0NITl9TVEFUX0NITl9EQVRBX0NISyAgIC0gY2hhbm5lbCBkYXRhIGNoZWNrCitTQ0hOX1NUQVRfQ0hOX0NUUkxfQ0hLICAgLSBjaGFubmVsIGNvbnRyb2wgY2hlY2sKK1NDSE5fU1RBVF9JTlRGX0NUUkxfQ0hLICAtIGludGVyZmFjZSBjb250cm9sIGNoZWNrCitTQ0hOX1NUQVRfQ0hBSU5fQ0hFQ0sgICAgLSBjaGFpbmluZyBjaGVjaworCitUaGUgaXJiLT5zY3N3LmRzdGF0IGZpZWxkIHByb3ZpZGVzIHRoZSAoYWNjdW11bGF0ZWQpIGRldmljZSBzdGF0dXMgOgorCitERVZfU1RBVF9BVFRFTlRJT04gICAtIGF0dGVudGlvbgorREVWX1NUQVRfU1RBVF9NT0QgICAgLSBzdGF0dXMgbW9kaWZpZXIKK0RFVl9TVEFUX0NVX0VORCAgICAgIC0gY29udHJvbCB1bml0IGVuZAorREVWX1NUQVRfQlVTWSAgICAgICAgLSBidXN5CitERVZfU1RBVF9DSE5fRU5EICAgICAtIGNoYW5uZWwgZW5kCitERVZfU1RBVF9ERVZfRU5EICAgICAtIGRldmljZSBlbmQKK0RFVl9TVEFUX1VOSVRfQ0hFQ0sgIC0gdW5pdCBjaGVjaworREVWX1NUQVRfVU5JVF9FWENFUCAgLSB1bml0IGV4Y2VwdGlvbgorCitQbGVhc2Ugc2VlIHRoZSBFU0EvMzkwIFByaW5jaXBsZXMgb2YgT3BlcmF0aW9uIG1hbnVhbCBmb3IgZGV0YWlscyBvbiB0aGUKK2luZGl2aWR1YWwgZmxhZyBtZWFuaW5ncy4KKworVXNhZ2UgTm90ZXMgOgorCitQcmlvciB0byBjYWxsIGNjd19kZXZpY2Vfc3RhcnQoKSB0aGUgZGV2aWNlIGRyaXZlciBtdXN0IGFzc3VyZSBkaXNhYmxlZCBzdGF0ZSwKK2kuZS4gdGhlIEkvTyBtYXNrIHZhbHVlIGluIHRoZSBQU1cgbXVzdCBiZSBkaXNhYmxlZC4gVGhpcyBjYW4gYmUgYWNjb21wbGlzaGVkCitieSBjYWxsaW5nIGxvY2FsX3NhdmVfZmxhZ3MoIGZsYWdzKS4gVGhlIGN1cnJlbnQgUFNXIGZsYWdzIGFyZSBwcmVzZXJ2ZWQgYW5kCitjYW4gYmUgcmVzdG9yZWQgYnkgbG9jYWxfaXJxX3Jlc3RvcmUoIGZsYWdzKSBhdCBhIGxhdGVyIHRpbWUuCisKK0lmIHRoZSBkZXZpY2UgZHJpdmVyIHZpb2xhdGVzIHRoaXMgcnVsZSB3aGlsZSBydW5uaW5nIGluIGEgdW5pLXByb2Nlc3NvcgorZW52aXJvbm1lbnQgYW4gaW50ZXJydXB0IG1pZ2h0IGJlIHByZXNlbnRlZCBwcmlvciB0byB0aGUgY2N3X2RldmljZV9zdGFydCgpCityb3V0aW5lIHJldHVybmluZyB0byB0aGUgZGV2aWNlIGRyaXZlciBtYWluIHBhdGguIEluIHRoaXMgY2FzZSB3ZSB3aWxsIGVuZCBpbiBhCitkZWFkbG9jayBzaXR1YXRpb24gYXMgdGhlIGludGVycnVwdCBoYW5kbGVyIHdpbGwgdHJ5IHRvIG9idGFpbiB0aGUgaXJxCitsb2NrIHRoZSBkZXZpY2UgZHJpdmVyIHN0aWxsIG93bnMgKHNlZSBiZWxvdykgIQorCitUaGUgZHJpdmVyIG11c3QgYXNzdXJlIHRvIGhvbGQgdGhlIGRldmljZSBzcGVjaWZpYyBsb2NrLiBUaGlzIGNhbiBiZQorYWNjb21wbGlzaGVkIGJ5CisKKyhpKSAgc3Bpbl9sb2NrKGdldF9jY3dkZXZfbG9jayhjZGV2KSksIG9yCisoaWkpIHNwaW5fbG9ja19pcnFzYXZlKGdldF9jY3dkZXZfbG9jayhjZGV2KSwgZmxhZ3MpCisKK09wdGlvbiAoaSkgc2hvdWxkIGJlIHVzZWQgaWYgdGhlIGNhbGxpbmcgcm91dGluZSBpcyBydW5uaW5nIGRpc2FibGVkIGZvcgorSS9PIGludGVycnVwdHMgKHNlZSBhYm92ZSkgYWxyZWFkeS4gT3B0aW9uIChpaSkgb2J0YWlucyB0aGUgZGV2aWNlIGdhdGUgdW5kCitwdXRzIHRoZSBDUFUgaW50byBJL08gZGlzYWJsZWQgc3RhdGUgYnkgcHJlc2VydmluZyB0aGUgY3VycmVudCBQU1cgZmxhZ3MuCisKK1RoZSBkZXZpY2UgZHJpdmVyIGlzIGFsbG93ZWQgdG8gaXNzdWUgdGhlIG5leHQgY2N3X2RldmljZV9zdGFydCgpIGNhbGwgZnJvbQord2l0aGluIGl0cyBpbnRlcnJ1cHQgaGFuZGxlciBhbHJlYWR5LiBJdCBpcyBub3QgcmVxdWlyZWQgdG8gc2NoZWR1bGUgYQorYm90dG9tLWhhbGYsIHVubGVzcyBhbiBub24gZGV0ZXJtaW5pc3RpY2x5IGxvbmcgcnVubmluZyBlcnJvciByZWNvdmVyeSBwcm9jZWR1cmUKK29yIHNpbWlsYXIgbmVlZHMgdG8gYmUgc2NoZWR1bGVkLiBEdXJpbmcgSS9PIHByb2Nlc3NpbmcgdGhlIExpbnV4LzM5MCBnZW5lcmljCitJL08gZGV2aWNlIGRyaXZlciBzdXBwb3J0IGhhcyBhbHJlYWR5IG9idGFpbmVkIHRoZSBJUlEgbG9jaywgaS5lLiB0aGUgaGFuZGxlcgorbXVzdCBub3QgdHJ5IHRvIG9idGFpbiBpdCBhZ2FpbiB3aGVuIGNhbGxpbmcgY2N3X2RldmljZV9zdGFydCgpIG9yIHdlIGVuZCBpbiBhCitkZWFkbG9jayBzaXR1YXRpb24hCisKK0lmIGEgZGV2aWNlIGRyaXZlciByZWxpZXMgb24gYW4gSS9PIHJlcXVlc3QgdG8gYmUgY29tcGxldGVkIHByaW9yIHRvIHN0YXJ0IHRoZQorbmV4dCBpdCBjYW4gcmVkdWNlIEkvTyBwcm9jZXNzaW5nIG92ZXJoZWFkIGJ5IGNoYWluaW5nIGEgTm9PcCBJL08gY29tbWFuZAorQ0NXX0NNRF9OT09QIHRvIHRoZSBlbmQgb2YgdGhlIHN1Ym1pdHRlZCBDQ1cgY2hhaW4uIFRoaXMgd2lsbCBmb3JjZSBDaGFubmVsLUVuZAorYW5kIERldmljZS1FbmQgc3RhdHVzIHRvIGJlIHByZXNlbnRlZCB0b2dldGhlciwgd2l0aCBhIHNpbmdsZSBpbnRlcnJ1cHQuCitIb3dldmVyLCB0aGlzIHNob3VsZCBiZSB1c2VkIHdpdGggY2FyZSBhcyBpdCBpbXBsaWVzIHRoZSBjaGFubmVsIHdpbGwgcmVtYWluCitidXN5LCBub3QgYmVpbmcgYWJsZSB0byBwcm9jZXNzIEkvTyByZXF1ZXN0cyBmb3Igb3RoZXIgZGV2aWNlcyBvbiB0aGUgc2FtZQorY2hhbm5lbC4gVGhlcmVmb3JlIGUuZy4gcmVhZCBjb21tYW5kcyBzaG91bGQgbmV2ZXIgdXNlIHRoaXMgdGVjaG5pcXVlLCBhcyB0aGUKK3Jlc3VsdCB3aWxsIGJlIHByZXNlbnRlZCBieSBhIHNpbmdsZSBpbnRlcnJ1cHQgYW55d2F5LgorCitJbiBvcmRlciB0byBtaW5pbWl6ZSBJL08gb3ZlcmhlYWQsIGEgZGV2aWNlIGRyaXZlciBzaG91bGQgdXNlIHRoZQorRE9JT19SRVBPUlRfQUxMICBvbmx5IGlmIHRoZSBkZXZpY2UgY2FuIHJlcG9ydCBpbnRlcm1lZGlhdGUgaW50ZXJydXB0CitpbmZvcm1hdGlvbiBwcmlvciB0byBkZXZpY2UtZW5kIHRoZSBkZXZpY2UgZHJpdmVyIHVyZ2VudGx5IHJlbGllcyBvbi4gSW4gdGhpcworY2FzZSBhbGwgSS9PIGludGVycnVwdGlvbnMgYXJlIHByZXNlbnRlZCB0byB0aGUgZGV2aWNlIGRyaXZlciB1bnRpbCBmaW5hbAorc3RhdHVzIGlzIHJlY29nbml6ZWQuCisKK0lmIGEgZGV2aWNlIGlzIGFibGUgdG8gcmVjb3ZlciBmcm9tIGFzeW5jaHJvbm9zbHkgcHJlc2VudGVkIEkvTyBlcnJvcnMsIGl0IGNhbgorcGVyZm9ybSBvdmVybGFwcGluZyBJL08gdXNpbmcgdGhlIERPSU9fRUFSTFlfTk9USUZJQ0FUSU9OIGZsYWcuIFdoaWxlIHNvbWUKK2RldmljZXMgYWx3YXlzIHJlcG9ydCBjaGFubmVsLWVuZCBhbmQgZGV2aWNlLWVuZCB0b2dldGhlciwgd2l0aCBhIHNpbmdsZQoraW50ZXJydXB0LCBvdGhlcnMgcHJlc2VudCBwcmltYXJ5IHN0YXR1cyAoY2hhbm5lbC1lbmQpIHdoZW4gdGhlIGNoYW5uZWwgaXMKK3JlYWR5IGZvciB0aGUgbmV4dCBJL08gcmVxdWVzdCBhbmQgc2Vjb25kYXJ5IHN0YXR1cyAoZGV2aWNlLWVuZCkgd2hlbiB0aGUgZGF0YQordHJhbnNtaXNzaW9uIGhhcyBiZWVuIGNvbXBsZXRlZCBhdCB0aGUgZGV2aWNlLgorCitBYm92ZSBmbGFnIGFsbG93cyB0byBleHBsb2l0IHRoaXMgZmVhdHVyZSwgZS5nLiBmb3IgY29tbXVuaWNhdGlvbiBkZXZpY2VzIHRoYXQKK2NhbiBoYW5kbGUgbG9zdCBkYXRhIG9uIHRoZSBuZXR3b3JrIHRvIGFsbG93IGZvciBlbmhhbmNlZCBJL08gcHJvY2Vzc2luZy4KKworVW5sZXNzIHRoZSBjaGFubmVsIHN1YnN5c3RlbSBhdCBhbnkgdGltZSBwcmVzZW50cyBhIHNlY29uZGFyeSBzdGF0dXMgaW50ZXJydXB0LAorZXhwbG9pdGluZyB0aGlzIGZlYXR1cmUgd2lsbCBjYXVzZSBvbmx5IHByaW1hcnkgc3RhdHVzIGludGVycnVwdHMgdG8gYmUKK3ByZXNlbnRlZCB0byB0aGUgZGV2aWNlIGRyaXZlciB3aGlsZSBvdmVybGFwcGluZyBJL08gaXMgcGVyZm9ybWVkLiBXaGVuIGEKK3NlY29uZGFyeSBzdGF0dXMgd2l0aG91dCBlcnJvciAoYWxlcnQgc3RhdHVzKSBpcyBwcmVzZW50ZWQsIHRoaXMgaW5kaWNhdGVzCitzdWNjZXNzZnVsIGNvbXBsZXRpb24gZm9yIGFsbCBvdmVybGFwcGluZyBjY3dfZGV2aWNlX3N0YXJ0KCkgcmVxdWVzdHMgdGhhdCBoYXZlCitiZWVuIGlzc3VlZCBzaW5jZSB0aGUgbGFzdCBzZWNvbmRhcnkgKGZpbmFsKSBzdGF0dXMuCisKK0NoYW5uZWwgcHJvZ3JhbXMgdGhhdCBpbnRlbmQgdG8gc2V0IHRoZSBzdXNwZW5kIGZsYWcgb24gYSBjaGFubmVsIGNvbW1hbmQgd29yZCAKKyhDQ1cpICBtdXN0IHN0YXJ0IHRoZSBJL08gb3BlcmF0aW9uIHdpdGggdGhlIERPSU9fQUxMT1dfU1VTUEVORCBvcHRpb24gb3IgdGhlIAorc3VzcGVuZCBmbGFnIHdpbGwgY2F1c2UgYSBjaGFubmVsIHByb2dyYW0gY2hlY2suIEF0IHRoZSB0aW1lIHRoZSBjaGFubmVsIHByb2dyYW0gCitiZWNvbWVzIHN1c3BlbmRlZCBhbiBpbnRlcm1lZGlhdGUgaW50ZXJydXB0IHdpbGwgYmUgZ2VuZXJhdGVkIGJ5IHRoZSBjaGFubmVsIAorc3Vic3lzdGVtLgorCitjY3dfZGV2aWNlX3Jlc3VtZSgpIC0gUmVzdW1lIENoYW5uZWwgUHJvZ3JhbSBFeGVjdXRpb24gCisKK0lmIGEgZGV2aWNlIGRyaXZlciBjaG9vc2VzIHRvIHN1c3BlbmQgdGhlIGN1cnJlbnQgY2hhbm5lbCBwcm9ncmFtIGV4ZWN1dGlvbiBieSAKK3NldHRpbmcgdGhlIENDVyBzdXNwZW5kIGZsYWcgb24gYSBwYXJ0aWN1bGFyIENDVywgdGhlIGNoYW5uZWwgcHJvZ3JhbSBleGVjdXRpb24gCitpcyBzdXNwZW5kZWQuIEluIG9yZGVyIHRvIHJlc3VtZSBjaGFubmVsIHByb2dyYW0gZXhlY3V0aW9uIHRoZSBDSU8gbGF5ZXIgCitwcm92aWRlcyB0aGUgY2N3X2RldmljZV9yZXN1bWUoKSByb3V0aW5lLiAKKworaW50IGNjd19kZXZpY2VfcmVzdW1lKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2KTsKKworY2RldiAtIGNjd19kZXZpY2UgdGhlIHJlc3VtZSBvcGVyYXRpb24gaXMgcmVxdWVzdGVkIGZvcgorCitUaGUgcmVzdW1lX0lPKCkgZnVuY3Rpb24gcmV0dXJuczoKKworICAgICAgICAwICAtIHN1c3BlbmRlZCBjaGFubmVsIHByb2dyYW0gaXMgcmVzdW1lZAorLUVCVVNZICAgICAtIHN0YXR1cyBwZW5kaW5nCistRU5PREVWICAgIC0gY2RldiBpbnZhbGlkIG9yIG5vdC1vcGVyYXRpb25hbCBzdWJjaGFubmVsIAorLUVJTlZBTCAgICAtIHJlc3VtZSBmdW5jdGlvbiBub3QgYXBwbGljYWJsZSAgCistRU5PVENPTk4gIC0gdGhlcmUgaXMgbm8gSS9PIHJlcXVlc3QgcGVuZGluZyBmb3IgY29tcGxldGlvbiAKKworVXNhZ2UgTm90ZXM6CitQbGVhc2UgaGF2ZSBhIGxvb2sgYXQgdGhlIGNjd19kZXZpY2Vfc3RhcnQoKSB1c2FnZSBub3RlcyBmb3IgbW9yZSBkZXRhaWxzIG9uCitzdXNwZW5kZWQgY2hhbm5lbCBwcm9ncmFtcy4KKworY2N3X2RldmljZV9oYWx0KCkgLSBIYWx0IEkvTyBSZXF1ZXN0IFByb2Nlc3NpbmcKKworU29tZXRpbWVzIGEgZGV2aWNlIGRyaXZlciBtaWdodCBuZWVkIGEgcG9zc2liaWxpdHkgdG8gc3RvcCB0aGUgcHJvY2Vzc2luZyBvZgorYSBsb25nLXJ1bm5pbmcgY2hhbm5lbCBwcm9ncmFtIG9yIHRoZSBkZXZpY2UgbWlnaHQgcmVxdWlyZSB0byBpbml0aWFsbHkgaXNzdWUKK2EgaGFsdCBzdWJjaGFubmVsIChIU0NIKSBJL08gY29tbWFuZC4gRm9yIHRob3NlIHB1cnBvc2VzIHRoZSBjY3dfZGV2aWNlX2hhbHQoKQorY29tbWFuZCBpcyBwcm92aWRlZC4KKworaW50IGNjd19kZXZpY2VfaGFsdChzdHJ1Y3QgY2N3X2RldmljZSAqY2RldiwKKyAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBpbnRwYXJtKTsKKworY2RldiAgICA6IGNjd19kZXZpY2UgdGhlIGhhbHQgb3BlcmF0aW9uIGlzIHJlcXVlc3RlZCBmb3IKK2ludHBhcm0gOiBpbnRlcnJ1cHRpb24gcGFyYW1ldGVyOyB2YWx1ZSBpcyBvbmx5IHVzZWQgaWYgbm8gSS9PCisgICAgICAgICAgaXMgb3V0c3RhbmRpbmcsIG90aGVyd2lzZSB0aGUgaW50cGFybSBhc3NvY2lhdGVkIHdpdGgKKyAgICAgICAgICB0aGUgSS9PIHJlcXVlc3QgaXMgcmV0dXJuZWQKKworVGhlIGNjd19kZXZpY2VfaGFsdCgpIGZ1bmN0aW9uIHJldHVybnMgOgorCisgICAgICAwIC0gc3VjY2Vzc2Z1bCBjb21wbGV0aW9uIG9yIHJlcXVlc3Qgc3VjY2Vzc2Z1bGx5IGluaXRpYXRlZAorLUVCVVNZICAtIHRoZSBkZXZpY2UgaXMgY3VycmVudGx5IGJ1c3ksIG9yIHN0YXR1cyBwZW5kaW5nLgorLUVOT0RFViAtIGNkZXYgaW52YWxpZC4KKy1FSU5WQUwgLSBUaGUgZGV2aWNlIGlzIG5vdCBvcGVyYXRpb25hbCBvciB0aGUgY2N3IGRldmljZSBpcyBub3Qgb25saW5lLgorCitVc2FnZSBOb3RlcyA6CisKK0EgZGV2aWNlIGRyaXZlciBtYXkgd3JpdGUgYSBuZXZlci1lbmRpbmcgY2hhbm5lbCBwcm9ncmFtIGJ5IHdyaXRpbmcgYSBjaGFubmVsCitwcm9ncmFtIHRoYXQgYXQgaXRzIGVuZCBsb29wcyBiYWNrIHRvIGl0cyBiZWdpbm5pbmcgYnkgbWVhbnMgb2YgYSB0cmFuc2ZlciBpbgorY2hhbm5lbCAoVElDKSAgIGNvbW1hbmQgKENDV19DTURfVElDKS4gVXN1YWxseSB0aGlzIGlzIHBlcmZvcm1lZCBieSBuZXR3b3JrCitkZXZpY2UgZHJpdmVycyBieSBzZXR0aW5nIHRoZSBQQ0kgQ0NXIGZsYWcgKENDV19GTEFHX1BDSSkuIE9uY2UgdGhpcyBDQ1cgaXMKK2V4ZWN1dGVkIGEgcHJvZ3JhbSBjb250cm9sbGVkIGludGVycnVwdCAoUENJKSBpcyBnZW5lcmF0ZWQuIFRoZSBkZXZpY2UgZHJpdmVyCitjYW4gdGhlbiBwZXJmb3JtIGFuIGFwcHJvcHJpYXRlIGFjdGlvbi4gUHJpb3IgdG8gaW50ZXJydXB0IG9mIGFuIG91dHN0YW5kaW5nCityZWFkIHRvIGEgbmV0d29yayBkZXZpY2UgKHdpdGggb3Igd2l0aG91dCBQQ0kgZmxhZykgYSBjY3dfZGV2aWNlX2hhbHQoKQoraXMgcmVxdWlyZWQgdG8gZW5kIHRoZSBwZW5kaW5nIG9wZXJhdGlvbi4KKworCitNaXNjZWxsYW5lb3VzIFN1cHBvcnQgUm91dGluZXMKKworVGhpcyBjaGFwdGVyIGRlc2NyaWJlcyB2YXJpb3VzIHJvdXRpbmVzIHRvIGJlIHVzZWQgaW4gYSBMaW51eC8zOTAgZGV2aWNlCitkcml2ZXIgcHJvZ3JhbW1pbmcgZW52aXJvbm1lbnQuCisKK2dldF9jY3dkZXZfbG9jaygpCisKK0dldCB0aGUgYWRkcmVzcyBvZiB0aGUgZGV2aWNlIHNwZWNpZmljIGxvY2suIFRoaXMgaXMgdGhlbiB1c2VkIGluCitzcGluX2xvY2soKSAvIHNwaW5fdW5sb2NrKCkgY2FsbHMuCisKKworX191OCBjY3dfZGV2aWNlX2dldF9wYXRoX21hc2soc3RydWN0IGNjd19kZXZpY2UgKmNkZXYpOworCitHZXQgdGhlIG1hc2sgb2YgdGhlIHBhdGggY3VycmVudGx5IGF2YWlsYWJsZSBmb3IgY2Rldi4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vczM5MC9jb25maWczMjcwLnNoIGIvRG9jdW1lbnRhdGlvbi9zMzkwL2NvbmZpZzMyNzAuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTE1ZTJmNAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vczM5MC9jb25maWczMjcwLnNoCkBAIC0wLDAgKzEsNzYgQEAKKyMhL2Jpbi9zaAorIworIyBjb25maWczMjcwIC0tIEF1dG9jb25maWd1cmUgL2Rldi8zMjcwLyogYW5kIC9ldGMvaW5pdHRhYgorIworIyAgICAgICBVc2FnZToKKyMgICAgICAgICAgICAgICBjb25maWczMjcwCisjCisjICAgICAgIE91dHB1dDoKKyMgICAgICAgICAgICAgICAvdG1wL21rZGV2MzI3MAorIworIyAgICAgICBPcGVyYXRpb246CisjICAgICAgICAgICAgICAgMS4gUnVuIHRoaXMgc2NyaXB0CisjICAgICAgICAgICAgICAgMi4gUnVuIHRoZSBzY3JpcHQgaXQgcHJvZHVjZXM6IC90bXAvbWtkZXYzMjcwCisjICAgICAgICAgICAgICAgMy4gSXNzdWUgInRlbGluaXQgcSIgb3IgcmVib290LCBhcyBhcHByb3ByaWF0ZS4KKyMKK1A9L3Byb2MvdHR5L2RyaXZlci90dHkzMjcwCitST09UPQorRD0kUk9PVC9kZXYKK1NVQkQ9MzI3MAorVFRZPSRTVUJEL3R0eQorVFVCPSRTVUJEL3R1YgorU0NSPSRST09UL3RtcC9ta2RldjMyNzAKK1NDUlRNUD0kU0NSLmEKK0dFVFRZTElORT06MjM0NTpyZXNwYXduOi9zYmluL21pbmdldHR5CitJTklUVEFCPSRST09UL2V0Yy9pbml0dGFiCitOSU5JVFRBQj0kUk9PVC9ldGMvTkVXaW5pdHRhYgorT0lOSVRUQUI9JFJPT1QvZXRjL09MRGluaXR0YWIKK0FERE5PVEU9XFwiIyBBZGRpdGlvbmFsIG1pbmdldHR5cyBmb3IgdGhlIDMyNzAvdHR5KiBkcml2ZXIsIHR1YjMyNzAgLS0tXFwiCisKK2lmICEgbHMgJFAgPiAvZGV2L251bGwgMj4mMTsgdGhlbgorCW1vZHByb2JlIHR1YjMyNzAgPiAvZGV2L251bGwgMj4mMQorZmkKK2xzICRQID4gL2Rldi9udWxsIDI+JjEgfHwgZXhpdCAxCisKKyMgSW5pdGlhbGl6ZSB0d28gZmlsZXMsIG9uZSBmb3IgL2Rldi8zMjcwIGNvbW1hbmRzIGFuZCBvbmUKKyMgdG8gcmVwbGFjZSB0aGUgL2V0Yy9pbml0dGFiIGZpbGUgKG9sZCBvbmUgc2F2ZWQgaW4gT0xEaW5pdHRhYikKK2VjaG8gIiMhL2Jpbi9zaCIgPiAkU0NSIHx8IGV4aXQgMQorZWNobyAiICIgPj4gJFNDUgorZWNobyAiIyBTY3JpcHQgYnVpbHQgYnkgL3NiaW4vY29uZmlnMzI3MCIgPj4gJFNDUgoraWYgWyAhIC1kIC9kZXYvZGFzZCBdOyB0aGVuCisJZWNobyBybSAtcmYgIiRELyRTVUJELyoiID4+ICRTQ1IKK2ZpCitlY2hvICJncmVwIC12ICRUVFkgJElOSVRUQUIgPiAkTklOSVRUQUIiID4gJFNDUlRNUCB8fCBleGl0IDEKK2VjaG8gImVjaG8gJEFERE5PVEUgPj4gJE5JTklUVEFCIiA+PiAkU0NSVE1QCitpZiBbICEgLWQgL2Rldi9kYXNkIF07IHRoZW4KKwllY2hvIG1rZGlyIC1wICRELyRTVUJEID4+ICRTQ1IKK2ZpCisKKyMgTm93IHF1ZXJ5IHRoZSB0dWIzMjcwIGRyaXZlciBmb3IgMzI3MCBkZXZpY2UgaW5mb3JtYXRpb24KKyMgYW5kIGFkZCBhcHByb3ByaWF0ZSBta25vZCBhbmQgbWluZ2V0dHkgbGluZXMgdG8gb3VyIGZpbGVzCitlY2hvIHdoYXQ9Y29uZmlnID4gJFAKK3doaWxlIHJlYWQgZGV2bm8gbWFqIG1pbjtkbworCWlmIFsgJG1pbiA9IDAgXTsgdGhlbgorCQlmc21haj0kbWFqCisJCWlmIFsgISAtZCAvZGV2L2Rhc2QgXTsgdGhlbgorCQkJZWNobyBta25vZCAkRC8kVFVCIGMgJGZzbWFqIDAgPj4gJFNDUgorCQkJZWNobyBjaG1vZCA2NjYgJEQvJFRVQiA+PiAkU0NSCisJCWZpCisJZWxpZiBbICRtYWogPSBDT05TT0xFIF07IHRoZW4KKwkJaWYgWyAhIC1kIC9kZXYvZGFzZCBdOyB0aGVuCisJCQllY2hvIG1rbm9kICRELyRUVUIkZGV2bm8gYyAkZnNtYWogJG1pbiA+PiAkU0NSCisJCWZpCisJZWxzZQorCQlpZiBbICEgLWQgL2Rldi9kYXNkIF07IHRoZW4KKwkJCWVjaG8gbWtub2QgJEQvJFRUWSRkZXZubyBjICRtYWogJG1pbiA+PiRTQ1IKKwkJCWVjaG8gbWtub2QgJEQvJFRVQiRkZXZubyBjICRmc21haiAkbWluID4+ICRTQ1IKKwkJZmkKKwkJZWNobyAiZWNobyB0JG1pbiRHRVRUWUxJTkUgJFRUWSRkZXZubyA+PiAkTklOSVRUQUIiID4+ICRTQ1JUTVAKKwlmaQorZG9uZSA8ICRQCisKK2VjaG8gbXYgJElOSVRUQUIgJE9JTklUVEFCID4+ICRTQ1JUTVAgfHwgZXhpdCAxCitlY2hvIG12ICROSU5JVFRBQiAkSU5JVFRBQiA+PiAkU0NSVE1QCitjYXQgJFNDUlRNUCA+PiAkU0NSCitybSAkU0NSVE1QCitleGl0IDAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vczM5MC9jcnlwdG8vY3J5cHRvLUFQSS50eHQgYi9Eb2N1bWVudGF0aW9uL3MzOTAvY3J5cHRvL2NyeXB0by1BUEkudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4YTc3NjIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3MzOTAvY3J5cHRvL2NyeXB0by1BUEkudHh0CkBAIC0wLDAgKzEsODMgQEAKK2NyeXB0by1BUEkgc3VwcG9ydCBmb3Igejk5MCBNZXNzYWdlIFNlY3VyaXR5IEFzc2lzdCAoTVNBKSBpbnN0cnVjdGlvbnMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworQVVUSE9SOglUaG9tYXMgU3BhdHppZXIgKHRzcGF0QGRlLmlibS5jb20pCisKKworMS4gSW50cm9kdWN0aW9uIGNyeXB0by1BUEkKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitTZWUgRG9jdW1lbnRhdGlvbi9jcnlwdG8vYXBpLWludHJvLnR4dCBmb3IgYW4gaW50cm9kdWN0aW9uL2Rlc2NyaXB0aW9uIG9mIHRoZQora2VybmVsIGNyeXB0byBBUEkuCitBY2NvcmRpbmcgdG8gYXBpLWludHJvLnR4dCBzdXBwb3J0IGZvciB6OTkwIGNyeXB0byBpbnN0cnVjdGlvbnMgaGFzIGJlZW4gYWRkZWQKK2luIHRoZSBhbGdvcml0aG0gYXBpIGxheWVyIG9mIHRoZSBjcnlwdG8gQVBJLiBTZXZlcmFsIGZpbGVzIGNvbnRhaW5pbmcgejk5MAorb3B0aW1pemVkIGltcGxlbWVudGF0aW9ucyBvZiBjcnlwdG8gYWxnb3JpdGhtcyBhcmUgcGxhY2VkIGluIHRoZQorYXJjaC9zMzkwL2NyeXB0byBkaXJlY3RvcnkuCisKKworMi4gUHJvYmluZyBmb3IgYXZhaWxhYmlsaXR5IG9mIE1TQQorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorSXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIHVzZSBLZXJuZWxzIHdpdGggdGhlIHo5OTAgY3J5cHRvIGltcGxlbWVudGF0aW9ucyBib3RoCitvbiBtYWNoaW5lcyB3aXRoIE1TQSBhdmFpbGFibGUgYW4gb24gdGhvc2Ugd2l0aG91dCBNU0EgKHByZSB6OTkwIG9yIHo5OTAKK3dpdGhvdXQgTVNBKS4gVGhlcmVmb3JlIGEgc2ltcGxlIHByb2JpbmcgbWVjaGFuaXNtcyBoYXMgYmVlbiBpbXBsZW1lbnRlZDoKK0luIHRoZSBpbml0IGZ1bmN0aW9uIG9mIGVhY2ggY3J5cHRvIG1vZHVsZSB0aGUgYXZhaWxhYmlsaXR5IG9mIE1TQSBhbmQgb2YgdGhlCityZXNwZWN0aXZlIGNyeXB0byBhbGdvcml0aG0gaW4gcGFydGljdWxhciB3aWxsIGJlIHRlc3RlZC4gSWYgdGhlIGFsZ29yaXRobSBpcworYXZhaWxhYmxlIHRoZSBtb2R1bGUgd2lsbCBsb2FkIGFuZCByZWdpc3RlciBpdHMgYWxnb3JpdGhtIHdpdGggdGhlIGNyeXB0byBBUEkuCisKK0lmIHRoZSByZXNwZWN0aXZlIGNyeXB0byBhbGdvcml0aG0gaXMgbm90IGF2YWlsYWJsZSwgdGhlIGluaXQgZnVuY3Rpb24gd2lsbAorcmV0dXJuIC1FTk9TWVMuIEluIHRoYXQgY2FzZSBhIGZhbGxiYWNrIHRvIHRoZSBzdGFuZGFyZCBzb2Z0d2FyZSBpbXBsZW1lbnRhdGlvbgorb2YgdGhlIGNyeXB0byBhbGdvcml0aG0gbXVzdCBiZSB0YWtlbiAoIC0+IHRoZSBzdGFuZGFyZCBjcnlwdG8gbW9kdWxlcyBhcmUKK2Fsc28gYnVpbGQgd2hlbiBjb21waWxpbmcgdGhlIGtlcm5lbCkuCisKKworMy4gRW5zdXJpbmcgejk5MCBjcnlwdG8gbW9kdWxlIHByZWZlcmVuY2UKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitJZiB6OTkwIGNyeXB0byBpbnN0cnVjdGlvbnMgYXJlIGF2YWlsYWJsZSB0aGUgb3B0aW1pemVkIG1vZHVsZXMgc2hvdWxkIGJlCitwcmVmZXJyZWQgaW5zdGVhZCBvZiBzdGFuZGFyZCBtb2R1bGVzLgorCiszLjEuIGNvbXBpbGVkLWluIG1vZHVsZXMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorRm9yIGNvbXBpbGVkLWluIG1vZHVsZXMgaXQgaGFzIHRvIGJlIGVuc3VyZWQgdGhhdCB0aGUgejk5MCBtb2R1bGVzIGFyZSBsaW5rZWQKK2JlZm9yZSB0aGUgc3RhbmRhcmQgY3J5cHRvIG1vZHVsZXMuIFRoZW4sIG9uIHN5c3RlbSBzdGFydHVwIHRoZSBpbml0IGZ1bmN0aW9ucworb2Ygejk5MCBjcnlwdG8gbW9kdWxlcyB3aWxsIGJlIGNhbGxlZCBmaXJzdCBhbmQgcXVlcnkgZm9yIGF2YWlsYWJpbGl0eSBvZiB6OTkwCitjcnlwdG8gaW5zdHJ1Y3Rpb25zLiBJZiBpbnN0cnVjdGlvbiBpcyBhdmFpbGFibGUsIHRoZSB6OTkwIG1vZHVsZSB3aWxsIHJlZ2lzdGVyCitpdHMgY3J5cHRvIGFsZ29yaXRobSBpbXBsZW1lbnRhdGlvbiAtPiB0aGUgbG9hZCBvZiB0aGUgc3RhbmRhcmQgbW9kdWxlIHdpbGwgZmFpbAorc2luY2UgdGhlIGFsZ29yaXRobSBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQuCitJZiB6OTkwIGNyeXB0byBpbnN0cnVjdGlvbiBpcyBub3QgYXZhaWxhYmxlIHRoZSBsb2FkIG9mIHRoZSB6OTkwIG1vZHVsZSB3aWxsCitmYWlsIC0+IHRoZSBzdGFuZGFyZCBtb2R1bGUgd2lsbCBsb2FkIGFuZCByZWdpc3RlciBpdHMgYWxnb3JpdGhtLgorCiszLjIuIGR5bmFtaWMgbW9kdWxlcworfn5+fn5+fn5+fn5+fn5+fn5+fn4KK0Egc3lzdGVtIGFkbWluaXN0cmF0b3IgaGFzIHRvIHRha2UgY2FyZSBvZiBnaXZpbmcgcHJlZmVyZW5jZSB0byB6OTkwIGNyeXB0bworbW9kdWxlcy4gSWYgTVNBIGlzIGF2YWlsYWJsZSBhcHByb3ByaWF0ZSBsaW5lcyBoYXZlIHRvIGJlIGFkZGVkIHRvCisvZXRjL21vZHByb2JlLmNvbmYuCisKK0V4YW1wbGU6CXo5OTAgY3J5cHRvIGluc3RydWN0aW9uIGZvciBTSEExIGFsZ29yaXRobSBpcyBhdmFpbGFibGUKKworCQlhZGQgdGhlIGZvbGxvd2luZyBsaW5lIHRvIC9ldGMvbW9kcHJvYmUuY29uZiAoYXNzdW1pbmcgdGhlCisJCXo5OTAgY3J5cHRvIG1vZHVsZXMgZm9yIFNIQTEgaXMgY2FsbGVkIHNoYTFfejk5MCk6CisKKwkJYWxpYXMgc2hhMSBzaGExX3o5OTAKKworCQktPiB3aGVuIHRoZSBzaGExIGFsZ29yaXRobSBpcyByZXF1ZXN0ZWQgdGhyb3VnaCB0aGUgY3J5cHRvIEFQSQorCQkod2hpY2ggaGFzIGEgbW9kdWxlIGF1dG9sb2FkZXIpIHRoZSB6OTkwIG1vZHVsZSB3aWxsIGJlIGxvYWRlZC4KKworVEJEOglhIHVzZXJzcGFjZSBtb2R1bGUgcHJvYmluIG1lY2hhbmlzbQorCXNvbWV0aGluZyBsaWtlICdwcm9iZSBzaGExIHNoYTFfejk5MCBzaGExJyBpbiBtb2Rwcm9iZS5jb25mCisJLT4gdHJ5IG1vZHVsZSBzaGExX3o5OTAsIGlmIGl0IGZhaWxzIHRvIGxvYWQgbG9hZCBzdGFuZGFyZCBtb2R1bGUgc2hhMQorCXRoZSAncHJvYmUnIHN0YXRlbWVudCBpcyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZCBpbiBtb2Rwcm9iZS5jb25mCisKKworNC4gQ3VycmVudGx5IGltcGxlbWVudGVkIHo5OTAgY3J5cHRvIGFsZ29yaXRobXMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitUaGUgZm9sbG93aW5nIGNyeXB0byBhbGdvcml0aG1zIHdpdGggejk5MCBNU0Egc3VwcG9ydCBhcmUgY3VycmVudGx5IGltcGxlbWVudGVkLgorVGhlIG5hbWUgb2YgZWFjaCBhbGdvcml0aG0gdW5kZXIgd2hpY2ggaXQgaXMgcmVnaXN0ZXJlZCBpbiBjcnlwdG8gQVBJIGFuZCB0aGUKK25hbWUgb2YgdGhlIHJlc3BlY3RpdmUgbW9kdWxlIGlzIGdpdmVuIGluIHNxdWFyZSBicmFja2V0cy4KKworLSBTSEExIERpZ2VzdCBBbGdvcml0aG0gW3NoYTEgLT4gc2hhMV96OTkwXQorLSBERVMgRW5jcnlwdC9EZWNyeXB0IEFsZ29yaXRobSAoNjRiaXQga2V5KSBbZGVzIC0+IGRlc196OTkwXQorLSBUcmlwcGxlIERFUyBFbmNyeXB0L0RlY3J5cHQgQWxnb3JpdGhtICgxMjhiaXQga2V5KSBbZGVzM19lZGUxMjggLT4gZGVzX3o5OTBdCistIFRyaXBwbGUgREVTIEVuY3J5cHQvRGVjcnlwdCBBbGdvcml0aG0gKDE5MmJpdCBrZXkpIFtkZXMzX2VkZSAtPiBkZXNfejk5MF0KKworSW4gb3JkZXIgdG8gbG9hZCwgZm9yIGV4YW1wbGUsIHRoZSBzaGExX3o5OTAgbW9kdWxlIHdoZW4gdGhlIHNoYTEgYWxnb3JpdGhtIGlzCityZXF1ZXN0ZWQgKHNlZSAzLjIuKSBhZGQgJ2FsaWFzIHNoYTEgc2hhMV96OTkwJyB0byAvZXRjL21vZHByb2JlLmNvbmYuCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vczM5MC9kcml2ZXItbW9kZWwudHh0IGIvRG9jdW1lbnRhdGlvbi9zMzkwL2RyaXZlci1tb2RlbC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk0NjE5NQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vczM5MC9kcml2ZXItbW9kZWwudHh0CkBAIC0wLDAgKzEsMjY1IEBACitTLzM5MCBkcml2ZXIgbW9kZWwgaW50ZXJmYWNlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworMS4gQ0NXIGRldmljZXMKKy0tLS0tLS0tLS0tLS0tCisKK0FsbCBkZXZpY2VzIHdoaWNoIGNhbiBiZSBhZGRyZXNzZWQgYnkgbWVhbnMgb2YgY2N3cyBhcmUgY2FsbGVkICdDQ1cgZGV2aWNlcycgLQorZXZlbiBpZiB0aGV5IGFyZW4ndCBhY3R1YWxseSBkcml2ZW4gYnkgY2N3cy4KKworQWxsIGNjdyBkZXZpY2VzIGFyZSBhY2Nlc3NlZCB2aWEgYSBzdWJjaGFubmVsLCB0aGlzIGlzIHJlZmxlY3RlZCBpbiB0aGUgCitzdHJ1Y3R1cmVzIHVuZGVyIHJvb3QvOgorCityb290LworICAgICAtIHN5cworICAgICAtIGxlZ2FjeQorICAgICAtIGNzczAvCisgICAgICAgICAgIC0gMC4wLjAwMDAvMC4wLjA4MTUvCisJICAgLSAwLjAuMDAwMS8wLjAuNDcxMS8KKwkgICAtIDAuMC4wMDAyLworCSAgIC4uLgorCitJbiB0aGlzIGV4YW1wbGUsIGRldmljZSAwODE1IGlzIGFjY2Vzc2VkIHZpYSBzdWJjaGFubmVsIDAsIGRldmljZSA0NzExIHZpYSAKK3N1YmNoYW5uZWwgMSwgYW5kIHN1YmNoYW5uZWwgMiBpcyBhIG5vbi1JL08gc3ViY2hhbm5lbC4KKworWW91IHNob3VsZCBhZGRyZXNzIGEgY2N3IGRldmljZSB2aWEgaXRzIGJ1cyBpZCAoZS5nLiAwLjAuNDcxMSk7IHRoZSBkZXZpY2UgY2FuCitiZSBmb3VuZCB1bmRlciBidXMvY2N3L2RldmljZXMvLgorCitBbGwgY2N3IGRldmljZXMgZXhwb3J0IHNvbWUgZGF0YSB2aWEgc3lzZnMuCisKK2N1dHlwZToJICAgIFRoZSBjb250cm9sIHVuaXQgdHlwZSAvIG1vZGVsLgorCitkZXZ0eXBlOiAgICBUaGUgZGV2aWNlIHR5cGUgLyBtb2RlbCwgaWYgYXBwbGljYWJsZS4KKworYXZhaWxhYmlsaXR5OiBDYW4gYmUgJ2dvb2QnIG9yICdib3hlZCc7ICdubyBwYXRoJyBvciAnbm8gZGV2aWNlJyBmb3IKKwkgICAgICBkaXNjb25uZWN0ZWQgZGV2aWNlcy4KKworb25saW5lOiAgICAgQW4gaW50ZXJmYWNlIHRvIHNldCB0aGUgZGV2aWNlIG9ubGluZSBhbmQgb2ZmbGluZS4KKwkgICAgSW4gdGhlIHNwZWNpYWwgY2FzZSBvZiB0aGUgZGV2aWNlIGJlaW5nIGRpc2Nvbm5lY3RlZCAoc2VlIHRoZQorCSAgICBub3RpZnkgZnVuY3Rpb24gdW5kZXIgMS4yKSwgcGlwaW5nIDAgdG8gb25saW5lIHdpbGwgZm9jaWJseSBkZWxldGUKKwkgICAgdGhlIGRldmljZS4KKworVGhlIGRldmljZSBkcml2ZXJzIGNhbiBhZGQgZW50cmllcyB0byBleHBvcnQgcGVyLWRldmljZSBkYXRhIGFuZCBpbnRlcmZhY2VzLgorCitUaGVyZSBpcyBhbHNvIHNvbWUgZGF0YSBleHBvcnRlZCBvbiBhIHBlci1zdWJjaGFubmVsIGJhc2lzIChzZWUgdW5kZXIKK2J1cy9jc3MvZGV2aWNlcy8pOgorCitjaHBpZHM6CSAgICBWaWEgd2hpY2ggY2hwaWRzIHRoZSBkZXZpY2UgaXMgY29ubmVjdGVkLgorCitwaW1wYW1wb206ICBUaGUgcGF0aCBpbnN0YWxsZWQsIHBhdGggYXZhaWxhYmxlIGFuZCBwYXRoIG9wZXJhdGlvbmFsIG1hc2tzLgorCitUaGVyZSBhbHNvIG1pZ2h0IGJlIGFkZGl0aW9uYWwgZGF0YSwgZm9yIGV4YW1wbGUgZm9yIGJsb2NrIGRldmljZXMuCisKKworMS4xIEJyaW5naW5nIHVwIGEgY2N3IGRldmljZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGlzIGRvbmUgaW4gc2V2ZXJhbCBzdGVwcy4KKworYS4gRWFjaCBkcml2ZXIgY2FuIHByb3ZpZGUgb25lIG9yIG1vcmUgcGFyYW1ldGVyIGludGVyZmFjZXMgd2hlcmUgcGFyYW1ldGVycyBjYW4KKyAgIGJlIHNwZWNpZmllZC4gVGhlc2UgaW50ZXJmYWNlcyBhcmUgYWxzbyBpbiB0aGUgZHJpdmVyJ3MgcmVzcG9uc2liaWxpdHkuCitiLiBBZnRlciBhLiBoYXMgYmVlbiBwZXJmb3JtZWQsIGlmIG5lY2Vzc2FyeSwgdGhlIGRldmljZSBpcyBmaW5hbGx5IGJyb3VnaHQgdXAKKyAgIHZpYSB0aGUgJ29ubGluZScgaW50ZXJmYWNlLgorCisKKzEuMiBXcml0aW5nIGEgZHJpdmVyIGZvciBjY3cgZGV2aWNlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBiYXNpYyBzdHJ1Y3QgY2N3X2RldmljZSBhbmQgc3RydWN0IGNjd19kcml2ZXIgZGF0YSBzdHJ1Y3R1cmVzIGNhbiBiZSBmb3VuZAordW5kZXIgaW5jbHVkZS9hc20vY2N3ZGV2LmguCisKK3N0cnVjdCBjY3dfZGV2aWNlIHsKKyAgICAgICAgc3BpbmxvY2tfdCAqY2N3bG9jazsKKyAgICAgICAgc3RydWN0IGNjd19kZXZpY2VfcHJpdmF0ZSAqcHJpdmF0ZTsKKwlzdHJ1Y3QgY2N3X2RldmljZV9pZCBpZDsJCisKKwlzdHJ1Y3QgY2N3X2RyaXZlciAqZHJ2OwkJCisJc3RydWN0IGRldmljZSBkZXY7CQkKKwlpbnQgb25saW5lOworCisJdm9pZCAoKmhhbmRsZXIpIChzdHJ1Y3QgY2N3X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGludHBhcm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGlyYiAqaXJiKTsKK307CisKK3N0cnVjdCBjY3dfZHJpdmVyIHsKKwlzdHJ1Y3QgbW9kdWxlICpvd25lcjsJCQorCXN0cnVjdCBjY3dfZGV2aWNlX2lkICppZHM7CQorCWludCAoKnByb2JlKSAoc3RydWN0IGNjd19kZXZpY2UgKik7IAorCWludCAoKnJlbW92ZSkgKHN0cnVjdCBjY3dfZGV2aWNlICopOworCWludCAoKnNldF9vbmxpbmUpIChzdHJ1Y3QgY2N3X2RldmljZSAqKTsKKwlpbnQgKCpzZXRfb2ZmbGluZSkgKHN0cnVjdCBjY3dfZGV2aWNlICopOworCWludCAoKm5vdGlmeSkgKHN0cnVjdCBjY3dfZGV2aWNlICosIGludCk7CisJc3RydWN0IGRldmljZV9kcml2ZXIgZHJpdmVyOworCWNoYXIgKm5hbWU7Cit9OworCitUaGUgJ3ByaXZhdGUnIGZpZWxkIGNvbnRhaW5zIGRhdGEgbmVlZGVkIGZvciBpbnRlcm5hbCBpL28gb3BlcmF0aW9uIG9ubHksIGFuZAoraXMgbm90IGF2YWlsYWJsZSB0byB0aGUgZGV2aWNlIGRyaXZlci4KKworRWFjaCBkcml2ZXIgc2hvdWxkIGRlY2xhcmUgaW4gYSBNT0RVTEVfREVWSUNFX1RBQkxFIGludG8gd2hpY2ggQ1UgdHlwZXMvbW9kZWxzCithbmQvb3IgZGV2aWNlIHR5cGVzL21vZGVscyBpdCBpcyBpbnRlcmVzdGVkLiBUaGlzIGluZm9ybWF0aW9uIGNhbiBsYXRlciBiZSBmb3VuZAorZm91bmQgaW4gdGhlIHN0cnVjdCBjY3dfZGV2aWNlX2lkIGZpZWxkczoKKworc3RydWN0IGNjd19kZXZpY2VfaWQgeworCV9fdTE2CW1hdGNoX2ZsYWdzOwkKKworCV9fdTE2CWN1X3R5cGU7CQorCV9fdTE2CWRldl90eXBlOwkKKwlfX3U4CWN1X21vZGVsOwkKKwlfX3U4CWRldl9tb2RlbDsJCisKKwl1bnNpZ25lZCBsb25nIGRyaXZlcl9pbmZvOworfTsKKworVGhlIGZ1bmN0aW9ucyBpbiBjY3dfZHJpdmVyIHNob3VsZCBiZSB1c2VkIGluIHRoZSBmb2xsb3dpbmcgd2F5OgorcHJvYmU6ICAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIGRldmljZSBsYXllciBmb3IgZWFjaCBkZXZpY2UgdGhlIGRyaXZlcgorCSBpcyBpbnRlcmVzdGVkIGluLiBUaGUgZHJpdmVyIHNob3VsZCBvbmx5IGFsbG9jYXRlIHByaXZhdGUgc3RydWN0dXJlcworCSB0byBwdXQgaW4gZGV2LT5kcml2ZXJfZGF0YSBhbmQgY3JlYXRlIGF0dHJpYnV0ZXMgKGlmIG5lZWRlZCkuIEFsc28sCisJIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciAoc2VlIGJlbG93KSBzaG91bGQgYmUgc2V0IGhlcmUuCisKK2ludCAoKnByb2JlKSAoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYpOyAKKworUGFyYW1ldGVyczogIGNkZXYgICAgIC0gdGhlIGRldmljZSB0byBiZSBwcm9iZWQuCisKKworcmVtb3ZlOiAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIGRldmljZSBsYXllciB1cG9uIHJlbW92YWwgb2YgdGhlIGRyaXZlciwKKwkgdGhlIGRldmljZSBvciB0aGUgbW9kdWxlLiBUaGUgZHJpdmVyIHNob3VsZCBwZXJmb3JtIGNsZWFudXBzIGhlcmUuCisKK2ludCAoKnJlbW92ZSkgKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2KTsKKworUGFyYW1ldGVyczogICBjZGV2ICAgIC0gdGhlIGRldmljZSB0byBiZSByZW1vdmVkLgorCisKK3NldF9vbmxpbmU6IFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSBjb21tb24gSS9PIGxheWVyIHdoZW4gdGhlIGRldmljZSBpcworCSAgICBhY3RpdmF0ZWQgdmlhIHRoZSAnb25saW5lJyBhdHRyaWJ1dGUuIFRoZSBkcml2ZXIgc2hvdWxkIGZpbmFsbHkKKwkgICAgc2V0dXAgYW5kIGFjdGl2YXRlIHRoZSBkZXZpY2UgaGVyZS4KKworaW50ICgqc2V0X29ubGluZSkgKHN0cnVjdCBjY3dfZGV2aWNlICopOworCitQYXJhbWV0ZXJzOiAgIGNkZXYJLSB0aGUgZGV2aWNlIHRvIGJlIGFjdGl2YXRlZC4gVGhlIGNvbW1vbiBsYXllciBoYXMKKwkJCSAgdmVyaWZpZWQgdGhhdCB0aGUgZGV2aWNlIGlzIG5vdCBhbHJlYWR5IG9ubGluZS4KKworCitzZXRfb2ZmbGluZTogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIGNvbW1vbiBJL08gbGF5ZXIgd2hlbiB0aGUgZGV2aWNlIGlzCisJICAgICBkZS1hY3RpdmF0ZWQgdmlhIHRoZSAnb25saW5lJyBhdHRyaWJ1dGUuIFRoZSBkcml2ZXIgc2hvdWxkIHNodXQKKwkgICAgIGRvd24gdGhlIGRldmljZSwgYnV0IG5vdCBkZS1hbGxvY2F0ZSBpdHMgcHJpdmF0ZSBkYXRhLgorCitpbnQgKCpzZXRfb2ZmbGluZSkgKHN0cnVjdCBjY3dfZGV2aWNlICopOworCitQYXJhbWV0ZXJzOiAgIGNkZXYgICAgICAgLSB0aGUgZGV2aWNlIHRvIGJlIGRlYWN0aXZhdGVkLiBUaGUgY29tbW9uIGxheWVyIGhhcworCQkJICAgdmVyaWZpZWQgdGhhdCB0aGUgZGV2aWNlIGlzIG9ubGluZS4KKworCitub3RpZnk6IFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSBjb21tb24gSS9PIGxheWVyIGZvciBzb21lIHN0YXRlIGNoYW5nZXMKKwlvZiB0aGUgZGV2aWNlLgorCVNpZ25hbGxlZCB0byB0aGUgZHJpdmVyIGFyZToKKwkqIEluIG9ubGluZSBzdGF0ZSwgZGV2aWNlIGRldGFjaGVkIChDSU9fR09ORSkgb3IgbGFzdCBwYXRoIGdvbmUKKwkgIChDSU9fTk9fUEFUSCkuIFRoZSBkcml2ZXIgbXVzdCByZXR1cm4gITAgdG8ga2VlcCB0aGUgZGV2aWNlOyBmb3IKKwkgIHJldHVybiBjb2RlIDAsIHRoZSBkZXZpY2Ugd2lsbCBiZSBkZWxldGVkIGFzIHVzdWFsIChhbHNvIHdoZW4gbm8KKwkgIG5vdGlmeSBmdW5jdGlvbiBpcyByZWdpc3RlcmQpLiBJZiB0aGUgZHJpdmVyIHdhbnRzIHRvIGtlZXAgdGhlCisJICBkZXZpY2UsIGl0IGlzIG1vdmVkIGludG8gZGlzY29ubmVjdGVkIHN0YXRlLgorCSogSW4gZGlzY29ubmVjdGVkIHN0YXRlLCBkZXZpY2Ugb3BlcmF0aW9uYWwgYWdhaW4gKENJT19PUEVSKS4gVGhlCisJICBjb21tb24gSS9PIGxheWVyIHBlcmZvcm1zIHNvbWUgc2FuaXR5IGNoZWNrcyBvbiBkZXZpY2UgbnVtYmVyIGFuZAorCSAgRGV2aWNlIC8gQ1UgdG8gYmUgcmVhc29uYWJseSBzdXJlIGlmIGl0IGlzIHN0aWxsIHRoZSBzYW1lIGRldmljZS4KKwkgIElmIG5vdCwgdGhlIG9sZCBkZXZpY2UgaXMgcmVtb3ZlZCBhbmQgYSBuZXcgb25lIHJlZ2lzdGVyZWQuIEJ5IHRoZQorCSAgcmV0dXJuIGNvZGUgb2YgdGhlIG5vdGlmeSBmdW5jdGlvbiB0aGUgZGV2aWNlIGRyaXZlciBzaWduYWxzIGlmIGl0CisJICB3YW50cyB0aGUgZGV2aWNlIGJhY2s6ICEwIGZvciBrZWVwaW5nLCAwIHRvIG1ha2UgdGhlIGRldmljZSBiZWluZworCSAgcmVtb3ZlZCBhbmQgcmUtcmVnaXN0ZXJlZC4KKwkKK2ludCAoKm5vdGlmeSkgKHN0cnVjdCBjY3dfZGV2aWNlICosIGludCk7CisKK1BhcmFtZXRlcnM6ICAgY2RldiAgICAtIHRoZSBkZXZpY2Ugd2hvc2Ugc3RhdGUgY2hhbmdlZC4KKwkgICAgICBldmVudCAgIC0gdGhlIGV2ZW50IHRoYXQgaGFwcGVuZWQuIFRoaXMgY2FuIGJlIG9uZSBvZiBDSU9fR09ORSwKKwkJICAgICAgICBDSU9fTk9fUEFUSCBvciBDSU9fT1BFUi4KKworVGhlIGhhbmRsZXIgZmllbGQgb2YgdGhlIHN0cnVjdCBjY3dfZGV2aWNlIGlzIG1lYW50IHRvIGJlIHNldCB0byB0aGUgaW50ZXJydXB0CitoYW5kbGVyIGZvciB0aGUgZGV2aWNlLiBJbiBvcmRlciB0byBhY2NvbW1vZGF0ZSBkcml2ZXJzIHdoaWNoIHVzZSBzZXZlcmFsIAorZGlzdGluY3QgaGFuZGxlcnMgKGUuZy4gbXVsdGkgc3ViY2hhbm5lbCBkZXZpY2VzKSwgdGhpcyBpcyBhIG1lbWJlciBvZiBjY3dfZGV2aWNlCitpbnN0ZWFkIG9mIGNjd19kcml2ZXIuCitUaGUgaGFuZGxlciBpcyByZWdpc3RlcmVkIHdpdGggdGhlIGNvbW1vbiBsYXllciBkdXJpbmcgc2V0X29ubGluZSgpIHByb2Nlc3NpbmcKK2JlZm9yZSB0aGUgZHJpdmVyIGlzIGNhbGxlZCwgYW5kIGlzIGRlcmVnaXN0ZXJlZCBkdXJpbmcgc2V0X29mZmxpbmUoKSBhZnRlciB0aGUKK2RyaXZlciBoYXMgYmVlbiBjYWxsZWQuIEFsc28sIGFmdGVyIHJlZ2lzdGVyaW5nIC8gYmVmb3JlIGRlcmVnaXN0ZXJpbmcsIHBhdGggCitncm91cGluZyByZXNwLiBkaXNiYW5kaW5nIG9mIHRoZSBwYXRoIGdyb3VwIChpZiBhcHBsaWNhYmxlKSBhcmUgcGVyZm9ybWVkLgorCit2b2lkICgqaGFuZGxlcikgKHN0cnVjdCBjY3dfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgaW50cGFybSwgc3RydWN0IGlyYiAqaXJiKTsKKworUGFyYW1ldGVyczoJZGV2CS0gdGhlIGRldmljZSB0aGUgaGFuZGxlciBpcyBjYWxsZWQgZm9yCisJCWludHBhcm0gLSB0aGUgaW50cGFybSB3aGljaCBhbGxvd3MgdGhlIGRldmljZSBkcml2ZXIgdG8gaWRlbnRpZnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGkvbyB0aGUgaW50ZXJydXB0IGlzIGFzc29jaWF0ZWQgd2l0aCwgb3IgdG8gcmVjb2duaXplCisgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBpbnRlcnJ1cHQgYXMgdW5zb2xpY2l0ZWQuCisgICAgICAgICAgICAgICAgaXJiICAgICAtIGludGVycnVwdGlvbiByZXNwb25zZSBibG9jayB3aGljaCBjb250YWlucyB0aGUgYWNjdW11bGF0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLgorCitUaGUgZGV2aWNlIGRyaXZlciBpcyBjYWxsZWQgZnJvbSB0aGUgY29tbW9uIGNjd19kZXZpY2UgbGF5ZXIgYW5kIGNhbiByZXRyaWV2ZSAKK2luZm9ybWF0aW9uIGFib3V0IHRoZSBpbnRlcnJ1cHQgZnJvbSB0aGUgaXJiIHBhcmFtZXRlci4KKworCisxLjMgY2N3Z3JvdXAgZGV2aWNlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGNjd2dyb3VwIG1lY2hhbmlzbSBpcyBkZXNpZ25lZCB0byBoYW5kbGUgZGV2aWNlcyBjb25zaXN0aW5nIG9mIG11bHRpcGxlIGNjdworZGV2aWNlcywgbGlrZSBsY3Mgb3IgY3RjLgorCitUaGUgY2N3IGRyaXZlciBwcm92aWRlcyBhICdncm91cCcgYXR0cmlidXRlLiBQaXBpbmcgYnVzIGlkcyBvZiBjY3cgZGV2aWNlcyB0bwordGhpcyBhdHRyaWJ1dGVzIGNyZWF0ZXMgYSBjY3dncm91cCBkZXZpY2UgY29uc2lzdGluZyBvZiB0aGVzZSBjY3cgZGV2aWNlcyAoaWYKK3Bvc3NpYmxlKS4gVGhpcyBjY3dncm91cCBkZXZpY2UgY2FuIGJlIHNldCBvbmxpbmUgb3Igb2ZmbGluZSBqdXN0IGxpa2UgYSBub3JtYWwKK2NjdyBkZXZpY2UuCisKK0VhY2ggY2N3Z3JvdXAgZGV2aWNlIGFsc28gcHJvdmlkZXMgYW4gJ3VuZ3JvdXAnIGF0dHJpYnV0ZSB0byBkZXN0cm95IHRoZSBkZXZpY2UKK2FnYWluIChvbmx5IHdoZW4gb2ZmbGluZSkuIFRoaXMgaXMgYSBnZW5lcmljIGNjd2dyb3VwIG1lY2hhbmlzbSAodGhlIGRyaXZlciBkb2VzCitub3QgbmVlZCB0byBpbXBsZW1lbnQgYW55dGhpbmcgYmV5b25kIG5vcm1hbCByZW1vdmFsIHJvdXRpbmVzKS4KKworVG8gaW1wbGVtZW50IGEgY2N3Z3JvdXAgZHJpdmVyLCBwbGVhc2UgcmVmZXIgdG8gaW5jbHVkZS9hc20vY2N3Z3JvdXAuaC4gS2VlcCBpbgorbWluZCB0aGF0IG1vc3QgZHJpdmVycyB3aWxsIG5lZWQgdG8gaW1wbGVtZW50IGJvdGggYSBjY3dncm91cCBhbmQgYSBjY3cgZHJpdmVyCisodW5sZXNzIHlvdSBoYXZlIGEgbWV0YSBjY3cgZHJpdmVyLCBsaWtlIGN1MzA4OCBmb3IgbGNzIGFuZCBjdGMpLgorCisKKzIuIENoYW5uZWwgcGF0aHMKKy0tLS0tLS0tLS0tLS0tLS0tCisKK0NoYW5uZWwgcGF0aHMgc2hvdyB1cCwgbGlrZSBzdWJjaGFubmVscywgdW5kZXIgdGhlIGNoYW5uZWwgc3Vic3lzdGVtIHJvb3QgKGNzczApCithbmQgYXJlIGNhbGxlZCAnY2hwMC48Y2hwaWQ+Jy4gVGhleSBoYXZlIG5vIGRyaXZlciBhbmQgZG8gbm90IGJlbG9uZyB0byBhbnkgYnVzLgorUGxlYXNlIG5vdGUsIHRoYXQgdW5saWtlIC9wcm9jL2NocGlkcyBpbiAyLjQsIHRoZSBjaGFubmVsIHBhdGggb2JqZWN0cyByZWZsZWN0Citvbmx5IHRoZSBsb2dpY2FsIHN0YXRlIGFuZCBub3QgdGhlIHBoeXNpY2FsIHN0YXRlLCBzaW5jZSB3ZSBjYW5ub3QgdHJhY2sgdGhlCitsYXR0ZXIgY29uc2lzdGVudGx5IGR1ZSB0byBsYWNraW5nIG1hY2hpbmUgc3VwcG9ydCAod2UgZG9uJ3QgbmVlZCB0byBiZSBhd2FyZQorb2YgYW55d2F5KS4KKworc3RhdHVzIC0gQ2FuIGJlICdvbmxpbmUnIG9yICdvZmZsaW5lJy4KKwkgUGlwaW5nICdvbicgb3IgJ29mZicgc2V0cyB0aGUgY2hwaWQgbG9naWNhbGx5IG9ubGluZS9vZmZsaW5lLgorCSBQaXBpbmcgJ29uJyB0byBhbiBvbmxpbmUgY2hwaWQgdHJpZ2dlcnMgcGF0aCByZXByb2JpbmcgZm9yIGFsbCBkZXZpY2VzCisJIHRoZSBjaHBpZCBjb25uZWN0cyB0by4gVGhpcyBjYW4gYmUgdXNlZCB0byBmb3JjZSB0aGUga2VybmVsIHRvIHJlLXVzZQorCSBhIGNoYW5uZWwgcGF0aCB0aGUgdXNlciBrbm93cyB0byBiZSBvbmxpbmUsIGJ1dCB0aGUgbWFjaGluZSBoYXNuJ3QKKwkgY3JlYXRlZCBhIG1hY2hpbmUgY2hlY2sgZm9yLgorCisKKzMuIFN5c3RlbSBkZXZpY2VzCistLS0tLS0tLS0tLS0tLS0tLQorCitOb3RlOiBjcHVzIG1heSB5ZXQgYmUgYWRkZWQgaGVyZS4KKworMy4xIHhwcmFtIAorLS0tLS0tLS0tCisKK3hwcmFtIHNob3dzIHVwIHVuZGVyIHN5cy8gYXMgJ3hwcmFtJy4KKworCis0LiBPdGhlciBkZXZpY2VzCistLS0tLS0tLS0tLS0tLS0tCisKKzQuMSBOZXRpdWN2CistLS0tLS0tLS0tLQorCitUaGUgbmV0aXVjdiBkcml2ZXIgY3JlYXRlcyBhbiBhdHRyaWJ1dGUgJ2Nvbm5lY3Rpb24nIHVuZGVyCitidXMvaXVjdi9kcml2ZXJzL25ldGl1Y3YuIFBpcGluZyB0byB0aGlzIGF0dGlidXRlIGNyZWF0ZXMgYSBuZXcgbmV0aXVjdgorY29ubmVjdGlvbiB0byB0aGUgc3BlY2lmaWVkIGhvc3QuCisKK05ldGl1Y3YgY29ubmVjdGlvbnMgc2hvdyB1cCB1bmRlciBkZXZpY2VzL2l1Y3YvIGFzICJuZXRpdWN2PGlmbnVtPiIuIFRoZSBpbnRlcmZhY2UKK251bWJlciBpcyBhc3NpZ25lZCBzZXF1ZW50aWFsbHkgdG8gdGhlIGNvbm5lY3Rpb25zIGRlZmluZWQgdmlhIHRoZSAnY29ubmVjdGlvbicKK2F0dHJpYnV0ZS4KKwordXNlcgkJCSAgLSBzaG93cyB0aGUgY29ubmVjdGlvbiBwYXJ0bmVyLgorCitidWZmZXIJCQkgIC0gbWF4aW11bSBidWZmZXIgc2l6ZS4KKwkJCSAgICBQaXBlIHRvIGl0IHRvIGNoYW5nZSBidWZmZXIgc2l6ZS4KKworCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3MzOTAvbW9ucmVhZGVyLnR4dCBiL0RvY3VtZW50YXRpb24vczM5MC9tb25yZWFkZXIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4NDNiYjAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3MzOTAvbW9ucmVhZGVyLnR4dApAQCAtMCwwICsxLDE5NyBAQAorCitEYXRlICA6IDIwMDQtTm92LTI2CitBdXRob3I6IEdlcmFsZCBTY2hhZWZlciAoZ2VyYWxkc2NAZGUuaWJtLmNvbSkKKworCisgICAgICAgICAgICAgTGludXggQVBJIGZvciByZWFkIGFjY2VzcyB0byB6L1ZNIE1vbml0b3IgUmVjb3JkcworICAgICAgICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCitEZXNjcmlwdGlvbgorPT09PT09PT09PT0KK1RoaXMgaXRlbSBkZWxpdmVycyBhIG5ldyBMaW51eCBBUEkgaW4gdGhlIGZvcm0gb2YgYSBtaXNjIGNoYXIgZGV2aWNlIHRoYXQgaXMKK3VzZWFibGUgZnJvbSB1c2VyIHNwYWNlIGFuZCBhbGxvd3MgcmVhZCBhY2Nlc3MgdG8gdGhlIHovVk0gTW9uaXRvciBSZWNvcmRzCitjb2xsZWN0ZWQgYnkgdGhlICpNT05JVE9SIFN5c3RlbSBTZXJ2aWNlIG9mIHovVk0uCisKKworVXNlciBSZXF1aXJlbWVudHMKKz09PT09PT09PT09PT09PT09CitUaGUgei9WTSBndWVzdCBvbiB3aGljaCB5b3Ugd2FudCB0byBhY2Nlc3MgdGhpcyBBUEkgbmVlZHMgdG8gYmUgY29uZmlndXJlZCBpbgorb3JkZXIgdG8gYWxsb3cgSVVDViBjb25uZWN0aW9ucyB0byB0aGUgKk1PTklUT1Igc2VydmljZSwgaS5lLiBpdCBuZWVkcyB0aGUKK0lVQ1YgKk1PTklUT1Igc3RhdGVtZW50IGluIGl0cyB1c2VyIGVudHJ5LiBJZiB0aGUgbW9uaXRvciBEQ1NTIHRvIGJlIHVzZWQgaXMKK3Jlc3RyaWN0ZWQgKGxpa2VseSksIHlvdSBhbHNvIG5lZWQgdGhlIE5BTUVTQVZFIDxEQ1NTIE5BTUU+IHN0YXRlbWVudC4KK1RoaXMgaXRlbSB3aWxsIHVzZSB0aGUgSVVDViBkZXZpY2UgZHJpdmVyIHRvIGFjY2VzcyB0aGUgei9WTSBzZXJ2aWNlcywgc28geW91CituZWVkIGEga2VybmVsIHdpdGggSVVDViBzdXBwb3J0LiBZb3UgYWxzbyBuZWVkIHovVk0gdmVyc2lvbiA0LjQgb3IgNS4xLgorCitUaGVyZSBhcmUgdHdvIG9wdGlvbnMgZm9yIGJlaW5nIGFibGUgdG8gbG9hZCB0aGUgbW9uaXRvciBEQ1NTIChleGFtcGxlcyBhc3N1bWUKK3RoYXQgdGhlIG1vbml0b3IgRENTUyBiZWdpbnMgYXQgMTQ0IE1CIGFuZCBlbmRzIGF0IDE1MiBNQikuIFlvdSBjYW4gcXVlcnkgdGhlCitsb2NhdGlvbiBvZiB0aGUgbW9uaXRvciBEQ1NTIHdpdGggdGhlIENsYXNzIEUgcHJpdmlsZWdlZCBDUCBjb21tYW5kIFEgTlNTIE1BUAorKHRoZSB2YWx1ZXMgQkVHUEFHIGFuZCBFTkRQQUcgYXJlIGdpdmVuIGluIHVuaXRzIG9mIDRLIHBhZ2VzKS4KKworU2VlIGFsc28gIkNQIENvbW1hbmQgYW5kIFV0aWxpdHkgUmVmZXJlbmNlIiAoU0MyNC02MDgxLTAwKSBmb3IgbW9yZSBpbmZvcm1hdGlvbgorb24gdGhlIERFRiBTVE9SIGFuZCBRIE5TUyBNQVAgY29tbWFuZHMsIGFzIHdlbGwgYXMgIlNhdmVkIFNlZ21lbnRzIFBsYW5uaW5nCithbmQgQWRtaW5pc3RyYXRpb24iIChTQzI0LTYxMTYtMDApIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIERDU1Nlcy4KKworMXN0IG9wdGlvbjoKKy0tLS0tLS0tLS0tCitZb3UgY2FuIHVzZSB0aGUgQ1AgY29tbWFuZCBERUYgU1RPUiBDT05GSUcgdG8gZGVmaW5lIGEgIm1lbW9yeSBob2xlIiBpbiB5b3VyCitndWVzdCB2aXJ0dWFsIHN0b3JhZ2UgYXJvdW5kIHRoZSBhZGRyZXNzIHJhbmdlIG9mIHRoZSBEQ1NTLgorCitFeGFtcGxlOiBERUYgU1RPUiBDT05GSUcgMC4xNDBNIDIwME0uMjAwTQorCitUaGlzIGRlZmluZXMgdHdvIGJsb2NrcyBvZiBzdG9yYWdlLCB0aGUgZmlyc3QgaXMgMTQwTUIgaW4gc2l6ZSBhbiBiZWdpbnMgYXQKK2FkZHJlc3MgME1CLCB0aGUgc2Vjb25kIGlzIDIwME1CIGluIHNpemUgYW5kIGJlZ2lucyBhdCBhZGRyZXNzIDIwME1CLAorcmVzdWx0aW5nIGluIGEgdG90YWwgc3RvcmFnZSBvZiAzNDBNQi4gTm90ZSB0aGF0IHRoZSBmaXJzdCBibG9jayBzaG91bGQKK2Fsd2F5cyBzdGFydCBhdCAwIGFuZCBiZSBhdCBsZWFzdCA2NE1CIGluIHNpemUuCisKKzJuZCBvcHRpb246CistLS0tLS0tLS0tLQorWW91ciBndWVzdCB2aXJ0dWFsIHN0b3JhZ2UgaGFzIHRvIGVuZCBiZWxvdyB0aGUgc3RhcnRpbmcgYWRkcmVzcyBvZiB0aGUgRENTUworYW5kIHlvdSBoYXZlIHRvIHNwZWNpZnkgdGhlICJtZW09IiBrZXJuZWwgcGFyYW1ldGVyIGluIHlvdXIgcGFybWZpbGUgd2l0aCBhCit2YWx1ZSBncmVhdGVyIHRoYW4gdGhlIGVuZGluZyBhZGRyZXNzIG9mIHRoZSBEQ1NTLgorCitFeGFtcGxlOiBERUYgU1RPUiAxNDBNCisKK1RoaXMgZGVmaW5lcyAxNDBNQiBzdG9yYWdlIHNpemUgZm9yIHlvdXIgZ3Vlc3QsIHRoZSBwYXJhbWV0ZXIgIm1lbT0xNjBNIiBpcworYWRkZWQgdG8gdGhlIHBhcm1maWxlLgorCisKK1VzZXIgSW50ZXJmYWNlCis9PT09PT09PT09PT09PQorVGhlIGNoYXIgZGV2aWNlIGlzIGltcGxlbWVudGVkIGFzIGEga2VybmVsIG1vZHVsZSBuYW1lZCAibW9ucmVhZGVyIiwKK3doaWNoIGNhbiBiZSBsb2FkZWQgdmlhIHRoZSBtb2Rwcm9iZSBjb21tYW5kLCBvciBpdCBjYW4gYmUgY29tcGlsZWQgaW50byB0aGUKK2tlcm5lbCBpbnN0ZWFkLiBUaGVyZSBpcyBvbmUgb3B0aW9uYWwgbW9kdWxlIChvciBrZXJuZWwpIHBhcmFtZXRlciwgIm1vbmRjc3MiLAordG8gc3BlY2lmeSB0aGUgbmFtZSBvZiB0aGUgbW9uaXRvciBEQ1NTLiBJZiB0aGUgbW9kdWxlIGlzIGNvbXBpbGVkIGludG8gdGhlCitrZXJuZWwsIHRoZSBrZXJuZWwgcGFyYW1ldGVyICJtb25yZWFkZXIubW9uZGNzcz08RENTUyBOQU1FPiIgY2FuIGJlIHNwZWNpZmllZAoraW4gdGhlIHBhcm1maWxlLgorCitUaGUgZGVmYXVsdCBuYW1lIGZvciB0aGUgRENTUyBpcyAiTU9ORENTUyIgaWYgbm9uZSBpcyBzcGVjaWZpZWQuIEluIGNhc2UgdGhhdAordGhlcmUgYXJlIG90aGVyIHVzZXJzIGFscmVhZHkgY29ubmVjdGVkIHRvIHRoZSAqTU9OSVRPUiBzZXJ2aWNlIChlLmcuCitQZXJmb3JtYW5jZSBUb29sa2l0KSwgdGhlIG1vbml0b3IgRENTUyBpcyBhbHJlYWR5IGRlZmluZWQgYW5kIHlvdSBoYXZlIHRvIHVzZQordGhlIHNhbWUgRENTUy4gVGhlIENQIGNvbW1hbmQgUSBNT05JVE9SIChDbGFzcyBFIHByaXZpbGVnZWQpIHNob3dzIHRoZSBuYW1lCitvZiB0aGUgbW9uaXRvciBEQ1NTLCBpZiBhbHJlYWR5IGRlZmluZWQsIGFuZCB0aGUgdXNlcnMgY29ubmVjdGVkIHRvIHRoZQorKk1PTklUT1Igc2VydmljZS4KK1JlZmVyIHRvIHRoZSAiei9WTSBQZXJmb3JtYW5jZSIgYm9vayAoU0MyNC02MTA5LTAwKSBvbiBob3cgdG8gY3JlYXRlIGEgbW9uaXRvcgorRENTUyBpZiB5b3VyIHovVk0gZG9lc24ndCBoYXZlIG9uZSBhbHJlYWR5LCB5b3UgbmVlZCBDbGFzcyBFIHByaXZpbGVnZXMgdG8KK2RlZmluZSBhbmQgc2F2ZSBhIERDU1MuCisKK0V4YW1wbGU6CistLS0tLS0tLQorbW9kcHJvYmUgbW9ucmVhZGVyIG1vbmRjc3M9TVlEQ1NTCisKK1RoaXMgbG9hZHMgdGhlIG1vZHVsZSBhbmQgc2V0cyB0aGUgRENTUyBuYW1lIHRvICJNWURDU1MiLgorCitOT1RFOgorLS0tLS0KK1RoaXMgQVBJIHByb3ZpZGVzIG5vIGludGVyZmFjZSB0byBjb250cm9sIHRoZSAqTU9OSVRPUiBzZXJ2aWNlLCBlLmcuIHNwZWNpZml5Cit3aGljaCBkYXRhIHNob3VsZCBiZSBjb2xsZWN0ZWQuIFRoaXMgY2FuIGJlIGRvbmUgYnkgdGhlIENQIGNvbW1hbmQgTU9OSVRPUgorKENsYXNzIEUgcHJpdmlsZWdlZCksIHNlZSAiQ1AgQ29tbWFuZCBhbmQgVXRpbGl0eSBSZWZlcmVuY2UiLgorCitEZXZpY2Ugbm9kZXMgd2l0aCB1ZGV2OgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FmdGVyIGxvYWRpbmcgdGhlIG1vZHVsZSwgYSBjaGFyIGRldmljZSB3aWxsIGJlIGNyZWF0ZWQgYWxvbmcgd2l0aCB0aGUgZGV2aWNlCitub2RlIC88dWRldiBkaXJlY3Rvcnk+L21vbnJlYWRlci4KKworRGV2aWNlIG5vZGVzIHdpdGhvdXQgdWRldjoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJZiB5b3VyIGRpc3RyaWJ1dGlvbiBkb2VzIG5vdCBzdXBwb3J0IHVkZXYsIGEgZGV2aWNlIG5vZGUgd2lsbCBub3QgYmUgY3JlYXRlZAorYXV0b21hdGljYWxseSBhbmQgeW91IGhhdmUgdG8gY3JlYXRlIGl0IG1hbnVhbGx5IGFmdGVyIGxvYWRpbmcgdGhlIG1vZHVsZS4KK1RoZXJlZm9yZSB5b3UgbmVlZCB0byBrbm93IHRoZSBtYWpvciBhbmQgbWlub3IgbnVtYmVycyBvZiB0aGUgZGV2aWNlLiBUaGVzZQorbnVtYmVycyBjYW4gYmUgZm91bmQgaW4gL3N5cy9jbGFzcy9taXNjL21vbnJlYWRlci9kZXYuCitUeXBpbmcgY2F0IC9zeXMvY2xhc3MvbWlzYy9tb25yZWFkZXIvZGV2IHdpbGwgZ2l2ZSBhbiBvdXRwdXQgb2YgdGhlIGZvcm0KKzxtYWpvcj46PG1pbm9yPi4gVGhlIGRldmljZSBub2RlIGNhbiBiZSBjcmVhdGVkIHZpYSB0aGUgbWtub2QgY29tbWFuZCwgZW50ZXIKK21rbm9kIDxuYW1lPiBjIDxtYWpvcj4gPG1pbm9yPiwgd2hlcmUgPG5hbWU+IGlzIHRoZSBuYW1lIG9mIHRoZSBkZXZpY2Ugbm9kZQordG8gYmUgY3JlYXRlZC4KKworRXhhbXBsZToKKy0tLS0tLS0tCisjIG1vZHByb2JlIG1vbnJlYWRlcgorIyBjYXQgL3N5cy9jbGFzcy9taXNjL21vbnJlYWRlci9kZXYKKzEwOjYzCisjIG1rbm9kIC9kZXYvbW9ucmVhZGVyIGMgMTAgNjMKKworVGhpcyBsb2FkcyB0aGUgbW9kdWxlIHdpdGggdGhlIGRlZmF1bHQgbW9uaXRvciBEQ1NTIChNT05EQ1NTKSBhbmQgY3JlYXRlcyBhCitkZXZpY2Ugbm9kZS4KKworRmlsZSBvcGVyYXRpb25zOgorLS0tLS0tLS0tLS0tLS0tLQorVGhlIGZvbGxvd2luZyBmaWxlIG9wZXJhdGlvbnMgYXJlIHN1cHBvcnRlZDogb3BlbiwgcmVsZWFzZSwgcmVhZCwgcG9sbC4KK1RoZXJlIGFyZSB0d28gYWx0ZXJuYXRpdmUgbWV0aG9kcyBmb3IgcmVhZGluZzogZWl0aGVyIG5vbi1ibG9ja2luZyByZWFkIGluCitjb25qdW5jdGlvbiB3aXRoIHBvbGxpbmcsIG9yIGJsb2NraW5nIHJlYWQgd2l0aG91dCBwb2xsaW5nLiBJT0NUTHMgYXJlIG5vdAorc3VwcG9ydGVkLgorCitSZWFkOgorLS0tLS0KK1JlYWRpbmcgZnJvbSB0aGUgZGV2aWNlIHByb3ZpZGVzIGEgMTIgQnl0ZSBtb25pdG9yIGNvbnRyb2wgZWxlbWVudCAoTUNFKSwKK2ZvbGxvd2VkIGJ5IGEgc2V0IG9mIG9uZSBvciBtb3JlIGNvbnRpZ3VvdXMgbW9uaXRvciByZWNvcmRzIChzaW1pbGFyIHRvIHRoZQorb3V0cHV0IG9mIHRoZSBDTVMgdXRpbGl0eSBNT05XUklURSB3aXRob3V0IHRoZSA0SyBjb250cm9sIGJsb2NrcykuIFRoZSBNQ0UKK2NvbnRhaW5zIGluZm9ybWF0aW9uIG9uIHRoZSB0eXBlIG9mIHRoZSBmb2xsb3dpbmcgcmVjb3JkIHNldCAoc2FtcGxlL2V2ZW50CitkYXRhKSwgdGhlIG1vbml0b3IgZG9tYWlucyBjb250YWluZWQgd2l0aGluIGl0IGFuZCB0aGUgc3RhcnQgYW5kIGVuZCBhZGRyZXNzCitvZiB0aGUgcmVjb3JkIHNldCBpbiB0aGUgbW9uaXRvciBEQ1NTLiBUaGUgc3RhcnQgYW5kIGVuZCBhZGRyZXNzIGNhbiBiZSB1c2VkCit0byBkZXRlcm1pbmUgdGhlIHNpemUgb2YgdGhlIHJlY29yZCBzZXQsIHRoZSBlbmQgYWRkcmVzcyBpcyB0aGUgYWRkcmVzcyBvZiB0aGUKK2xhc3QgYnl0ZSBvZiBkYXRhLiBUaGUgc3RhcnQgYWRkcmVzcyBpcyBuZWVkZWQgdG8gaGFuZGxlICJlbmQtb2YtZnJhbWUiIHJlY29yZHMKK2NvcnJlY3RseSAoZG9tYWluIDEsIHJlY29yZCAxMyksIGkuZS4gaXQgY2FuIGJlIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSByZWNvcmQKK3N0YXJ0IG9mZnNldCByZWxhdGl2ZSB0byBhIDRLIHBhZ2UgKGZyYW1lKSBib3VuZGFyeS4KKworU2VlICJBcHBlbmRpeCBBOiAqTU9OSVRPUiIgaW4gdGhlICJ6L1ZNIFBlcmZvcm1hbmNlIiBkb2N1bWVudCBmb3IgYSBkZXNjcmlwdGlvbgorb2YgdGhlIG1vbml0b3IgY29udHJvbCBlbGVtZW50IGxheW91dC4gVGhlIGxheW91dCBvZiB0aGUgbW9uaXRvciByZWNvcmRzIGNhbgorYmUgZm91bmQgaGVyZSAoei9WTSA1LjEpOiBodHRwOi8vd3d3LnZtLmlibS5jb20vcHVicy9tb241MTAvaW5kZXguaHRtbAorCitUaGUgbGF5b3V0IG9mIHRoZSBkYXRhIHN0cmVhbSBwcm92aWRlZCBieSB0aGUgbW9ucmVhZGVyIGRldmljZSBpcyBhcyBmb2xsb3dzOgorLi4uCis8MCBieXRlIHJlYWQ+Cis8Zmlyc3QgTUNFPiAgICAgICAgICAgICAgXAorPGZpcnN0IHNldCBvZiByZWNvcmRzPiAgICB8CisuLi4gICAgICAgICAgICAgICAgICAgICAgIHwtIGRhdGEgc2V0Cis8bGFzdCBNQ0U+ICAgICAgICAgICAgICAgIHwKKzxsYXN0IHNldCBvZiByZWNvcmRzPiAgICAvCis8MCBieXRlIHJlYWQ+CisuLi4KKworVGhlcmUgbWF5IGJlIG1vcmUgdGhhbiBvbmUgY29tYmluYXRpb24gb2YgTUNFIGFuZCBjb3JyZXNwb25kaW5nIHJlY29yZCBzZXQKK3dpdGhpbiBvbmUgZGF0YSBzZXQgYW5kIHRoZSBlbmQgb2YgZWFjaCBkYXRhIHNldCBpcyBpbmRpY2F0ZWQgYnkgYSBzdWNjZXNzZnVsCityZWFkIHdpdGggYSByZXR1cm4gdmFsdWUgb2YgMCAoMCBieXRlIHJlYWQpLgorQW55IHJlY2VpdmVkIGRhdGEgbXVzdCBiZSBjb25zaWRlcmVkIGludmFsaWQgdW50aWwgYSBjb21wbGV0ZSBzZXQgd2FzCityZWFkIHN1Y2Nlc3NmdWxseSwgaW5jbHVkaW5nIHRoZSBjbG9zaW5nIDAgYnl0ZSByZWFkLiBUaGVyZWZvcmUgeW91IHNob3VsZAorYWx3YXlzIHJlYWQgdGhlIGNvbXBsZXRlIHNldCBpbnRvIGEgYnVmZmVyIGJlZm9yZSBwcm9jZXNzaW5nIHRoZSBkYXRhLgorCitUaGUgbWF4aW11bSBzaXplIG9mIGEgZGF0YSBzZXQgY2FuIGJlIGFzIGxhcmdlIGFzIHRoZSBzaXplIG9mIHRoZQorbW9uaXRvciBEQ1NTLCBzbyBkZXNpZ24gdGhlIGJ1ZmZlciBhZGVxdWF0ZWx5IG9yIHVzZSBkeW5hbWljIG1lbW9yeSBhbGxvY2F0aW9uLgorVGhlIHNpemUgb2YgdGhlIG1vbml0b3IgRENTUyB3aWxsIGJlIHByaW50ZWQgaW50byBzeXNsb2cgYWZ0ZXIgbG9hZGluZyB0aGUKK21vZHVsZS4gWW91IGNhbiBhbHNvIHVzZSB0aGUgKENsYXNzIEUgcHJpdmlsZWdlZCkgQ1AgY29tbWFuZCBRIE5TUyBNQVAgdG8KK2xpc3QgYWxsIGF2YWlsYWJsZSBzZWdtZW50cyBhbmQgaW5mb3JtYXRpb24gYWJvdXQgdGhlbS4KKworQXMgd2l0aCBtb3N0IGNoYXIgZGV2aWNlcywgZXJyb3IgY29uZGl0aW9ucyBhcmUgaW5kaWNhdGVkIGJ5IHJldHVybmluZyBhCituZWdhdGl2ZSB2YWx1ZSBmb3IgdGhlIG51bWJlciBvZiBieXRlcyByZWFkLiBJbiB0aGlzIGNhc2UsIHRoZSBlcnJubyB2YXJpYWJsZQoraW5kaWNhdGVzIHRoZSBlcnJvciBjb25kaXRpb246CisKK0VJTzogcmVwbHkgZmFpbGVkLCByZWFkIGRhdGEgaXMgaW52YWxpZCBhbmQgdGhlIGFwcGxpY2F0aW9uCisgICAgIHNob3VsZCBkaXNjYXJkIHRoZSBkYXRhIHJlYWQgc2luY2UgdGhlIGxhc3Qgc3VjY2Vzc2Z1bCByZWFkIHdpdGggMCBzaXplLgorRUZBVUxUOiBjb3B5X3RvX3VzZXIgZmFpbGVkLCByZWFkIGRhdGEgaXMgaW52YWxpZCBhbmQgdGhlIGFwcGxpY2F0aW9uIHNob3VsZAorICAgICAgICBkaXNjYXJkIHRoZSBkYXRhIHJlYWQgc2luY2UgdGhlIGxhc3Qgc3VjY2Vzc2Z1bCByZWFkIHdpdGggMCBzaXplLgorRUFHQUlOOiBvY2N1cnMgb24gYSBub24tYmxvY2tpbmcgcmVhZCBpZiB0aGVyZSBpcyBubyBkYXRhIGF2YWlsYWJsZSBhdCB0aGUKKyAgICAgICAgbW9tZW50LiBUaGVyZSBpcyBubyBkYXRhIG1pc3Npbmcgb3IgY29ycnVwdGVkLCBqdXN0IHRyeSBhZ2FpbiBvciByYXRoZXIKKyAgICAgICAgdXNlIHBvbGxpbmcgZm9yIG5vbi1ibG9ja2luZyByZWFkcy4KK0VPVkVSRkxPVzogbWVzc2FnZSBsaW1pdCByZWFjaGVkLCB0aGUgZGF0YSByZWFkIHNpbmNlIHRoZSBsYXN0IHN1Y2Nlc3NmdWwKKyAgICAgICAgICAgcmVhZCB3aXRoIDAgc2l6ZSBpcyB2YWxpZCBidXQgc3Vic2VxdWVudCByZWNvcmRzIG1heSBiZSBtaXNzaW5nLgorCitJbiB0aGUgbGFzdCBjYXNlIChFT1ZFUkZMT1cpIHRoZXJlIG1heSBiZSBtaXNzaW5nIGRhdGEsIGluIHRoZSBmaXJzdCB0d28gY2FzZXMKKyhFSU8sIEVGQVVMVCkgdGhlcmUgd2lsbCBiZSBtaXNzaW5nIGRhdGEuIEl0J3MgdXAgdG8gdGhlIGFwcGxpY2F0aW9uIGlmIGl0IHdpbGwKK2NvbnRpbnVlIHJlYWRpbmcgc3Vic2VxdWVudCBkYXRhIG9yIHJhdGhlciBleGl0LgorCitPcGVuOgorLS0tLS0KK09ubHkgb25lIHVzZXIgaXMgYWxsb3dlZCB0byBvcGVuIHRoZSBjaGFyIGRldmljZS4gSWYgaXQgaXMgYWxyZWFkeSBpbiB1c2UsIHRoZQorb3BlbiBmdW5jdGlvbiB3aWxsIGZhaWwgKHJldHVybiBhIG5lZ2F0aXZlIHZhbHVlKSBhbmQgc2V0IGVycm5vIHRvIEVCVVNZLgorVGhlIG9wZW4gZnVuY3Rpb24gbWF5IGFsc28gZmFpbCBpZiBhbiBJVUNWIGNvbm5lY3Rpb24gdG8gdGhlICpNT05JVE9SIHNlcnZpY2UKK2Nhbm5vdCBiZSBlc3RhYmxpc2hlZC4gSW4gdGhpcyBjYXNlIGVycm5vIHdpbGwgYmUgc2V0IHRvIEVJTyBhbmQgYW4gZXJyb3IKK21lc3NhZ2Ugd2l0aCBhbiBJUFVTRVIgU0VWRVIgY29kZSB3aWxsIGJlIHByaW50ZWQgaW50byBzeXNsb2cuIFRoZSBJUFVTRVIgU0VWRVIKK2NvZGVzIGFyZSBkZXNjcmliZWQgaW4gdGhlICJ6L1ZNIFBlcmZvcm1hbmNlIiBib29rLCBBcHBlbmRpeCBBLgorCitOT1RFOgorLS0tLS0KK0FzIHNvb24gYXMgdGhlIGRldmljZSBpcyBvcGVuZWQsIGluY29taW5nIG1lc3NhZ2VzIHdpbGwgYmUgYWNjZXB0ZWQgYW5kIHRoZXkKK3dpbGwgYWNjb3VudCBmb3IgdGhlIG1lc3NhZ2UgbGltaXQsIGkuZS4gb3BlbmluZyB0aGUgZGV2aWNlIHdpdGhvdXQgcmVhZGluZworZnJvbSBpdCB3aWxsIHByb3Zva2UgdGhlICJtZXNzYWdlIGxpbWl0IHJlYWNoZWQiIGVycm9yIChFT1ZFUkZMT1cgZXJyb3IgY29kZSkKK2V2ZW50dWFsbHkuCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vczM5MC9zMzkwZGJmLnR4dCBiL0RvY3VtZW50YXRpb24vczM5MC9zMzkwZGJmLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDFjZDkzCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9zMzkwL3MzOTBkYmYudHh0CkBAIC0wLDAgKzEsNjE1IEBACitTMzkwIERlYnVnIEZlYXR1cmUKKz09PT09PT09PT09PT09PT09PQorCitmaWxlczogYXJjaC9zMzkwL2tlcm5lbC9kZWJ1Zy5jCisgICAgICAgaW5jbHVkZS9hc20tczM5MC9kZWJ1Zy5oCisKK0Rlc2NyaXB0aW9uOgorLS0tLS0tLS0tLS0tCitUaGUgZ29hbCBvZiB0aGlzIGZlYXR1cmUgaXMgdG8gcHJvdmlkZSBhIGtlcm5lbCBkZWJ1ZyBsb2dnaW5nIEFQSSAKK3doZXJlIGxvZyByZWNvcmRzIGNhbiBiZSBzdG9yZWQgZWZmaWNpZW50bHkgaW4gbWVtb3J5LCB3aGVyZSBlYWNoIGNvbXBvbmVudCAKKyhlLmcuIGRldmljZSBkcml2ZXJzKSBjYW4gaGF2ZSBvbmUgc2VwYXJhdGUgZGVidWcgbG9nLgorT25lIHB1cnBvc2Ugb2YgdGhpcyBpcyB0byBpbnNwZWN0IHRoZSBkZWJ1ZyBsb2dzIGFmdGVyIGEgcHJvZHVjdGlvbiBzeXN0ZW0gY3Jhc2gKK2luIG9yZGVyIHRvIGFuYWx5emUgdGhlIHJlYXNvbiBmb3IgdGhlIGNyYXNoLgorSWYgdGhlIHN5c3RlbSBzdGlsbCBydW5zIGJ1dCBvbmx5IGEgc3ViY29tcG9uZW50IHdoaWNoIHVzZXMgZGJmIGZhaWxlcywKK2l0IGlzIHBvc3NpYmxlIHRvIGxvb2sgYXQgdGhlIGRlYnVnIGxvZ3Mgb24gYSBsaXZlIHN5c3RlbSB2aWEgdGhlIExpbnV4IHByb2MKK2ZpbGVzeXN0ZW0uCitUaGUgZGVidWcgZmVhdHVyZSBtYXkgYWxzbyB2ZXJ5IHVzZWZ1bCBmb3Iga2VybmVsIGFuZCBkcml2ZXIgZGV2ZWxvcG1lbnQuCisKK0Rlc2lnbjoKKy0tLS0tLS0KK0tlcm5lbCBjb21wb25lbnRzIChlLmcuIGRldmljZSBkcml2ZXJzKSBjYW4gcmVnaXN0ZXIgdGhlbXNlbHZlcyBhdCB0aGUgZGVidWcgCitmZWF0dXJlIHdpdGggdGhlIGZ1bmN0aW9uIGNhbGwgZGVidWdfcmVnaXN0ZXIoKS4gVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyBhIAorZGVidWcgbG9nIGZvciB0aGUgY2FsbGVyLiBGb3IgZWFjaCBkZWJ1ZyBsb2cgZXhpc3RzIGEgbnVtYmVyIG9mIGRlYnVnIGFyZWFzIAord2hlcmUgZXhhY3RseSBvbmUgaXMgYWN0aXZlIGF0IG9uZSB0aW1lLiAgRWFjaCBkZWJ1ZyBhcmVhIGNvbnNpc3RzIG9mIGNvbnRpZ3VvdXMKK3BhZ2VzIGluIG1lbW9yeS4gSW4gdGhlIGRlYnVnIGFyZWFzIHRoZXJlIGFyZSBzdG9yZWQgZGVidWcgZW50cmllcyAobG9nIHJlY29yZHMpCit3aGljaCBhcmUgd3JpdHRlbiBieSBldmVudC0gYW5kIGV4Y2VwdGlvbi1jYWxscy4gCisKK0FuIGV2ZW50LWNhbGwgd3JpdGVzIHRoZSBzcGVjaWZpZWQgZGVidWcgZW50cnkgdG8gdGhlIGFjdGl2ZSBkZWJ1ZworYXJlYSBhbmQgdXBkYXRlcyB0aGUgbG9nIHBvaW50ZXIgZm9yIHRoZSBhY3RpdmUgYXJlYS4gSWYgdGhlIGVuZCAKK29mIHRoZSBhY3RpdmUgZGVidWcgYXJlYSBpcyByZWFjaGVkLCBhIHdyYXAgYXJvdW5kIGlzIGRvbmUgKHJpbmcgYnVmZmVyKSAKK2FuZCB0aGUgbmV4dCBkZWJ1ZyBlbnRyeSB3aWxsIGJlIHdyaXR0ZW4gYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgYWN0aXZlIAorZGVidWcgYXJlYS4KKworQW4gZXhjZXB0aW9uLWNhbGwgd3JpdGVzIHRoZSBzcGVjaWZpZWQgZGVidWcgZW50cnkgdG8gdGhlIGxvZyBhbmQKK3N3aXRjaGVzIHRvIHRoZSBuZXh0IGRlYnVnIGFyZWEuIFRoaXMgaXMgZG9uZSBpbiBvcmRlciB0byBiZSBzdXJlCit0aGF0IHRoZSByZWNvcmRzIHdoaWNoIGRlc2NyaWJlIHRoZSBvcmlnaW4gb2YgdGhlIGV4Y2VwdGlvbiBhcmUgbm90CitvdmVyd3JpdHRlbiB3aGVuIGEgd3JhcCBhcm91bmQgZm9yIHRoZSBjdXJyZW50IGFyZWEgb2NjdXJzLgorCitUaGUgZGVidWcgYXJlYXMgaXRzZWx2ZSBhcmUgYWxzbyBvcmRlcmVkIGluIGZvcm0gb2YgYSByaW5nIGJ1ZmZlci4gCitXaGVuIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24gaW4gdGhlIGxhc3QgZGVidWcgYXJlYSwgdGhlIGZvbGxvd2luZyBkZWJ1ZyAKK2VudHJpZXMgYXJlIHRoZW4gd3JpdHRlbiBhZ2FpbiBpbiB0aGUgdmVyeSBmaXJzdCBhcmVhLgorCitUaGVyZSBhcmUgdGhyZWUgdmVyc2lvbnMgZm9yIHRoZSBldmVudC0gYW5kIGV4Y2VwdGlvbi1jYWxsczogT25lIGZvcgorbG9nZ2luZyByYXcgZGF0YSwgb25lIGZvciB0ZXh0IGFuZCBvbmUgZm9yIG51bWJlcnMuCisKK0VhY2ggZGVidWcgZW50cnkgY29udGFpbnMgdGhlIGZvbGxvd2luZyBkYXRhOgorCistIFRpbWVzdGFtcAorLSBDcHUtTnVtYmVyIG9mIGNhbGxpbmcgdGFzaworLSBMZXZlbCBvZiBkZWJ1ZyBlbnRyeSAoMC4uLjYpCistIFJldHVybiBBZGRyZXNzIHRvIGNhbGxlcgorLSBGbGFnLCBpZiBlbnRyeSBpcyBhbiBleGNlcHRpb24gb3Igbm90CisKK1RoZSBkZWJ1ZyBsb2dzIGNhbiBiZSBpbnNwZWN0ZWQgaW4gYSBsaXZlIHN5c3RlbSB0aHJvdWdoIGVudHJpZXMgaW4KK3RoZSBwcm9jLWZpbGVzeXN0ZW0uIFVuZGVyIHRoZSBwYXRoIC9wcm9jL3MzOTBkYmYgdGhlcmUgaXMgCithIGRpcmVjdG9yeSBmb3IgZWFjaCByZWdpc3RlcmVkIGNvbXBvbmVudCwgd2hpY2ggaXMgbmFtZWQgbGlrZSB0aGUKK2NvcnJlc3BvbmRpbmcgY29tcG9uZW50LgorCitUaGUgY29udGVudCBvZiB0aGUgZGlyZWN0b3JpZXMgYXJlIGZpbGVzIHdoaWNoIHJlcHJlc2VudCBkaWZmZXJlbnQgdmlld3MKK3RvIHRoZSBkZWJ1ZyBsb2cuIEVhY2ggY29tcG9uZW50IGNhbiBkZWNpZGUgd2hpY2ggdmlld3Mgc2hvdWxkIGJlCit1c2VkIHRocm91Z2ggcmVnaXN0ZXJpbmcgdGhlbSB3aXRoIHRoZSBmdW5jdGlvbiBkZWJ1Z19yZWdpc3Rlcl92aWV3KCkuCitQcmVkZWZpbmVkIHZpZXdzIGZvciBoZXgvYXNjaWksIHNwcmludGYgYW5kIHJhdyBiaW5hcnkgZGF0YSBhcmUgcHJvdmlkZWQuCitJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGRlZmluZSBvdGhlciB2aWV3cy4gVGhlIGNvbnRlbnQgb2YKK2EgdmlldyBjYW4gYmUgaW5zcGVjdGVkIHNpbXBseSBieSByZWFkaW5nIHRoZSBjb3JyZXNwb25kaW5nIHByb2MgZmlsZS4KKworQWxsIGRlYnVnIGxvZ3MgaGF2ZSBhbiBhbiBhY3R1YWwgZGVidWcgbGV2ZWwgKHJhbmdlIGZyb20gMCB0byA2KS4KK1RoZSBkZWZhdWx0IGxldmVsIGlzIDMuIEV2ZW50IGFuZCBFeGNlcHRpb24gZnVuY3Rpb25zIGhhdmUgYSAnbGV2ZWwnCitwYXJhbWV0ZXIuIE9ubHkgZGVidWcgZW50cmllcyB3aXRoIGEgbGV2ZWwgdGhhdCBpcyBsb3dlciBvciBlcXVhbAordGhhbiB0aGUgYWN0dWFsIGxldmVsIGFyZSB3cml0dGVuIHRvIHRoZSBsb2cuIFRoaXMgbWVhbnMsIHdoZW4KK3dyaXRpbmcgZXZlbnRzLCBoaWdoIHByaW9yaXR5IGxvZyBlbnRyaWVzIHNob3VsZCBoYXZlIGEgbG93IGxldmVsCit2YWx1ZSB3aGVyZWFzIGxvdyBwcmlvcml0eSBlbnRyaWVzIHNob3VsZCBoYXZlIGEgaGlnaCBvbmUuCitUaGUgYWN0dWFsIGRlYnVnIGxldmVsIGNhbiBiZSBjaGFuZ2VkIHdpdGggdGhlIGhlbHAgb2YgdGhlIHByb2MtZmlsZXN5c3RlbSAKK3Rocm91Z2ggd3JpdGluZyBhIG51bWJlciBzdHJpbmcgIngiIHRvIHRoZSAnbGV2ZWwnIHByb2MgZmlsZSB3aGljaCBpcworcHJvdmlkZWQgZm9yIGV2ZXJ5IGRlYnVnIGxvZy4gRGVidWdnaW5nIGNhbiBiZSBzd2l0Y2hlZCBvZmYgY29tcGxldGVseQorYnkgdXNpbmcgIi0iIG9uIHRoZSAnbGV2ZWwnIHByb2MgZmlsZS4KKworRXhhbXBsZToKKworPiBlY2hvICItIiA+IC9wcm9jL3MzOTBkYmYvZGFzZC9sZXZlbAorCitJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGRlYWN0aXZhdGUgdGhlIGRlYnVnIGZlYXR1cmUgZ2xvYmFsbHkgZm9yIGV2ZXJ5CitkZWJ1ZyBsb2cuIFlvdSBjYW4gY2hhbmdlIHRoZSBiZWhhdmlvciB1c2luZyAgMiBzeXNjdGwgcGFyYW1ldGVycyBpbgorL3Byb2Mvc3lzL3MzOTBkYmY6CitUaGVyZSBhcmUgY3VycmVudGx5IDIgcG9zc2libGUgdHJpZ2dlcnMsIHdoaWNoIHN0b3AgdGhlICBkZWJ1ZyBmZWF0dXJlCitnbG9iYWxseS4gVGhlIGZpcnN0IHBvc3NiaWxpdHkgaXMgdG8gdXNlIHRoZSAiZGVidWdfYWN0aXZlIiBzeXNjdGwuIElmCitzZXQgdG8gMSB0aGUgZGVidWcgZmVhdHVyZSBpcyBydW5uaW5nLiBJZiAiZGVidWdfYWN0aXZlIiBpcyBzZXQgdG8gMCB0aGUKK2RlYnVnIGZlYXR1cmUgaXMgdHVybmVkIG9mZi4KK1RoZSBzZWNvbmQgdHJpZ2dlciB3aGljaCBzdG9wcyB0aGUgZGVidWcgZmVhdHVyZSBpcyBhbiBrZXJuZWwgb29wcy4KK1RoYXQgcHJldmVudHMgdGhlIGRlYnVnIGZlYXR1cmUgZnJvbSBvdmVyd3JpdGluZyBkZWJ1ZyBpbmZvcm1hdGlvbiB0aGF0CitoYXBwZW5lZCBiZWZvcmUgdGhlIG9vcHMuIEFmdGVyIGFuIG9vcHMgeW91IGNhbiByZWFjdGl2YXRlIHRoZSBkZWJ1ZyBmZWF0dXJlCitieSBwaXBpbmcgMSB0byAvcHJvYy9zeXMvczM5MGRiZi9kZWJ1Z19hY3RpdmUuIE5ldmVydGhlbGVzcywgaXRzIG5vdAorc3VnZ2VzdGVkIHRvIHVzZSBhbiBvb3BzZWQga2VybmVsIGluIGFuIHByb2R1Y3Rpb24gZW52aXJvbm1lbnQuCitJZiB5b3Ugd2FudCB0byBkaXNhbGxvdyB0aGUgZGVhY3RpdmF0aW9uIG9mIHRoZSBkZWJ1ZyBmZWF0dXJlLCB5b3UgY2FuIHVzZQordGhlICJkZWJ1Z19zdG9wcGFibGUiIHN5c2N0bC4gSWYgeW91IHNldCAiZGVidWdfc3RvcHBhYmxlIiB0byAwIHRoZSBkZWJ1ZworZmVhdHVyZSBjYW5ub3QgYmUgc3RvcHBlZC4gSWYgdGhlIGRlYnVnIGZlYXR1cmUgaXMgYWxyZWFkeSBzdG9wcGVkLCBpdAord2lsbCBzdGF5IGRlYWN0aXZhdGVkLgorCitLZXJuZWwgSW50ZXJmYWNlczoKKy0tLS0tLS0tLS0tLS0tLS0tLQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkZWJ1Z19pbmZvX3QgKmRlYnVnX3JlZ2lzdGVyKGNoYXIgKm5hbWUsIGludCBwYWdlc19pbmRleCwgaW50IG5yX2FyZWFzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYnVmX3NpemUpOworCitQYXJhbWV0ZXI6ICAgIG5hbWU6ICAgICAgICBOYW1lIG9mIGRlYnVnIGxvZyAoZS5nLiB1c2VkIGZvciBwcm9jIGVudHJ5KSAKKyAgICAgICAgICAgICAgcGFnZXNfaW5kZXg6IDJecGFnZXNfaW5kZXggcGFnZXMgd2lsbCBiZSBhbGxvY2F0ZWQgcGVyIGFyZWEKKyAgICAgICAgICAgICAgbnJfYXJlYXM6ICAgIG51bWJlciBvZiBkZWJ1ZyBhcmVhcworICAgICAgICAgICAgICBidWZfc2l6ZTogICAgc2l6ZSBvZiBkYXRhIGFyZWEgaW4gZWFjaCBkZWJ1ZyBlbnRyeQorCitSZXR1cm4gVmFsdWU6IEhhbmRsZSBmb3IgZ2VuZXJhdGVkIGRlYnVnIGFyZWEgICAKKyAgICAgICAgICAgICAgTlVMTCBpZiByZWdpc3RlciBmYWlsZWQgCisKK0Rlc2NyaXB0aW9uOiAgQWxsb2NhdGVzIG1lbW9yeSBmb3IgYSBkZWJ1ZyBsb2cgICAgIAorICAgICAgICAgICAgICBNdXN0IG5vdCBiZSBjYWxsZWQgd2l0aGluIGFuIGludGVycnVwdCBoYW5kbGVyIAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ZvaWQgZGVidWdfdW5yZWdpc3RlciAoZGVidWdfaW5mb190ICogaWQpOworCitQYXJhbWV0ZXI6ICAgICBpZDogICBoYW5kbGUgZm9yIGRlYnVnIGxvZyAgCisKK1JldHVybiBWYWx1ZTogIG5vbmUgCisKK0Rlc2NyaXB0aW9uOiAgIGZyZWVzIG1lbW9yeSBmb3IgYSBkZWJ1ZyBsb2cgICAgIAorICAgICAgICAgICAgICAgTXVzdCBub3QgYmUgY2FsbGVkIHdpdGhpbiBhbiBpbnRlcnJ1cHQgaGFuZGxlciAKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit2b2lkIGRlYnVnX3NldF9sZXZlbCAoZGVidWdfaW5mb190ICogaWQsIGludCBuZXdfbGV2ZWwpOworCitQYXJhbWV0ZXI6ICAgICBpZDogICAgICAgIGhhbmRsZSBmb3IgZGVidWcgbG9nICAKKyAgICAgICAgICAgICAgIG5ld19sZXZlbDogbmV3IGRlYnVnIGxldmVsIAorCitSZXR1cm4gVmFsdWU6ICBub25lIAorCitEZXNjcmlwdGlvbjogICBTZXRzIG5ldyBhY3R1YWwgZGVidWcgbGV2ZWwgaWYgbmV3X2xldmVsIGlzIHZhbGlkLiAKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisrdm9pZCBkZWJ1Z19zdG9wX2FsbCh2b2lkKTsKKworUGFyYW1ldGVyOiAgICAgbm9uZQorCitSZXR1cm4gVmFsdWU6ICBub25lCisKK0Rlc2NyaXB0aW9uOiAgIHN0b3BzIHRoZSBkZWJ1ZyBmZWF0dXJlIGlmIHN0b3BwaW5nIGlzIGFsbG93ZWQuIEN1cnJlbnRseQorICAgICAgICAgICAgICAgdXNlZCBpbiBjYXNlIG9mIGEga2VybmVsIG9vcHMuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZGVidWdfZW50cnlfdCogZGVidWdfZXZlbnQgKGRlYnVnX2luZm9fdCogaWQsIGludCBsZXZlbCwgdm9pZCogZGF0YSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxlbmd0aCk7CisKK1BhcmFtZXRlcjogICAgIGlkOiAgICAgaGFuZGxlIGZvciBkZWJ1ZyBsb2cgIAorICAgICAgICAgICAgICAgbGV2ZWw6ICBkZWJ1ZyBsZXZlbCAgICAgICAgICAgCisgICAgICAgICAgICAgICBkYXRhOiAgIHBvaW50ZXIgdG8gZGF0YSBmb3IgZGVidWcgZW50cnkgIAorICAgICAgICAgICAgICAgbGVuZ3RoOiBsZW5ndGggb2YgZGF0YSBpbiBieXRlcyAgICAgICAKKworUmV0dXJuIFZhbHVlOiAgQWRkcmVzcyBvZiB3cml0dGVuIGRlYnVnIGVudHJ5IAorCitEZXNjcmlwdGlvbjogICB3cml0ZXMgZGVidWcgZW50cnkgdG8gYWN0aXZlIGRlYnVnIGFyZWEgKGlmIGxldmVsIDw9IGFjdHVhbCAKKyAgICAgICAgICAgICAgIGRlYnVnIGxldmVsKSAgICAKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkZWJ1Z19lbnRyeV90KiBkZWJ1Z19pbnRfZXZlbnQgKGRlYnVnX2luZm9fdCAqIGlkLCBpbnQgbGV2ZWwsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZGF0YSk7CitkZWJ1Z19lbnRyeV90KiBkZWJ1Z19sb25nX2V2ZW50KGRlYnVnX2luZm9fdCAqIGlkLCBpbnQgbGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZGF0YSk7CisKK1BhcmFtZXRlcjogICAgIGlkOiAgICAgaGFuZGxlIGZvciBkZWJ1ZyBsb2cgIAorICAgICAgICAgICAgICAgbGV2ZWw6ICBkZWJ1ZyBsZXZlbCAgICAgICAgICAgCisgICAgICAgICAgICAgICBkYXRhOiAgIGludGVnZXIgdmFsdWUgZm9yIGRlYnVnIGVudHJ5ICAgICAgICAgICAKKworUmV0dXJuIFZhbHVlOiAgQWRkcmVzcyBvZiB3cml0dGVuIGRlYnVnIGVudHJ5IAorCitEZXNjcmlwdGlvbjogICB3cml0ZXMgZGVidWcgZW50cnkgdG8gYWN0aXZlIGRlYnVnIGFyZWEgKGlmIGxldmVsIDw9IGFjdHVhbCAKKyAgICAgICAgICAgICAgIGRlYnVnIGxldmVsKSAgICAKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkZWJ1Z19lbnRyeV90KiBkZWJ1Z190ZXh0X2V2ZW50IChkZWJ1Z19pbmZvX3QgKiBpZCwgaW50IGxldmVsLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGRhdGEpOworCitQYXJhbWV0ZXI6ICAgICBpZDogICAgIGhhbmRsZSBmb3IgZGVidWcgbG9nICAKKyAgICAgICAgICAgICAgIGxldmVsOiAgZGVidWcgbGV2ZWwgICAgICAgICAgIAorICAgICAgICAgICAgICAgZGF0YTogICBzdHJpbmcgZm9yIGRlYnVnIGVudHJ5ICAKKworUmV0dXJuIFZhbHVlOiAgQWRkcmVzcyBvZiB3cml0dGVuIGRlYnVnIGVudHJ5IAorCitEZXNjcmlwdGlvbjogICB3cml0ZXMgZGVidWcgZW50cnkgaW4gYXNjaWkgZm9ybWF0IHRvIGFjdGl2ZSBkZWJ1ZyBhcmVhIAorICAgICAgICAgICAgICAgKGlmIGxldmVsIDw9IGFjdHVhbCBkZWJ1ZyBsZXZlbCkgICAgIAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2RlYnVnX2VudHJ5X3QqIGRlYnVnX3NwcmludGZfZXZlbnQgKGRlYnVnX2luZm9fdCAqIGlkLCBpbnQgbGV2ZWwsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogc3RyaW5nLC4uLik7CisKK1BhcmFtZXRlcjogICAgIGlkOiAgICBoYW5kbGUgZm9yIGRlYnVnIGxvZyAKKyAgICAgICAgICAgICAgIGxldmVsOiBkZWJ1ZyBsZXZlbAorICAgICAgICAgICAgICAgc3RyaW5nOiBmb3JtYXQgc3RyaW5nIGZvciBkZWJ1ZyBlbnRyeSAKKyAgICAgICAgICAgICAgIC4uLjogdmFyYXJncyB1c2VkIGFzIGluIHNwcmludGYoKQorCitSZXR1cm4gVmFsdWU6ICBBZGRyZXNzIG9mIHdyaXR0ZW4gZGVidWcgZW50cnkKKworRGVzY3JpcHRpb246ICAgd3JpdGVzIGRlYnVnIGVudHJ5IHdpdGggZm9ybWF0IHN0cmluZyBhbmQgdmFyYXJncyAobG9uZ3MpIHRvIAorICAgICAgICAgICAgICAgYWN0aXZlIGRlYnVnIGFyZWEgKGlmIGxldmVsICQ8PSQgYWN0dWFsIGRlYnVnIGxldmVsKS4gCisgICAgICAgICAgICAgICBmbG9hdHMgYW5kIGxvbmcgbG9uZyBkYXRhdHlwZXMgY2Fubm90IGJlIHVzZWQgYXMgdmFyYXJncy4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2RlYnVnX2VudHJ5X3QqIGRlYnVnX2V4Y2VwdGlvbiAoZGVidWdfaW5mb190KiBpZCwgaW50IGxldmVsLCB2b2lkKiBkYXRhLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxlbmd0aCk7CisKK1BhcmFtZXRlcjogICAgIGlkOiAgICAgaGFuZGxlIGZvciBkZWJ1ZyBsb2cgIAorICAgICAgICAgICAgICAgbGV2ZWw6ICBkZWJ1ZyBsZXZlbCAgICAgICAgICAgCisgICAgICAgICAgICAgICBkYXRhOiAgIHBvaW50ZXIgdG8gZGF0YSBmb3IgZGVidWcgZW50cnkgIAorICAgICAgICAgICAgICAgbGVuZ3RoOiBsZW5ndGggb2YgZGF0YSBpbiBieXRlcyAgICAgICAKKworUmV0dXJuIFZhbHVlOiAgQWRkcmVzcyBvZiB3cml0dGVuIGRlYnVnIGVudHJ5IAorCitEZXNjcmlwdGlvbjogICB3cml0ZXMgZGVidWcgZW50cnkgdG8gYWN0aXZlIGRlYnVnIGFyZWEgKGlmIGxldmVsIDw9IGFjdHVhbCAKKyAgICAgICAgICAgICAgIGRlYnVnIGxldmVsKSBhbmQgc3dpdGNoZXMgdG8gbmV4dCBkZWJ1ZyBhcmVhICAKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkZWJ1Z19lbnRyeV90KiBkZWJ1Z19pbnRfZXhjZXB0aW9uIChkZWJ1Z19pbmZvX3QgKiBpZCwgaW50IGxldmVsLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBkYXRhKTsKK2RlYnVnX2VudHJ5X3QqIGRlYnVnX2xvbmdfZXhjZXB0aW9uKGRlYnVnX2luZm9fdCAqIGlkLCBpbnQgbGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGRhdGEpOworCitQYXJhbWV0ZXI6ICAgICBpZDogICAgIGhhbmRsZSBmb3IgZGVidWcgbG9nICAKKyAgICAgICAgICAgICAgIGxldmVsOiAgZGVidWcgbGV2ZWwgICAgICAgICAgIAorICAgICAgICAgICAgICAgZGF0YTogICBpbnRlZ2VyIHZhbHVlIGZvciBkZWJ1ZyBlbnRyeSAgICAgICAgICAgCisKK1JldHVybiBWYWx1ZTogIEFkZHJlc3Mgb2Ygd3JpdHRlbiBkZWJ1ZyBlbnRyeSAKKworRGVzY3JpcHRpb246ICAgd3JpdGVzIGRlYnVnIGVudHJ5IHRvIGFjdGl2ZSBkZWJ1ZyBhcmVhIChpZiBsZXZlbCA8PSBhY3R1YWwgCisgICAgICAgICAgICAgICBkZWJ1ZyBsZXZlbCkgYW5kIHN3aXRjaGVzIHRvIG5leHQgZGVidWcgYXJlYSAgCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorZGVidWdfZW50cnlfdCogZGVidWdfdGV4dF9leGNlcHRpb24gKGRlYnVnX2luZm9fdCAqIGlkLCBpbnQgbGV2ZWwsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGRhdGEpOworCitQYXJhbWV0ZXI6ICAgICBpZDogICAgIGhhbmRsZSBmb3IgZGVidWcgbG9nICAKKyAgICAgICAgICAgICAgIGxldmVsOiAgZGVidWcgbGV2ZWwgICAgICAgICAgIAorICAgICAgICAgICAgICAgZGF0YTogICBzdHJpbmcgZm9yIGRlYnVnIGVudHJ5ICAKKworUmV0dXJuIFZhbHVlOiAgQWRkcmVzcyBvZiB3cml0dGVuIGRlYnVnIGVudHJ5IAorCitEZXNjcmlwdGlvbjogICB3cml0ZXMgZGVidWcgZW50cnkgaW4gYXNjaWkgZm9ybWF0IHRvIGFjdGl2ZSBkZWJ1ZyBhcmVhIAorICAgICAgICAgICAgICAgKGlmIGxldmVsIDw9IGFjdHVhbCBkZWJ1ZyBsZXZlbCkgYW5kIHN3aXRjaGVzIHRvIG5leHQgZGVidWcgCisgICAgICAgICAgICAgICBhcmVhICAKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitkZWJ1Z19lbnRyeV90KiBkZWJ1Z19zcHJpbnRmX2V4Y2VwdGlvbiAoZGVidWdfaW5mb190ICogaWQsIGludCBsZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyKiBzdHJpbmcsLi4uKTsKKworUGFyYW1ldGVyOiAgICAgaWQ6ICAgIGhhbmRsZSBmb3IgZGVidWcgbG9nICAKKyAgICAgICAgICAgICAgIGxldmVsOiBkZWJ1ZyBsZXZlbCAgCisgICAgICAgICAgICAgICBzdHJpbmc6IGZvcm1hdCBzdHJpbmcgZm9yIGRlYnVnIGVudHJ5ICAKKyAgICAgICAgICAgICAgIC4uLjogdmFyYXJncyB1c2VkIGFzIGluIHNwcmludGYoKQorCitSZXR1cm4gVmFsdWU6ICBBZGRyZXNzIG9mIHdyaXR0ZW4gZGVidWcgZW50cnkgCisKK0Rlc2NyaXB0aW9uOiAgIHdyaXRlcyBkZWJ1ZyBlbnRyeSB3aXRoIGZvcm1hdCBzdHJpbmcgYW5kIHZhcmFyZ3MgKGxvbmdzKSB0byAKKyAgICAgICAgICAgICAgIGFjdGl2ZSBkZWJ1ZyBhcmVhIChpZiBsZXZlbCAkPD0kIGFjdHVhbCBkZWJ1ZyBsZXZlbCkgYW5kCisgICAgICAgICAgICAgICBzd2l0Y2hlcyB0byBuZXh0IGRlYnVnIGFyZWEuIAorICAgICAgICAgICAgICAgZmxvYXRzIGFuZCBsb25nIGxvbmcgZGF0YXR5cGVzIGNhbm5vdCBiZSB1c2VkIGFzIHZhcmFyZ3MuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitpbnQgZGVidWdfcmVnaXN0ZXJfdmlldyAoZGVidWdfaW5mb190ICogaWQsIHN0cnVjdCBkZWJ1Z192aWV3ICp2aWV3KTsKKworUGFyYW1ldGVyOiAgICAgaWQ6ICAgIGhhbmRsZSBmb3IgZGVidWcgbG9nICAKKyAgICAgICAgICAgICAgIHZpZXc6ICBwb2ludGVyIHRvIGRlYnVnIHZpZXcgc3RydWN0IAorCitSZXR1cm4gVmFsdWU6ICAwICA6IG9rIAorICAgICAgICAgICAgICAgPCAwOiBFcnJvciAKKworRGVzY3JpcHRpb246ICAgcmVnaXN0ZXJzIG5ldyBkZWJ1ZyB2aWV3IGFuZCBjcmVhdGVzIHByb2MgZGlyIGVudHJ5IAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2ludCBkZWJ1Z191bnJlZ2lzdGVyX3ZpZXcgKGRlYnVnX2luZm9fdCAqIGlkLCBzdHJ1Y3QgZGVidWdfdmlldyAqdmlldyk7IAorCitQYXJhbWV0ZXI6ICAgICBpZDogICAgaGFuZGxlIGZvciBkZWJ1ZyBsb2cgIAorICAgICAgICAgICAgICAgdmlldzogIHBvaW50ZXIgdG8gZGVidWcgdmlldyBzdHJ1Y3QgCisKK1JldHVybiBWYWx1ZTogIDAgIDogb2sgCisgICAgICAgICAgICAgICA8IDA6IEVycm9yIAorCitEZXNjcmlwdGlvbjogICB1bnJlZ2lzdGVycyBkZWJ1ZyB2aWV3IGFuZCByZW1vdmVzIHByb2MgZGlyIGVudHJ5IAorCisKKworUHJlZGVmaW5lZCB2aWV3czoKKy0tLS0tLS0tLS0tLS0tLS0tCisKK2V4dGVybiBzdHJ1Y3QgZGVidWdfdmlldyBkZWJ1Z19oZXhfYXNjaWlfdmlldzsKK2V4dGVybiBzdHJ1Y3QgZGVidWdfdmlldyBkZWJ1Z19yYXdfdmlldzsKK2V4dGVybiBzdHJ1Y3QgZGVidWdfdmlldyBkZWJ1Z19zcHJpbnRmX3ZpZXc7CisKK0V4YW1wbGVzCistLS0tLS0tLQorCisvKgorICogaGV4X2FzY2lpLSArIHJhdy12aWV3IEV4YW1wbGUKKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGFzbS9kZWJ1Zy5oPgorCitzdGF0aWMgZGVidWdfaW5mb190KiBkZWJ1Z19pbmZvOworCitzdGF0aWMgaW50IGluaXQodm9pZCkKK3sKKyAgICAvKiByZWdpc3RlciA0IGRlYnVnIGFyZWFzIHdpdGggb25lIHBhZ2UgZWFjaCBhbmQgNCBieXRlIGRhdGEgZmllbGQgKi8KKworICAgIGRlYnVnX2luZm8gPSBkZWJ1Z19yZWdpc3RlciAoInRlc3QiLCAwLCA0LCA0ICk7CisgICAgZGVidWdfcmVnaXN0ZXJfdmlldyhkZWJ1Z19pbmZvLCZkZWJ1Z19oZXhfYXNjaWlfdmlldyk7CisgICAgZGVidWdfcmVnaXN0ZXJfdmlldyhkZWJ1Z19pbmZvLCZkZWJ1Z19yYXdfdmlldyk7CisKKyAgICBkZWJ1Z190ZXh0X2V2ZW50KGRlYnVnX2luZm8sIDQgLCAib25lICIpOworICAgIGRlYnVnX2ludF9leGNlcHRpb24oZGVidWdfaW5mbywgNCwgNDcxMSk7CisgICAgZGVidWdfZXZlbnQoZGVidWdfaW5mbywgMywgJmRlYnVnX2luZm8sIDQpOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNsZWFudXAodm9pZCkKK3sKKyAgICBkZWJ1Z191bnJlZ2lzdGVyIChkZWJ1Z19pbmZvKTsKK30KKworbW9kdWxlX2luaXQoaW5pdCk7Cittb2R1bGVfZXhpdChjbGVhbnVwKTsKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8qCisgKiBzcHJpbnRmLXZpZXcgRXhhbXBsZQorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8YXNtL2RlYnVnLmg+CisKK3N0YXRpYyBkZWJ1Z19pbmZvX3QqIGRlYnVnX2luZm87CisKK3N0YXRpYyBpbnQgaW5pdCh2b2lkKQoreworICAgIC8qIHJlZ2lzdGVyIDQgZGVidWcgYXJlYXMgd2l0aCBvbmUgcGFnZSBlYWNoIGFuZCBkYXRhIGZpZWxkIGZvciAqLworICAgIC8qIGZvcm1hdCBzdHJpbmcgcG9pbnRlciArIDIgdmFyYXJncyAoPSAzICogc2l6ZW9mKGxvbmcpKSAgICAgICAqLworCisgICAgZGVidWdfaW5mbyA9IGRlYnVnX3JlZ2lzdGVyICgidGVzdCIsIDAsIDQsIHNpemVvZihsb25nKSAqIDMpOworICAgIGRlYnVnX3JlZ2lzdGVyX3ZpZXcoZGVidWdfaW5mbywmZGVidWdfc3ByaW50Zl92aWV3KTsKKworICAgIGRlYnVnX3NwcmludGZfZXZlbnQoZGVidWdfaW5mbywgMiAsICJmaXJzdCBldmVudCBpbiAlczolaVxuIixfX0ZJTEVfXyxfX0xJTkVfXyk7CisgICAgZGVidWdfc3ByaW50Zl9leGNlcHRpb24oZGVidWdfaW5mbywgMSwgInBvaW50ZXIgdG8gZGVidWcgaW5mbzogJXBcbiIsJmRlYnVnX2luZm8pOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNsZWFudXAodm9pZCkKK3sKKyAgICBkZWJ1Z191bnJlZ2lzdGVyIChkZWJ1Z19pbmZvKTsKK30KKworbW9kdWxlX2luaXQoaW5pdCk7Cittb2R1bGVfZXhpdChjbGVhbnVwKTsKKworCisKK1Byb2NGUyBJbnRlcmZhY2UKKy0tLS0tLS0tLS0tLS0tLS0KK1ZpZXdzIHRvIHRoZSBkZWJ1ZyBsb2dzIGNhbiBiZSBpbnZlc3RpZ2F0ZWQgdGhyb3VnaCByZWFkaW5nIHRoZSBjb3JyZXNwb25kaW5nIAorcHJvYy1maWxlczoKKworRXhhbXBsZToKKworPiBscyAvcHJvYy9zMzkwZGJmL2Rhc2QKK2ZsdXNoICBoZXhfYXNjaWkgIGxldmVsICAgICAgcmF3IAorPiBjYXQgL3Byb2MvczM5MGRiZi9kYXNkL2hleF9hc2NpaSB8IHNvcnQgKzEKKzAwIDAwOTc0NzMzMjcyOjY4MDA5OSAyIC0gMDIgMDAwNmFkN2UgIDA3IGVhIDRhIDkwIHwgLi4uLgorMDAgMDA5NzQ3MzMyNzI6NjgyMjEwIDIgLSAwMiAwMDA2YWRlNiAgNDYgNTIgNDUgNDUgfCBGUkVFCiswMCAwMDk3NDczMzI3Mjo2ODIyMTMgMiAtIDAyIDAwMDZhZGY2ICAwNyBlYSA0YSA5MCB8IC4uLi4KKzAwIDAwOTc0NzMzMjcyOjY4MjI4MSAxICogMDIgMDAwNmFiMDggIDQxIDRjIDRjIDQzIHwgRVhDUCAKKzAxIDAwOTc0NzMzMjcyOjY4MjI4NCAyIC0gMDIgMDAwNmFiMTYgIDQ1IDQzIDRiIDQ0IHwgRUNLRAorMDEgMDA5NzQ3MzMyNzI6NjgyMjg3IDIgLSAwMiAwMDA2YWIyOCAgMDAgMDAgMDAgMDQgfCAuLi4uCiswMSAwMDk3NDczMzI3Mjo2ODIyODkgMiAtIDAyIDAwMDZhYjNlICAwMCAwMCAwMCAyMCB8IC4uLiAKKzAxIDAwOTc0NzMzMjcyOjY4MjI5NyAyIC0gMDIgMDAwNmFkN2UgIDA3IGVhIDRhIDkwIHwgLi4uLgorMDEgMDA5NzQ3MzMyNzI6Njg0Mzg0IDIgLSAwMCAwMDA2YWRlNiAgNDYgNTIgNDUgNDUgfCBGUkVFCiswMSAwMDk3NDczMzI3Mjo2ODQzODggMiAtIDAwIDAwMDZhZGY2ICAwNyBlYSA0YSA5MCB8IC4uLi4KKworU2VlIHNlY3Rpb24gYWJvdXQgcHJlZGVmaW5lZCB2aWV3cyBmb3IgZXhwbGFuYXRpb24gb2YgdGhlIGFib3ZlIG91dHB1dCEKKworQ2hhbmdpbmcgdGhlIGRlYnVnIGxldmVsCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRXhhbXBsZToKKworCis+IGNhdCAvcHJvYy9zMzkwZGJmL2Rhc2QvbGV2ZWwKKzMKKz4gZWNobyAiNSIgPiAvcHJvYy9zMzkwZGJmL2Rhc2QvbGV2ZWwKKz4gY2F0IC9wcm9jL3MzOTBkYmYvZGFzZC9sZXZlbAorNQorCitGbHVzaGluZyBkZWJ1ZyBhcmVhcworLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0RlYnVnIGFyZWFzIGNhbiBiZSBmbHVzaGVkIHdpdGggcGlwaW5nIHRoZSBudW1iZXIgb2YgdGhlIGRlc2lyZWQKK2FyZWEgKDAuLi5uKSB0byB0aGUgcHJvYyBmaWxlICJmbHVzaCIuIFdoZW4gdXNpbmcgIi0iIGFsbCBkZWJ1ZyBhcmVhcworYXJlIGZsdXNoZWQuCisKK0V4YW1wbGVzOgorCisxLiBGbHVzaCBkZWJ1ZyBhcmVhIDA6Cis+IGVjaG8gIjAiID4gL3Byb2MvczM5MGRiZi9kYXNkL2ZsdXNoICAKKworMi4gRmx1c2ggYWxsIGRlYnVnIGFyZWFzOgorPiBlY2hvICItIiA+IC9wcm9jL3MzOTBkYmYvZGFzZC9mbHVzaAorCitTdG9vcGluZyB0aGUgZGVidWcgZmVhdHVyZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0V4YW1wbGU6CisKKzEuIENoZWNrIGlmIHN0b3BwaW5nIGlzIGFsbG93ZWQKKz4gY2F0IC9wcm9jL3N5cy9zMzkwZGJmL2RlYnVnX3N0b3BwYWJsZQorMi4gU3RvcCBkZWJ1ZyBmZWF0dXJlCis+IGVjaG8gMCA+IC9wcm9jL3N5cy9zMzkwZGJmL2RlYnVnX2FjdGl2ZQorCitsY3Jhc2ggSW50ZXJmYWNlCistLS0tLS0tLS0tLS0tLS0tCitJdCBpcyBwbGFubmVkIHRoYXQgdGhlIGR1bXAgYW5hbHlzaXMgdG9vbCBsY3Jhc2ggZ2V0cyBhbiBhZGRpdGlvbmFsIGNvbW1hbmQKKydzMzkwZGJmJyB0byBkaXNwbGF5IGFsbCB0aGUgZGVidWcgbG9ncy4gV2l0aCB0aGlzIHRvb2wgaXQgd2lsbCBiZSBwb3NzaWJsZSAKK3RvIGludmVzdGlnYXRlIHRoZSBkZWJ1ZyBsb2dzIG9uIGEgbGl2ZSBzeXN0ZW0gYW5kIHdpdGggYSBtZW1vcnkgZHVtcCBhZnRlciAKK2Egc3lzdGVtIGNyYXNoLgorCitJbnZlc3RpZ2F0aW5nIHJhdyBtZW1vcnkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorT25lIGxhc3QgcG9zc2liaWxpdHkgdG8gaW52ZXN0aWdhdGUgdGhlIGRlYnVnIGxvZ3MgYXQgYSBsaXZlCitzeXN0ZW0gYW5kIGFmdGVyIGEgc3lzdGVtIGNyYXNoIGlzIHRvIGxvb2sgYXQgdGhlIHJhdyBtZW1vcnkKK3VuZGVyIFZNIG9yIGF0IHRoZSBTZXJ2aWNlIEVsZW1lbnQuCitJdCBpcyBwb3NzaWJsZSB0byBmaW5kIHRoZSBhbmtlciBvZiB0aGUgZGVidWctbG9ncyB0aHJvdWdoCit0aGUgJ2RlYnVnX2FyZWFfZmlyc3QnIHN5bWJvbCBpbiB0aGUgU3lzdGVtIG1hcC4gVGhlbiBvbmUgaGFzCit0byBmb2xsb3cgdGhlIGNvcnJlY3QgcG9pbnRlcnMgb2YgdGhlIGRhdGEtc3RydWN0dXJlcyBkZWZpbmVkCitpbiBkZWJ1Zy5oIGFuZCBmaW5kIHRoZSBkZWJ1Zy1hcmVhcyBpbiBtZW1vcnkuCitOb3JtYWxseSBtb2R1bGVzIHdoaWNoIHVzZSB0aGUgZGVidWcgZmVhdHVyZSB3aWxsIGFsc28gaGF2ZQorYSBnbG9iYWwgdmFyaWFibGUgd2l0aCB0aGUgcG9pbnRlciB0byB0aGUgZGVidWctbG9ncy4gRm9sbG93aW5nCit0aGlzIHBvaW50ZXIgaXQgd2lsbCBhbHNvIGJlIHBvc3NpYmxlIHRvIGZpbmQgdGhlIGRlYnVnIGxvZ3MgaW4KK21lbW9yeS4KKworRm9yIHRoaXMgbWV0aG9kIGl0IGlzIHJlY29tbWVuZGVkIHRvIHVzZSAnMTYgKiB4ICsgNCcgYnl0ZSAoeCA9IDAuLm4pCitmb3IgdGhlIGxlbmd0aCBvZiB0aGUgZGF0YSBmaWVsZCBpbiBkZWJ1Z19yZWdpc3RlcigpIGluCitvcmRlciB0byBzZWUgdGhlIGRlYnVnIGVudHJpZXMgd2VsbCBmb3JtYXR0ZWQuCisKKworUHJlZGVmaW5lZCBWaWV3cworLS0tLS0tLS0tLS0tLS0tLQorCitUaGVyZSBhcmUgdGhyZWUgcHJlZGVmaW5lZCB2aWV3czogaGV4X2FzY2lpLCByYXcgYW5kIHNwcmludGYuIAorVGhlIGhleF9hc2NpaSB2aWV3IHNob3dzIHRoZSBkYXRhIGZpZWxkIGluIGhleCBhbmQgYXNjaWkgcmVwcmVzZW50YXRpb24gCisoZS5nLiAnNDUgNDMgNGIgNDQgfCBFQ0tEJykuIAorVGhlIHJhdyB2aWV3IHJldHVybnMgYSBieXRlc3RyZWFtIGFzIHRoZSBkZWJ1ZyBhcmVhcyBhcmUgc3RvcmVkIGluIG1lbW9yeS4KKworVGhlIHNwcmludGYgdmlldyBmb3JtYXRzIHRoZSBkZWJ1ZyBlbnRyaWVzIGluIHRoZSBzYW1lIHdheSBhcyB0aGUgc3ByaW50ZgorZnVuY3Rpb24gd291bGQgZG8uIFRoZSBzcHJpbnRmIGV2ZW50L2V4cGVjdGlvbiBmdWN0aW9ucyB3cml0ZSB0byB0aGUgCitkZWJ1ZyBlbnRyeSBhIHBvaW50ZXIgdG8gdGhlIGZvcm1hdCBzdHJpbmcgKHNpemUgPSBzaXplb2YobG9uZykpIAorYW5kIGZvciBlYWNoIHZhcmFyZyBhIGxvbmcgdmFsdWUuIFNvIGUuZy4gZm9yIGEgZGVidWcgZW50cnkgd2l0aCBhIGZvcm1hdCAKK3N0cmluZyBwbHVzIHR3byB2YXJhcmdzIG9uZSB3b3VsZCBuZWVkIHRvIGFsbG9jYXRlIGEgKDMgKiBzaXplb2YobG9uZykpIAorYnl0ZSBkYXRhIGFyZWEgaW4gdGhlIGRlYnVnX3JlZ2lzdGVyKCkgZnVuY3Rpb24uCisKKworTk9URTogSWYgdXNpbmcgdGhlIHNwcmludGYgdmlldyBkbyBOT1QgdXNlIG90aGVyIGV2ZW50L2V4Y2VwdGlvbiBmdW5jdGlvbnMKK3RoYW4gdGhlIHNwcmludGYtZXZlbnQgYW5kIC1leGNlcHRpb24gZnVuY3Rpb25zLgorCitUaGUgZm9ybWF0IG9mIHRoZSBoZXhfYXNjaWkgYW5kIHNwcmludGYgdmlldyBpcyBhcyBmb2xsb3dzOgorLSBOdW1iZXIgb2YgYXJlYQorLSBUaW1lc3RhbXAgKGZvcm1hdHRlZCBhcyBzZWNvbmRzIGFuZCBtaWNyb3NlY29uZHMgc2luY2UgMDA6MDA6MDAgQ29vcmRpbmF0ZWQgCisgIFVuaXZlcnNhbCBUaW1lIChVVEMpLCBKYW51YXJ5IDEsIDE5NzApCistIGxldmVsIG9mIGRlYnVnIGVudHJ5CistIEV4Y2VwdGlvbiBmbGFnICgqID0gRXhjZXB0aW9uKQorLSBDcHUtTnVtYmVyIG9mIGNhbGxpbmcgdGFzaworLSBSZXR1cm4gQWRkcmVzcyB0byBjYWxsZXIKKy0gZGF0YSBmaWVsZAorCitUaGUgZm9ybWF0IG9mIHRoZSByYXcgdmlldyBpczoKKy0gSGVhZGVyIGFzIGRlc2NyaWJlZCBpbiBkZWJ1Zy5oCistIGRhdGFmaWVsZCAKKworQSB0eXBpY2FsIGxpbmUgb2YgdGhlIGhleF9hc2NpaSB2aWV3IHdpbGwgbG9vayBsaWtlIHRoZSBmb2xsb3dpbmcgKGZpcnN0IGxpbmUgCitpcyBvbmx5IGZvciBleHBsYW5hdGlvbiBhbmQgd2lsbCBub3QgYmUgZGlzcGxheWVkIHdoZW4gJ2NhdGluZycgdGhlIHZpZXcpOgorCithcmVhICB0aW1lICAgICAgICAgICBsZXZlbCBleGNlcHRpb24gY3B1IGNhbGxlciAgICBkYXRhIChoZXggKyBhc2NpaSkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiswMCAgICAwMDk2NDQxOTQwOTo0NDA2OTAgMSAtICAgICAgICAgMDAgIDg4MDIzZmUgICAKKworCitEZWZpbmluZyB2aWV3cworLS0tLS0tLS0tLS0tLS0KKworVmlld3MgYXJlIHNwZWNpZmllZCB3aXRoIHRoZSAnZGVidWdfdmlldycgc3RydWN0dXJlLiBUaGVyZSBhcmUgZGVmaW5lZAorY2FsbGJhY2sgZnVuY3Rpb25zIHdoaWNoIGFyZSB1c2VkIGZvciByZWFkaW5nIGFuZCB3cml0aW5nIHRoZSBwcm9jIGZpbGVzOgorCitzdHJ1Y3QgZGVidWdfdmlldyB7CisgICAgICAgIGNoYXIgbmFtZVtERUJVR19NQVhfUFJPQ0ZfTEVOXTsgIAorICAgICAgICBkZWJ1Z19wcm9sb2dfcHJvY190KiBwcm9sb2dfcHJvYzsgCisgICAgICAgIGRlYnVnX2hlYWRlcl9wcm9jX3QqIGhlYWRlcl9wcm9jOworICAgICAgICBkZWJ1Z19mb3JtYXRfcHJvY190KiBmb3JtYXRfcHJvYzsKKyAgICAgICAgZGVidWdfaW5wdXRfcHJvY190KiAgaW5wdXRfcHJvYzsKKwl2b2lkKiAgICAgICAgICAgICAgICBwcml2YXRlX2RhdGE7Cit9OworCit3aGVyZQorCit0eXBlZGVmIGludCAoZGVidWdfaGVhZGVyX3Byb2NfdCkgKGRlYnVnX2luZm9fdCogaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkZWJ1Z192aWV3KiB2aWV3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYXJlYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdfZW50cnlfdCogZW50cnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIqIG91dF9idWYpOworCit0eXBlZGVmIGludCAoZGVidWdfZm9ybWF0X3Byb2NfdCkgKGRlYnVnX2luZm9fdCogaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkZWJ1Z192aWV3KiB2aWV3LCBjaGFyKiBvdXRfYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBpbl9idWYpOwordHlwZWRlZiBpbnQgKGRlYnVnX3Byb2xvZ19wcm9jX3QpIChkZWJ1Z19pbmZvX3QqIGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZGVidWdfdmlldyogdmlldywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogb3V0X2J1Zik7Cit0eXBlZGVmIGludCAoZGVidWdfaW5wdXRfcHJvY190KSAoZGVidWdfaW5mb190KiBpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZGVidWdfdmlldyogdmlldywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZmlsZSogZmlsZSwgY29uc3QgY2hhciogdXNlcl9idWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGluX2J1Zl9zaXplLCBsb2ZmX3QqIG9mZnNldCk7CisKKworVGhlICJwcml2YXRlX2RhdGEiIG1lbWJlciBjYW4gYmUgdXNlZCBhcyBwb2ludGVyIHRvIHZpZXcgc3BlY2lmaWMgZGF0YS4KK0l0IGlzIG5vdCB1c2VkIGJ5IHRoZSBkZWJ1ZyBmZWF0dXJlIGl0c2VsZi4KKworVGhlIG91dHB1dCB3aGVuIHJlYWRpbmcgYSBkZWJ1Zy1wcm9jIGZpbGUgaXMgc3RydWN0dXJlZCBsaWtlIHRoaXM6CisKKyJwcm9sb2dfcHJvYyBvdXRwdXQiCisKKyJoZWFkZXJfcHJvYyBvdXRwdXQgMSIgICJmb3JtYXRfcHJvYyBvdXRwdXQgMSIKKyJoZWFkZXJfcHJvYyBvdXRwdXQgMiIgICJmb3JtYXRfcHJvYyBvdXRwdXQgMiIKKyJoZWFkZXJfcHJvYyBvdXRwdXQgMyIgICJmb3JtYXRfcHJvYyBvdXRwdXQgMyIKKy4uLgorCitXaGVuIGEgdmlldyBpcyByZWFkIGZyb20gdGhlIHByb2MgZnMsIHRoZSBEZWJ1ZyBGZWF0dXJlIGNhbGxzIHRoZSAKKydwcm9sb2dfcHJvYycgb25jZSBmb3Igd3JpdGluZyB0aGUgcHJvbG9nLgorVGhlbiAnaGVhZGVyX3Byb2MnIGFuZCAnZm9ybWF0X3Byb2MnIGFyZSBjYWxsZWQgZm9yIGVhY2ggCitleGlzdGluZyBkZWJ1ZyBlbnRyeS4KKworVGhlIGlucHV0X3Byb2MgY2FuIGJlIHVzZWQgdG8gaW1wbGVtZW50IGZ1bmN0aW9uYWxpdHkgd2hlbiBpdCBpcyB3cml0dGVuIHRvIAordGhlIHZpZXcgKGUuZy4gbGlrZSB3aXRoICdlY2hvICIwIiA+IC9wcm9jL3MzOTBkYmYvZGFzZC9sZXZlbCkuCisKK0ZvciBoZWFkZXJfcHJvYyB0aGVyZSBjYW4gYmUgdXNlZCB0aGUgZGVmYXVsdCBmdW5jdGlvbgorZGVidWdfZGZsdF9oZWFkZXJfZm4oKSB3aGljaCBpcyBkZWZpbmVkIGluIGluIGRlYnVnLmguCithbmQgd2hpY2ggcHJvZHVjZXMgdGhlIHNhbWUgaGVhZGVyIG91dHB1dCBhcyB0aGUgcHJlZGVmaW5lZCB2aWV3cy4KK0UuZzoKKzAwIDAwOTY0NDE5NDA5OjQ0MDc2MSAyIC0gMDAgODgwMjNlYworCitJbiBvcmRlciB0byBzZWUgaG93IHRvIHVzZSB0aGUgY2FsbGJhY2sgZnVuY3Rpb25zIGNoZWNrIHRoZSBpbXBsZW1lbnRhdGlvbgorb2YgdGhlIGRlZmF1bHQgdmlld3MhCisKK0V4YW1wbGUKKworI2luY2x1ZGUgPGFzbS9kZWJ1Zy5oPgorCisjZGVmaW5lIFVOS05PV05TVFIgImRhdGE6ICUwOHgiCisKK2NvbnN0IGNoYXIqIG1lc3NhZ2VzW10gPQoreyJUaGlzIGVycm9yLi4uLi4uLi4uLi5cbiIsCisgIlRoYXQgZXJyb3IuLi4uLi4uLi4uLlxuIiwKKyAiUHJvYmxlbS4uLi4uLi4uLi4uLi4uXG4iLAorICJTb21ldGhpbmcgd2VudCB3cm9uZy5cbiIsCisgIkV2ZXJ5dGhpbmcgb2suLi4uLi4uLlxuIiwKKyBOVUxMCit9OworCitzdGF0aWMgaW50IGRlYnVnX3Rlc3RfZm9ybWF0X2ZuKAorICAgZGVidWdfaW5mb190ICogaWQsIHN0cnVjdCBkZWJ1Z192aWV3ICp2aWV3LCAKKyAgIGNoYXIgKm91dF9idWYsIGNvbnN0IGNoYXIgKmluX2J1ZgorKQoreworICBpbnQgaSwgcmMgPSAwOworCisgIGlmKGlkLT5idWZfc2l6ZSA+PSA0KSB7CisgICAgIGludCBtc2dfbnIgPSAqKChpbnQqKWluX2J1Zik7CisgICAgIGlmKG1zZ19uciA8IHNpemVvZihtZXNzYWdlcykvc2l6ZW9mKGNoYXIqKSAtIDEpCisgICAgICAgIHJjICs9IHNwcmludGYob3V0X2J1ZiwgIiVzIiwgbWVzc2FnZXNbbXNnX25yXSk7CQorICAgICBlbHNlCisgICAgICAgIHJjICs9IHNwcmludGYob3V0X2J1ZiwgVU5LTk9XTlNUUiwgbXNnX25yKTsKKyAgfQorIG91dDoKKyAgIHJldHVybiByYzsKK30KKworc3RydWN0IGRlYnVnX3ZpZXcgZGVidWdfdGVzdF92aWV3ID0geworICAibXl2aWV3IiwgICAgICAgICAgICAgICAgIC8qIG5hbWUgb2YgdmlldyAqLworICBOVUxMLCAgICAgICAgICAgICAgICAgICAgIC8qIG5vIHByb2xvZyAqLworICAmZGVidWdfZGZsdF9oZWFkZXJfZm4sICAgIC8qIGRlZmF1bHQgaGVhZGVyIGZvciBlYWNoIGVudHJ5ICovCisgICZkZWJ1Z190ZXN0X2Zvcm1hdF9mbiwgICAgLyogb3VyIG93biBmb3JtYXQgZnVuY3Rpb24gKi8KKyAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAvKiBubyBpbnB1dCBmdW5jdGlvbiAqLworICBOVUxMICAgICAgICAgICAgICAgICAgICAgIC8qIG5vIHByaXZhdGUgZGF0YSAqLworfTsKKworPT09PT0KK3Rlc3Q6Cis9PT09PQorZGVidWdfaW5mb190ICpkZWJ1Z19pbmZvOworLi4uCitkZWJ1Z19pbmZvID0gZGVidWdfcmVnaXN0ZXIgKCJ0ZXN0IiwgMCwgNCwgNCApKTsKK2RlYnVnX3JlZ2lzdGVyX3ZpZXcoZGVidWdfaW5mbywgJmRlYnVnX3Rlc3Rfdmlldyk7Citmb3IoaSA9IDA7IGkgPCAxMDsgaSArKykgZGVidWdfaW50X2V2ZW50KGRlYnVnX2luZm8sIDEsIGkpOworCis+IGNhdCAvcHJvYy9zMzkwZGJmL3Rlc3QvbXl2aWV3CiswMCAwMDk2NDQxOTczNDo2MTE0MDIgMSAtIDAwIDg4MDQyY2EgICBUaGlzIGVycm9yLi4uLi4uLi4uLi4KKzAwIDAwOTY0NDE5NzM0OjYxMTQwNSAxIC0gMDAgODgwNDJjYSAgIFRoYXQgZXJyb3IuLi4uLi4uLi4uLgorMDAgMDA5NjQ0MTk3MzQ6NjExNDA4IDEgLSAwMCA4ODA0MmNhICAgUHJvYmxlbS4uLi4uLi4uLi4uLi4uCiswMCAwMDk2NDQxOTczNDo2MTE0MTEgMSAtIDAwIDg4MDQyY2EgICBTb21ldGhpbmcgd2VudCB3cm9uZy4KKzAwIDAwOTY0NDE5NzM0OjYxMTQxNCAxIC0gMDAgODgwNDJjYSAgIEV2ZXJ5dGhpbmcgb2suLi4uLi4uLgorMDAgMDA5NjQ0MTk3MzQ6NjExNDE3IDEgLSAwMCA4ODA0MmNhICAgZGF0YTogMDAwMDAwMDUKKzAwIDAwOTY0NDE5NzM0OjYxMTQxOSAxIC0gMDAgODgwNDJjYSAgIGRhdGE6IDAwMDAwMDA2CiswMCAwMDk2NDQxOTczNDo2MTE0MjIgMSAtIDAwIDg4MDQyY2EgICBkYXRhOiAwMDAwMDAwNworMDAgMDA5NjQ0MTk3MzQ6NjExNDI1IDEgLSAwMCA4ODA0MmNhICAgZGF0YTogMDAwMDAwMDgKKzAwIDAwOTY0NDE5NzM0OjYxMTQyOCAxIC0gMDAgODgwNDJjYSAgIGRhdGE6IDAwMDAwMDA5Cg==